Update InstEmitSimdCmp.cs
This commit is contained in:
parent
0cbb2f81ac
commit
6a3508c580
1 changed files with 29 additions and 8 deletions
|
@ -145,14 +145,30 @@ namespace ChocolArm64.Instructions
|
||||||
|
|
||||||
context.MarkLabel(lblTrue);
|
context.MarkLabel(lblTrue);
|
||||||
|
|
||||||
Fcmp_S(context);
|
EmitFcmpE(context, signalNaNs: false);
|
||||||
|
|
||||||
context.MarkLabel(lblEnd);
|
context.MarkLabel(lblEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fccmpe_S(ILEmitterCtx context)
|
public static void Fccmpe_S(ILEmitterCtx context)
|
||||||
{
|
{
|
||||||
Fccmp_S(context);
|
OpCodeSimdFcond64 op = (OpCodeSimdFcond64)context.CurrOp;
|
||||||
|
|
||||||
|
ILLabel lblTrue = new ILLabel();
|
||||||
|
ILLabel lblEnd = new ILLabel();
|
||||||
|
|
||||||
|
context.EmitCondBranch(lblTrue, op.Cond);
|
||||||
|
|
||||||
|
context.EmitLdc_I4(op.Nzcv);
|
||||||
|
EmitSetNzcv(context);
|
||||||
|
|
||||||
|
context.Emit(OpCodes.Br, lblEnd);
|
||||||
|
|
||||||
|
context.MarkLabel(lblTrue);
|
||||||
|
|
||||||
|
EmitFcmpE(context, signalNaNs: true);
|
||||||
|
|
||||||
|
context.MarkLabel(lblEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fcmeq_S(ILEmitterCtx context)
|
public static void Fcmeq_S(ILEmitterCtx context)
|
||||||
|
@ -254,6 +270,16 @@ namespace ChocolArm64.Instructions
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fcmp_S(ILEmitterCtx context)
|
public static void Fcmp_S(ILEmitterCtx context)
|
||||||
|
{
|
||||||
|
EmitFcmpE(context, signalNaNs: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Fcmpe_S(ILEmitterCtx context)
|
||||||
|
{
|
||||||
|
EmitFcmpE(context, signalNaNs: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void EmitFcmpE(ILEmitterCtx context, bool signalNaNs)
|
||||||
{
|
{
|
||||||
OpCodeSimdReg64 op = (OpCodeSimdReg64)context.CurrOp;
|
OpCodeSimdReg64 op = (OpCodeSimdReg64)context.CurrOp;
|
||||||
|
|
||||||
|
@ -414,7 +440,7 @@ namespace ChocolArm64.Instructions
|
||||||
EmitVectorExtractF(context, op.Rm, 0, op.Size);
|
EmitVectorExtractF(context, op.Rm, 0, op.Size);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.EmitLdc_I4(0);
|
context.EmitLdc_I4(!signalNaNs ? 0 : 1);
|
||||||
|
|
||||||
EmitSoftFloatCall(context, nameof(SoftFloat32.FPCompare));
|
EmitSoftFloatCall(context, nameof(SoftFloat32.FPCompare));
|
||||||
|
|
||||||
|
@ -422,11 +448,6 @@ namespace ChocolArm64.Instructions
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Fcmpe_S(ILEmitterCtx context)
|
|
||||||
{
|
|
||||||
Fcmp_S(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void EmitCmp(ILEmitterCtx context, OpCode ilOp, bool scalar)
|
private static void EmitCmp(ILEmitterCtx context, OpCode ilOp, bool scalar)
|
||||||
{
|
{
|
||||||
OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp;
|
OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue