diff --git a/source/Cosmos.IL2CPU/IL/Conv_R8.cs b/source/Cosmos.IL2CPU/IL/Conv_R8.cs index cc42e13b7..560426e54 100644 --- a/source/Cosmos.IL2CPU/IL/Conv_R8.cs +++ b/source/Cosmos.IL2CPU/IL/Conv_R8.cs @@ -21,11 +21,11 @@ namespace Cosmos.IL2CPU.X86.IL case 4: if (TypeIsFloat(xSource)) { - XS.ConvertSS2SD(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE.ConvertSS2SD(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); } else { - XS.ConvertSI2SD(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE.ConvertSI2SD(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); } // expand stack, that moved data is valid stack XS.Sub(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.ESP), 4); @@ -46,4 +46,4 @@ namespace Cosmos.IL2CPU.X86.IL } } } -} \ No newline at end of file +} diff --git a/source/Cosmos.IL2CPU/IL/Conv_U1.cs b/source/Cosmos.IL2CPU/IL/Conv_U1.cs index 0a3af5e47..f3840e1e2 100644 --- a/source/Cosmos.IL2CPU/IL/Conv_U1.cs +++ b/source/Cosmos.IL2CPU/IL/Conv_U1.cs @@ -31,7 +31,7 @@ namespace Cosmos.IL2CPU.X86.IL } else if (xSourceSize == 8) { - XS.MoveDoubleAndDupplicate(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE3.MoveDoubleAndDuplicate(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); XS.SSE2.ConvertSD2SIAndTruncate(XSRegisters.EAX, XSRegisters.XMM0); new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.ESP, SourceReg = CPUx86.RegistersEnum.EAX, DestinationIsIndirect = true }; } diff --git a/source/Cosmos.IL2CPU/IL/Conv_U2.cs b/source/Cosmos.IL2CPU/IL/Conv_U2.cs index 91c6dfb9c..005a95e49 100644 --- a/source/Cosmos.IL2CPU/IL/Conv_U2.cs +++ b/source/Cosmos.IL2CPU/IL/Conv_U2.cs @@ -30,7 +30,7 @@ namespace Cosmos.IL2CPU.X86.IL } else if (xSourceSize == 8) { - XS.MoveDoubleAndDupplicate(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE3.MoveDoubleAndDuplicate(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); XS.SSE2.ConvertSD2SIAndTruncate(XSRegisters.EAX, XSRegisters.XMM0); new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.ESP, SourceReg = CPUx86.RegistersEnum.EAX, DestinationIsIndirect = true }; } diff --git a/source/Cosmos.IL2CPU/IL/Conv_U4.cs b/source/Cosmos.IL2CPU/IL/Conv_U4.cs index 8647663cc..c678569fd 100644 --- a/source/Cosmos.IL2CPU/IL/Conv_U4.cs +++ b/source/Cosmos.IL2CPU/IL/Conv_U4.cs @@ -30,7 +30,7 @@ namespace Cosmos.IL2CPU.X86.IL case 4: if (TypeIsFloat(xSource)) { - XS.MoveSS(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE.MoveSS(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); XS.SSE.ConvertSS2SIAndTruncate(XSRegisters.EAX, XSRegisters.XMM0); new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.ESP, SourceReg = CPUx86.RegistersEnum.EAX, DestinationIsIndirect = true }; } @@ -38,7 +38,7 @@ namespace Cosmos.IL2CPU.X86.IL case 8: if (TypeIsFloat(xSource)) { - XS.MoveDoubleAndDupplicate(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE3.MoveDoubleAndDuplicate(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); XS.SSE2.ConvertSD2SIAndTruncate(XSRegisters.EAX, XSRegisters.XMM0); new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.ESP, SourceReg = CPUx86.RegistersEnum.EAX, DestinationIsIndirect = true }; XS.Pop(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EAX)); diff --git a/source/Cosmos.IL2CPU/IL/Div.cs b/source/Cosmos.IL2CPU/IL/Div.cs index 5f89148a9..c5dc03f05 100644 --- a/source/Cosmos.IL2CPU/IL/Div.cs +++ b/source/Cosmos.IL2CPU/IL/Div.cs @@ -47,7 +47,7 @@ namespace Cosmos.IL2CPU.X86.IL // divisor //low - XS.Mov(XSRegisters.ESI, XSRegisters.ESP, sourceIsIndirect: true); + XS.Set(XSRegisters.ESI, XSRegisters.ESP, sourceIsIndirect: true); //high XS.Set(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EDI), XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.ESP), sourceDisplacement: 4); @@ -56,7 +56,7 @@ namespace Cosmos.IL2CPU.X86.IL //dividend // low - XS.Mov(XSRegisters.EAX, XSRegisters.ESP, sourceIsIndirect: true); + XS.Set(XSRegisters.EAX, XSRegisters.ESP, sourceIsIndirect: true); //high XS.Set(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EDX), XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.ESP), sourceDisplacement: 4); @@ -127,9 +127,9 @@ namespace Cosmos.IL2CPU.X86.IL { if (TypeIsFloat(xStackItem)) { - XS.MoveSS(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE.MoveSS(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); XS.Add(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.ESP), 4); - XS.MoveSS(XSRegisters.XMM1, XSRegisters.ESP, sourceIsIndirect: true); + XS.SSE.MoveSS(XSRegisters.XMM1, XSRegisters.ESP, sourceIsIndirect: true); XS.SSE.DivSS(XSRegisters.XMM0, XSRegisters.XMM1); new MoveSS { DestinationReg = CPUx86.RegistersEnum.ESP, DestinationIsIndirect = true, SourceReg = CPUx86.RegistersEnum.XMM1 }; } diff --git a/source/Cosmos.IL2CPU/IL/Div_Un.cs b/source/Cosmos.IL2CPU/IL/Div_Un.cs index e861d7083..318fb2284 100644 --- a/source/Cosmos.IL2CPU/IL/Div_Un.cs +++ b/source/Cosmos.IL2CPU/IL/Div_Un.cs @@ -48,7 +48,7 @@ namespace Cosmos.IL2CPU.X86.IL // divisor //low - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.ESI, SourceReg = CPUx86.RegistersEnum.ESP, SourceIsIndirect = true }; + XS.Set(XSRegisters.ESI, XSRegisters.ESP, sourceIsIndirect: true); //high XS.Set(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EDI), XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.ESP), sourceDisplacement: 4); @@ -124,9 +124,9 @@ namespace Cosmos.IL2CPU.X86.IL { if (TypeIsFloat(xStackItem)) { - new MoveSS { DestinationReg = CPUx86.RegistersEnum.XMM0, SourceReg = CPUx86.RegistersEnum.ESP, SourceIsIndirect = true }; + XS.SSE.MoveSS(XSRegisters.XMM0, XSRegisters.ESP, sourceIsIndirect: true); XS.Add(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.ESP), 4); - new MoveSS { DestinationReg = CPUx86.RegistersEnum.XMM1, SourceReg = CPUx86.RegistersEnum.ESP, SourceIsIndirect = true }; + XS.SSE.MoveSS(XSRegisters.XMM1, XSRegisters.ESP, sourceIsIndirect: true); XS.SSE.MulSS(XSRegisters.XMM0, XSRegisters.XMM1); new MoveSS { DestinationReg = CPUx86.RegistersEnum.ESP, DestinationIsIndirect = true, SourceReg = CPUx86.RegistersEnum.XMM1 }; } diff --git a/source/Cosmos.IL2CPU/IL/Ldelem_Ref.cs b/source/Cosmos.IL2CPU/IL/Ldelem_Ref.cs index c7fca34c8..1225889c3 100644 --- a/source/Cosmos.IL2CPU/IL/Ldelem_Ref.cs +++ b/source/Cosmos.IL2CPU/IL/Ldelem_Ref.cs @@ -37,7 +37,7 @@ namespace Cosmos.IL2CPU.X86.IL // pop the array XS.Pop(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EDX)); // convert to real memory address - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.EDX, SourceReg = CPUx86.RegistersEnum.EDX, SourceIsIndirect = true }; + XS.Set(XSRegisters.EDX, XSRegisters.EDX, sourceIsIndirect: true); XS.Add(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EDX), XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EAX)); diff --git a/source/Cosmos.IL2CPU/IL/Ldelema.cs b/source/Cosmos.IL2CPU/IL/Ldelema.cs index 2e9b499b6..0d2c4e6b8 100644 --- a/source/Cosmos.IL2CPU/IL/Ldelema.cs +++ b/source/Cosmos.IL2CPU/IL/Ldelema.cs @@ -31,11 +31,11 @@ namespace Cosmos.IL2CPU.X86.IL // pop the array now XS.Pop(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EDX)); // translate it to actual memory - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.EDX, SourceReg = CPUx86.RegistersEnum.EDX, SourceIsIndirect = true }; + XS.Set(XSRegisters.EDX, XSRegisters.EDX, sourceIsIndirect: true); if (aOpType.StackPopTypes.Last().GetElementType().IsClass) { - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.EDX, SourceReg = CPUx86.RegistersEnum.EDX, SourceIsIndirect = true }; + XS.Set(XSRegisters.EDX, XSRegisters.EDX, sourceIsIndirect: true); } XS.Add(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EDX), XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EAX)); diff --git a/source/Cosmos.IL2CPU/IL/Ldfld.cs b/source/Cosmos.IL2CPU/IL/Ldfld.cs index cf6e6fdd8..8d9913a3b 100644 --- a/source/Cosmos.IL2CPU/IL/Ldfld.cs +++ b/source/Cosmos.IL2CPU/IL/Ldfld.cs @@ -131,13 +131,13 @@ namespace Cosmos.IL2CPU.X86.IL if ((!aTypeOnStack.IsPointer) && (aDeclaringType.IsClass)) { // convert to real memory address - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.ECX, SourceReg = CPUx86.RegistersEnum.ECX, SourceIsIndirect = true }; + XS.Set(XSRegisters.ECX, XSRegisters.ECX, sourceIsIndirect: true); } XS.Add(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.ECX), (uint)(xOffset)); if (xFieldInfo.IsExternalValue && aDerefExternalField) { - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.ECX, SourceReg = CPUx86.RegistersEnum.ECX, SourceIsIndirect = true }; + XS.Set(XSRegisters.ECX, XSRegisters.ECX, sourceIsIndirect: true); } for (int i = 1; i <= (xSize / 4); i++) @@ -151,17 +151,17 @@ namespace Cosmos.IL2CPU.X86.IL switch (xSize % 4) { case 1: - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.AL, SourceReg = CPUx86.RegistersEnum.ECX, SourceIsIndirect = true }; + XS.Set(XSRegisters.AL, XSRegisters.ECX, sourceIsIndirect: true); XS.Push(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EAX)); break; case 2: - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.AX, SourceReg = CPUx86.RegistersEnum.ECX, SourceIsIndirect = true }; + XS.Set(XSRegisters.AX, XSRegisters.ECX, sourceIsIndirect: true); XS.Push(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EAX)); break; case 3: //For Release - new CPUx86.Mov { DestinationReg = CPUx86.RegistersEnum.EAX, SourceReg = CPUx86.RegistersEnum.ECX, SourceIsIndirect = true }; + XS.Set(XSRegisters.EAX, XSRegisters.ECX, sourceIsIndirect: true); XS.ShiftRight(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EAX), 8); XS.Push(XSRegisters.OldToNewRegister(CPUx86.RegistersEnum.EAX)); break;