mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-22 05:48:37 +00:00
Clt.Un fix.
This commit is contained in:
parent
dff695e8a5
commit
caa6fac01a
1 changed files with 3 additions and 78 deletions
|
|
@ -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 };
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue