Cosmos/source2/Compiler/Cosmos.Compiler.Assembler.X86/x87/FloatConditionalMove.cs

52 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Cosmos.Compiler.Assembler.X86.x87
{
[OpCode("FCMOVcc")]
class FloatConditionalMove : InstructionWithDestinationAndSource
{
public FloatConditionalMoveTestEnum Condition
{
get;
set;
}
public override void WriteText(Assembler aAssembler, System.IO.TextWriter aOutput)
{
switch (Condition)
{
case FloatConditionalMoveTestEnum.Below:
aOutput.Write("fcmovb");
break;
case FloatConditionalMoveTestEnum.Equal:
aOutput.Write("fcmove");
break;
case FloatConditionalMoveTestEnum.BelowOrEqual:
aOutput.Write("fcmovbe");
break;
case FloatConditionalMoveTestEnum.Unordered:
aOutput.Write("fcmovu");
break;
case FloatConditionalMoveTestEnum.NotBelow:
aOutput.Write("fcmovnb");
break;
case FloatConditionalMoveTestEnum.NotEqual:
aOutput.Write("fcmovne");
break;
case FloatConditionalMoveTestEnum.NotBelowOrEqual:
aOutput.Write("fcmovnbe");
break;
case FloatConditionalMoveTestEnum.Ordered:
aOutput.Write("fcmovnu");
break;
}
aOutput.Write(" ");
aOutput.Write("ST0");
aOutput.Write(", ");
aOutput.Write(this.GetSourceAsString());
}
}
}