From caa6fac01a2f4708f07ea7fcbea268601def2303 Mon Sep 17 00:00:00 2001 From: kudzu_cp <6d05c8c8ef5431987001abfdb2eadc9593ac9498> Date: Mon, 16 Aug 2010 13:44:12 +0000 Subject: [PATCH] Clt.Un fix. --- source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Clt_Un.cs | 81 +------------------ 1 file changed, 3 insertions(+), 78 deletions(-) diff --git a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Clt_Un.cs b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Clt_Un.cs index a4facca41..ff2ad1106 100644 --- a/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Clt_Un.cs +++ b/source2/IL2PCU/Cosmos.IL2CPU.X86/IL/Clt_Un.cs @@ -60,7 +60,8 @@ namespace Cosmos.IL2CPU.X86.IL new CPUx86.SSE.MoveSS { DestinationReg = CPUx86.Registers.XMM0, SourceReg = CPUx86.Registers.ESP, SourceIsIndirect = true }; new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 }; new CPUx86.SSE.MoveSS { DestinationReg = CPUx86.Registers.XMM1, SourceReg = CPUx86.Registers.ESP, SourceIsIndirect = true }; - new CPUx86.SSE.CompareSS { DestinationReg = CPUx86.Registers.XMM1, SourceReg = CPUx86.Registers.XMM0, pseudoOpcode = (byte)CPUx86.SSE.ComparePseudoOpcodes.LessThan }; + throw new Exception("TODO"); + //new CPUx86.SSE.CompareSS { DestinationReg = CPUx86.Registers.XMM1, SourceReg = CPUx86.Registers.XMM0, pseudoOpcode = (byte)CPUx86.SSE.ComparePseudoOpcodes.NotAboveOrEqual / Carry / Below }; new CPUx86.MoveD { DestinationReg = CPUx86.Registers.EBX, SourceReg = CPUx86.Registers.XMM1 }; new CPUx86.And { DestinationReg = CPUx86.Registers.EBX, SourceValue = 1 }; new CPUx86.Move { SourceReg = CPUx86.Registers.EBX, DestinationReg = CPUx86.Registers.ESP, DestinationIsIndirect = true }; @@ -71,7 +72,7 @@ namespace Cosmos.IL2CPU.X86.IL new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX }; 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.ConditionalJump { Condition = CPUx86.ConditionalTestEnum.Below, DestinationLabel = LabelTrue }; new CPUx86.Jump { DestinationLabel = LabelFalse }; new Label( LabelTrue ); new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 }; @@ -84,81 +85,5 @@ namespace Cosmos.IL2CPU.X86.IL } } - - // using System; - // using System.IO; - // - // - // using CPUx86 = Cosmos.Compiler.Assembler.X86; - // using CPU = Cosmos.Compiler.Assembler.X86; - // using Cosmos.IL2CPU.X86; - // using Cosmos.IL2CPU.X86; - // - // namespace Cosmos.IL2CPU.IL.X86 { - // [OpCode(OpCodeEnum.Clt_Un)] - // public class Clt_Un: Op { - // private readonly string NextInstructionLabel; - // private readonly string CurInstructionLabel; - // private uint mCurrentOffset; - // private MethodInformation mMethodInfo; - // public Clt_Un(ILReader aReader, MethodInformation aMethodInfo) - // : base(aReader, aMethodInfo) { - // NextInstructionLabel = GetInstructionLabel(aReader.NextPosition); - // CurInstructionLabel = GetInstructionLabel(aReader); - // mMethodInfo = aMethodInfo; - // mCurrentOffset = aReader.Position; - // } - // public override void DoAssemble() { - // var xStackItem= Assembler.Stack.Pop(); - // if (xStackItem.IsFloat) { - // EmitNotImplementedException(Assembler, GetServiceProvider(), "Clt_Un: Floats not yet supported", CurInstructionLabel, mMethodInfo, mCurrentOffset, NextInstructionLabel); - // return; - // } - // if (xStackItem.Size > 8) { - // EmitNotImplementedException(Assembler, GetServiceProvider(), "Clt_Un: StackSizes>8 not supported", CurInstructionLabel, mMethodInfo, mCurrentOffset, NextInstructionLabel); - // return; - // } - // Assembler.Stack.Push(new StackContent(4, typeof(bool))); - // string BaseLabel = CurInstructionLabel + "__"; - // string LabelTrue = BaseLabel + "True"; - // string LabelFalse = BaseLabel + "False"; - // if (xStackItem.Size > 4) - // { - // new CPUx86.Xor { DestinationReg = CPUx86.Registers.ESI, SourceReg = CPUx86.Registers.ESI }; - // new CPUx86.Add { DestinationReg = Registers.ESI, SourceValue = 1 }; - // new CPUx86.Xor { DestinationReg = CPUx86.Registers.EDI, SourceReg = CPUx86.Registers.EDI }; - // //esi = 1 - // 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.ConditionalMove{ Condition=ConditionalTestEnum.Below, DestinationReg = CPUx86.Registers.EDI, SourceReg = CPUx86.Registers.ESI }; - // new CPUx86.Push { DestinationReg = Registers.EDI }; - // } else - // { - // new CPUx86.Pop { DestinationReg = CPUx86.Registers.ECX }; - // new CPUx86.Pop { DestinationReg = CPUx86.Registers.EAX }; - // 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 Label(LabelTrue); - // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 }; - // new CPUx86.Push { DestinationValue = 1 }; - // new CPUx86.Jump { DestinationLabel = NextInstructionLabel }; - // new Label(LabelFalse); - // new CPUx86.Add { DestinationReg = CPUx86.Registers.ESP, SourceValue = 4 }; - // new CPUx86.Push { DestinationValue = 0 }; - // new CPUx86.Jump { DestinationLabel = NextInstructionLabel }; - // } - // } - // } - // } - } }