diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/Cosmos.IL2CPU.X86.csproj b/source2/IL2PCU/Cosmos.IL2CPU.X86/Cosmos.IL2CPU.X86.csproj
index 9e22ad1b1..4cbff3019 100644
--- a/source2/IL2PCU/Cosmos.IL2CPU.X86/Cosmos.IL2CPU.X86.csproj
+++ b/source2/IL2PCU/Cosmos.IL2CPU.X86/Cosmos.IL2CPU.X86.csproj
@@ -59,11 +59,6 @@
-
-
-
-
-
@@ -113,6 +108,7 @@
+
diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bge_Un.cs b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bge_Un.cs
deleted file mode 100644
index 05eaf7bfd..000000000
--- a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bge_Un.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-
-namespace Cosmos.IL2CPU.X86.IL
-{
- [Cosmos.IL2CPU.OpCode(ILOpCode.Code.Bge_Un)]
- public class Bge_Un: ILOp
- {
- public Bge_Un(Cosmos.IL2CPU.Assembler aAsmblr):base(aAsmblr)
- {
- }
-
- public override void Execute(MethodInfo aMethod, ILOpCode aOpCode) {
- //TODO: Implement this Op
- //TODO: Merge these like Branch if possible, ie Branch_Un
- }
-
-
- // using System;
- // using System.IO;
- //
- //
- // using CPU = Indy.IL2CPU.Assembler;
- // using CPUx86 = Indy.IL2CPU.Assembler.X86;
- //
- // namespace Indy.IL2CPU.IL.X86 {
- // [OpCode(OpCodeEnum.Bge_Un)]
- // public class Bge_Un: Op {
- // public readonly string TargetLabel;
- // public readonly string CurInstructionLabel;
- // private string mNextLabel;
- // private string mCurLabel;
- // private uint mCurOffset;
- // private MethodInformation mMethodInformation;
- // public Bge_Un(ILReader aReader, MethodInformation aMethodInfo)
- // : base(aReader, aMethodInfo) {
- // TargetLabel = GetInstructionLabel(aReader.OperandValueBranchPosition);
- // CurInstructionLabel = GetInstructionLabel(aReader);
- // mMethodInformation = aMethodInfo;
- // mCurOffset = aReader.Position;
- // mCurLabel = IL.Op.GetInstructionLabel(aReader);
- // mNextLabel = IL.Op.GetInstructionLabel(aReader.NextPosition);
- // }
- // public override void DoAssemble() {
- // if (Assembler.StackContents.Peek().IsFloat) {
- // EmitNotSupportedException(Assembler, GetServiceProvider(), "Floats are not yet supported (Bge)", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // int xSize = Math.Max(Assembler.StackContents.Pop().Size, Assembler.StackContents.Pop().Size);
- // if (xSize > 8) {
- // EmitNotSupportedException(Assembler, GetServiceProvider(), "StackSize>8 not supported (Bge)", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // string BaseLabel = CurInstructionLabel + "__";
- // string LabelTrue = BaseLabel + "True";
- // string LabelFalse = BaseLabel + "False";
- // if (xSize > 4)
- // {
- // new CPUx86.Pop{DestinationReg = CPUx86.Registers.EAX};
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EDX };
- // //value2: EDX:EAX
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EBX };
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.ECX };
- // //value1: ECX:EBX
- // new CPUx86.Sub { DestinationReg = CPUx86.Registers.EBX, SourceReg = CPUx86.Registers.EAX };
- // new CPUx86.SubWithCarry { DestinationReg = CPUx86.Registers.ECX, SourceReg = CPUx86.Registers.EDX };
- // //result = value1 - value2
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.GreaterThanOrEqualTo, DestinationLabel = TargetLabel };
- // } else {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX };
- // new CPUx86.Compare { DestinationReg = CPUx86.Registers.EAX, SourceReg=CPUx86.Registers.ESP, SourceIsIndirect=true};
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.GreaterThanOrEqualTo, DestinationLabel = LabelFalse };
- // new CPUx86.Jump { DestinationLabel = LabelTrue };
- // new CPU.Label(LabelTrue);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // new CPUx86.Jump { DestinationLabel = TargetLabel };
- // new CPU.Label(LabelFalse);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // }
- // }
- // }
- // }
-
- }
-}
diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bgt_Un.cs b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bgt_Un.cs
deleted file mode 100644
index 1a1bd401b..000000000
--- a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bgt_Un.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-
-namespace Cosmos.IL2CPU.X86.IL
-{
- [Cosmos.IL2CPU.OpCode(ILOpCode.Code.Bgt_Un)]
- public class Bgt_Un: ILOp
- {
- public Bgt_Un(Cosmos.IL2CPU.Assembler aAsmblr):base(aAsmblr)
- {
- }
-
- public override void Execute(MethodInfo aMethod, ILOpCode aOpCode) {
- //TODO: Implement this Op
- }
-
-
- // using System;
- // using System.IO;
- //
- //
- // using CPU = Indy.IL2CPU.Assembler;
- // using CPUx86 = Indy.IL2CPU.Assembler.X86;
- //
- // namespace Indy.IL2CPU.IL.X86 {
- // [OpCode(OpCodeEnum.Bgt_Un)]
- // public class Bgt_Un: Op {
- // public readonly string TargetLabel;
- // public readonly string CurInstructionLabel;
- // private string mNextLabel;
- // private string mCurLabel;
- // private uint mCurOffset;
- // private MethodInformation mMethodInformation;
- //
- // public Bgt_Un(ILReader aReader, MethodInformation aMethodInfo)
- // : base(aReader, aMethodInfo) {
- // TargetLabel = GetInstructionLabel(aReader.OperandValueBranchPosition);
- // CurInstructionLabel = GetInstructionLabel(aReader);
- // mMethodInformation = aMethodInfo;
- // mCurOffset = aReader.Position;
- // mCurLabel = IL.Op.GetInstructionLabel(aReader);
- // mNextLabel = IL.Op.GetInstructionLabel(aReader.NextPosition);
- // }
- // public override void DoAssemble() {
- // if (Assembler.StackContents.Peek().IsFloat)
- // {
- // EmitNotSupportedException(Assembler, GetServiceProvider(), "Floats not yet supported!", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // var rightTop = Assembler.StackContents.Pop();
- // var leftBottom = Assembler.StackContents.Pop();
- // int xSize = Math.Max(rightTop.Size, leftBottom.Size);
- // if (xSize > 8)
- // {
- // EmitNotSupportedException(Assembler, GetServiceProvider(), "StackSize>8 not supported", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- //
- // string BaseLabel = CurInstructionLabel + "__";
- // string LabelTrue = BaseLabel + "True";
- // string LabelFalse = BaseLabel + "False";
- //
- // if (xSize <= 4)
- // {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX };
- // new CPUx86.Compare{DestinationReg=CPUx86.Registers.EAX, SourceReg=CPUx86.Registers.ESP, SourceIsIndirect=true};
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.Below, DestinationLabel = LabelTrue };
- // new CPUx86.Jump { DestinationLabel = LabelFalse };
- // new CPU.Label(LabelTrue);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // new CPUx86.Jump { DestinationLabel = TargetLabel };
- // new CPU.Label(LabelFalse);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // return;
- // }
- //
- // if (xSize == 8)
- // {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX };
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EDX };
- // //value2: EDX:EAX
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EBX };
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.ECX };
- // //value1: ECX:EBX
- // new CPUx86.Sub { DestinationReg = CPUx86.Registers.EBX, SourceReg = CPUx86.Registers.EAX };
- // new CPUx86.SubWithCarry { DestinationReg = CPUx86.Registers.ECX, SourceReg = CPUx86.Registers.EDX };
- // //result = value1 - value2
- // new CPUx86.ConditionalJump{Condition=CPUx86.ConditionalTestEnum.Above,DestinationLabel = TargetLabel };
- // return;
- // }
- //
- // throw new NotSupportedException();
- // }
- // }
- // }
-
- }
-}
diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Ble_Un.cs b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Ble_Un.cs
deleted file mode 100644
index b16fbf7a5..000000000
--- a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Ble_Un.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-
-namespace Cosmos.IL2CPU.X86.IL
-{
- [Cosmos.IL2CPU.OpCode(ILOpCode.Code.Ble_Un)]
- public class Ble_Un: ILOp
- {
- public Ble_Un(Cosmos.IL2CPU.Assembler aAsmblr):base(aAsmblr)
- {
- }
-
- public override void Execute(MethodInfo aMethod, ILOpCode aOpCode) {
- //TODO: Implement this Op
- }
-
-
- // using System;
- // using System.IO;
- //
- //
- // using CPU = Indy.IL2CPU.Assembler;
- // using CPUx86 = Indy.IL2CPU.Assembler.X86;
- // using Indy.IL2CPU.Assembler;
- //
- // namespace Indy.IL2CPU.IL.X86 {
- // [OpCode(OpCodeEnum.Ble_Un)]
- // public class Ble_Un: Op {
- // public readonly string TargetLabel;
- // public readonly string CurInstructionLabel;
- // private string mNextLabel;
- // private string mCurLabel;
- // private uint mCurOffset;
- // private MethodInformation mMethodInformation;
- // public Ble_Un(ILReader aReader, MethodInformation aMethodInfo)
- // : base(aReader, aMethodInfo) {
- // TargetLabel = GetInstructionLabel(aReader.OperandValueBranchPosition);
- // CurInstructionLabel = GetInstructionLabel(aReader);
- // mMethodInformation = aMethodInfo;
- // mCurOffset = aReader.Position;
- // mCurLabel = IL.Op.GetInstructionLabel(aReader);
- // mNextLabel = IL.Op.GetInstructionLabel(aReader.NextPosition);
- // }
- // public override void DoAssemble() {
- // StackContent xItem1 = Assembler.StackContents.Pop();
- // StackContent xItem2 = Assembler.StackContents.Pop();
- // int xSize = Math.Max(xItem1.Size, xItem2.Size);
- // var xIsFloat = xItem1.IsFloat || xItem2.IsFloat;
- // if (xIsFloat) {
- // EmitNotImplementedException(Assembler, GetServiceProvider(), "Ble_Un: Float support not yet implemented!", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // if (xSize > 8) {
- // EmitNotImplementedException(Assembler, GetServiceProvider(), "Ble_Un: StackSize>8 not supported yet!", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // string BaseLabel = CurInstructionLabel + "__";
- // string LabelTrue = BaseLabel + "True";
- // string LabelFalse = BaseLabel + "False";
- // if (xSize > 4)
- // {
- // new CPUx86.Pop{DestinationReg = CPUx86.Registers.EAX};
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EDX };
- // //value2: EDX:EAX
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EBX };
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.ECX };
- // //value1: ECX:EBX
- // new CPUx86.Sub { DestinationReg = CPUx86.Registers.EBX, SourceReg = CPUx86.Registers.EAX };
- // new CPUx86.SubWithCarry { DestinationReg = CPUx86.Registers.ECX, SourceReg = CPUx86.Registers.EDX };
- // //result = value1 - value2
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.BelowOrEqual, DestinationLabel = TargetLabel };
- // } else
- // {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX }; ;
- // new CPUx86.Compare { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.ESP, SourceIsIndirect = true };
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.LessThanOrEqualTo, DestinationLabel = LabelFalse };
- // new CPUx86.Jump { DestinationLabel = LabelTrue };
- // new CPU.Label(LabelTrue);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // new CPUx86.Jump { DestinationLabel = TargetLabel };
- // new CPU.Label(LabelFalse);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // }
- // }
- // }
- // }
-
- }
-}
diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Blt_Un.cs b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Blt_Un.cs
deleted file mode 100644
index 34da77fd8..000000000
--- a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Blt_Un.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System;
-
-namespace Cosmos.IL2CPU.X86.IL
-{
- [Cosmos.IL2CPU.OpCode(ILOpCode.Code.Blt_Un)]
- public class Blt_Un: ILOp
- {
- public Blt_Un(Cosmos.IL2CPU.Assembler aAsmblr):base(aAsmblr)
- {
- }
-
- public override void Execute(MethodInfo aMethod, ILOpCode aOpCode) {
- //TODO: Implement this Op
- }
-
-
- // using System;
- // using System.IO;
- //
- //
- // using CPU = Indy.IL2CPU.Assembler;
- // using CPUx86 = Indy.IL2CPU.Assembler.X86;
- //
- // namespace Indy.IL2CPU.IL.X86 {
- // [OpCode(OpCodeEnum.Blt_Un)]
- // public class Blt_Un: Op {
- // public readonly string TargetLabel;
- // public readonly string CurInstructionLabel;
- // private string mNextLabel;
- // private string mCurLabel;
- // private uint mCurOffset;
- // private MethodInformation mMethodInformation;
- // public Blt_Un(ILReader aReader, MethodInformation aMethodInfo)
- // : base(aReader, aMethodInfo) {
- // TargetLabel = GetInstructionLabel(aReader.OperandValueBranchPosition);
- // CurInstructionLabel = GetInstructionLabel(aReader);
- // mMethodInformation = aMethodInfo;
- // mCurOffset = aReader.Position;
- // mCurLabel = IL.Op.GetInstructionLabel(aReader);
- // mNextLabel = IL.Op.GetInstructionLabel(aReader.NextPosition);
- // }
- // public override void DoAssemble() {
- // if (Assembler.StackContents.Peek().IsFloat) {
- // EmitNotImplementedException(Assembler, GetServiceProvider(), "Blt_Un: Floats are not yet supported", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // var rightTop = Assembler.StackContents.Pop();
- // var leftBottom = Assembler.StackContents.Pop();
- // int xSize = Math.Max(rightTop.Size, leftBottom.Size);
- // if (xSize > 8) {
- // EmitNotImplementedException(Assembler, GetServiceProvider(), "Blt_Un: StackSize>8 not supported yet", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // string BaseLabel = CurInstructionLabel + "__";
- // string LabelTrue = BaseLabel + "True";
- // string LabelFalse = BaseLabel + "False";
- // if (xSize <= 4)
- // {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.ECX };
- // //if (xSize > 4)
- // //{
- // // throw new NotImplementedException("long comprasion is not implemented");
- // // new CPUx86.Add("esp", "4");
- // //}
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX };
- // //if (xSize > 4)
- // //{
- // // throw new NotImplementedException("long comprasion is not implemented");
- // // new CPUx86.Add("esp", "4");
- // //}
- // new CPUx86.Push { DestinationReg = CPUx86.Registers.ECX };
- // new CPUx86.Compare { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.ESP, SourceIsIndirect = true };
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.LessThan, DestinationLabel = LabelTrue };
- // new CPUx86.Jump { DestinationLabel = LabelFalse };
- // new CPU.Label(LabelTrue);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // new CPUx86.Jump { DestinationLabel = TargetLabel };
- // new CPU.Label(LabelFalse);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue=4 };
- // return;
- // }
- //
- // if (xSize == 8)
- // {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX };
- // new CPUx86.Pop{DestinationReg = CPUx86.Registers.EDX};
- // //value2: EDX:EAX
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EBX };
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.ECX };
- // //value1: ECX:EBX
- // new CPUx86.Sub { DestinationReg = CPUx86.Registers.EBX, SourceReg = CPUx86.Registers.EAX };
- // new CPUx86.SubWithCarry { DestinationReg = CPUx86.Registers.ECX, SourceReg = CPUx86.Registers.EDX };
- // //result = value1 - value2
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.Below, DestinationLabel = TargetLabel };
- // }
- // EmitNotImplementedException(Assembler, GetServiceProvider(), "Blt_Un: Circumstances not supported", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // }
- // }
- // }
-
- }
-}
diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bne_Un.cs b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bne_Un.cs
deleted file mode 100644
index 858e0f3f9..000000000
--- a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Bne_Un.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-
-namespace Cosmos.IL2CPU.X86.IL
-{
- [Cosmos.IL2CPU.OpCode(ILOpCode.Code.Bne_Un)]
- public class Bne_Un: ILOp
- {
- public Bne_Un(Cosmos.IL2CPU.Assembler aAsmblr):base(aAsmblr)
- {
- }
-
- public override void Execute(MethodInfo aMethod, ILOpCode aOpCode) {
- //TODO: Implement this Op
- }
-
-
- // using System;
- // using System.IO;
- //
- //
- // using CPU = Indy.IL2CPU.Assembler;
- // using CPUx86 = Indy.IL2CPU.Assembler.X86;
- //
- // namespace Indy.IL2CPU.IL.X86 {
- // [OpCode(OpCodeEnum.Bne_Un)]
- // public class Bne_Un: Op {
- // public readonly string TargetLabel;
- // public readonly string CurInstructionLabel;
- // private string mNextLabel;
- // private string mCurLabel;
- // private uint mCurOffset;
- // private MethodInformation mMethodInformation;
- // public Bne_Un(ILReader aReader, MethodInformation aMethodInfo)
- // : base(aReader, aMethodInfo) {
- // TargetLabel = GetInstructionLabel(aReader.OperandValueBranchPosition);
- // CurInstructionLabel = GetInstructionLabel(aReader);
- // mMethodInformation = aMethodInfo;
- // mCurOffset = aReader.Position;
- // mCurLabel = IL.Op.GetInstructionLabel(aReader);
- // mNextLabel = IL.Op.GetInstructionLabel(aReader.NextPosition);
- // }
- // public override void DoAssemble() {
- // if (Assembler.StackContents.Peek().IsFloat) {
- // EmitNotImplementedException(Assembler, GetServiceProvider(), "Bne_Un: Float support not yet implemented!", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // int xSize = Math.Max(Assembler.StackContents.Pop().Size, Assembler.StackContents.Pop().Size);
- // if (xSize > 8) {
- // EmitNotImplementedException(Assembler, GetServiceProvider(), "Bne_Un: StackSize>8 not supported yet", mCurLabel, mMethodInformation, mCurOffset, mNextLabel);
- // return;
- // }
- // string BaseLabel = CurInstructionLabel + "__";
- // string LabelTrue = BaseLabel + "True";
- // string LabelFalse = BaseLabel + "False";
- // if (xSize > 4)
- // {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX };
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EBX };
- // //value2 = EBX:EAX
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.ECX };
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EDX };
- // //value1 = EDX:ECX
- // new CPUx86.Xor { DestinationReg = CPUx86.Registers.EAX, SourceReg = CPUx86.Registers.ECX };
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.NotZero, DestinationLabel = TargetLabel };
- // new CPUx86.Xor { DestinationReg = CPUx86.Registers.EBX, SourceReg = CPUx86.Registers.EDX };
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.NotZero, DestinationLabel = TargetLabel };
- // } else
- // {
- // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX };
- // new CPUx86.Compare { DestinationReg = CPUx86.Registers.EAX, SourceReg=CPUx86.Registers.ESP, SourceIsIndirect=true};
- // new CPUx86.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.Equal, DestinationLabel = LabelTrue };
- // new CPUx86.Jump { DestinationLabel = LabelFalse };
- // new CPU.Label(LabelFalse);
- // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 };
- // new CPUx86.Jump { DestinationLabel = TargetLabel };
- // new CPU.Label(LabelTrue);
- // new CPUx86.Add{DestinationReg = CPUx86.Registers.ESP, SourceValue=4};
- // }
- // }
- // }
- // }
-
- }
-}
diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Branch_Un.cs b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Branch_Un.cs
new file mode 100644
index 000000000..62eb48885
--- /dev/null
+++ b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Branch_Un.cs
@@ -0,0 +1,73 @@
+using System;
+using Indy.IL2CPU.Assembler;
+using CPU = Indy.IL2CPU.Assembler.X86;
+
+namespace Cosmos.IL2CPU.X86.IL
+{
+ [Cosmos.IL2CPU.OpCode( ILOpCode.Code.Bne_Un )]
+ [Cosmos.IL2CPU.OpCode( ILOpCode.Code.Bge_Un )]
+ [Cosmos.IL2CPU.OpCode( ILOpCode.Code.Bgt_Un )]
+ [Cosmos.IL2CPU.OpCode( ILOpCode.Code.Ble_Un )]
+ [Cosmos.IL2CPU.OpCode( ILOpCode.Code.Blt_Un )]
+ public class Branch_Un : ILOp
+ {
+
+ public Branch_Un( Cosmos.IL2CPU.Assembler aAsmblr )
+ : base( aAsmblr )
+ {
+ }
+
+ public override void Execute( MethodInfo aMethod, ILOpCode aOpCode )
+ {
+ var xStackContent = Assembler.StackContents.Pop();
+ Assembler.StackContents.Pop();
+ if( xStackContent.Size > 8 )
+ {
+ throw new Exception( "StackSize > 8 not supported" );
+ }
+
+ CPU.ConditionalTestEnum xTestOp;
+ switch( aOpCode.OpCode )
+ {
+ case ILOpCode.Code.Bne_Un:
+ xTestOp = CPU.ConditionalTestEnum.NotEqual;
+ break;
+ case ILOpCode.Code.Bge_Un:
+ xTestOp = CPU.ConditionalTestEnum.AboveOrEqual;
+ break;
+ case ILOpCode.Code.Bgt_Un:
+ xTestOp = CPU.ConditionalTestEnum.Above;
+ break;
+ case ILOpCode.Code.Ble_Un:
+ xTestOp = CPU.ConditionalTestEnum.BelowOrEqual;
+ break;
+ case ILOpCode.Code.Blt_Un:
+ xTestOp = CPU.ConditionalTestEnum.Below;
+ break;
+ default:
+ throw new Exception( "Unknown OpCode for conditional branch." );
+ break;
+ }
+
+ if( xStackContent.Size <= 4 )
+ {
+ new CPU.Pop { DestinationReg = CPU.Registers.EAX };
+ new CPU.Pop { DestinationReg = CPU.Registers.EBX };
+ new CPU.Compare { DestinationReg = CPU.Registers.EAX, SourceReg = CPU.Registers.EBX };
+ new CPU.ConditionalJump { Condition = xTestOp, DestinationLabel = AssemblerNasm.TmpBranchLabel( aMethod, aOpCode ) };
+ }
+ else
+ {
+ new CPU.Pop { DestinationReg = CPU.Registers.EAX };
+ new CPU.Pop { DestinationReg = CPU.Registers.EBX };
+ new CPU.Pop { DestinationReg = CPU.Registers.ECX };
+ new CPU.Pop { DestinationReg = CPU.Registers.EDX };
+ new CPU.Xor { DestinationReg = CPU.Registers.EAX, SourceReg = CPU.Registers.ECX };
+ new CPU.ConditionalJump { Condition = xTestOp, DestinationLabel = AssemblerNasm.TmpBranchLabel( aMethod, aOpCode ) };
+ new CPU.Xor { DestinationReg = CPU.Registers.EBX, SourceReg = CPU.Registers.EDX };
+ new CPU.ConditionalJump { Condition = xTestOp, DestinationLabel = AssemblerNasm.TmpBranchLabel( aMethod, aOpCode ) };
+ }
+ }
+
+ }
+}