// Generic Functions public static Operand EmitSoftFloatCallDefaultFpscr(ArmEmitterContext context, string name, params Operand[] callArgs) { IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; MethodInfo info = (op.Size & 1) == 0 ? typeof(SoftFloat32).GetMethod(name) : typeof(SoftFloat64).GetMethod(name); Array.Resize(ref callArgs, callArgs.Length + 1); callArgs[callArgs.Length - 1] = Const(1); return(context.Call(info, callArgs)); }
public static Operand EmitSoftFloatCallDefaultFpscr( ArmEmitterContext context, _F32_F32_F32_F32_Bool f32, _F64_F64_F64_F64_Bool f64, params Operand[] callArgs) { IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; Delegate dlg = (op.Size & 1) == 0 ? (Delegate)f32 : (Delegate)f64; Array.Resize(ref callArgs, callArgs.Length + 1); callArgs[callArgs.Length - 1] = Const(1); return(context.Call(dlg, callArgs)); }
public static void Vrint_Z(ArmEmitterContext context) { IOpCodeSimd op = (IOpCodeSimd)context.CurrOp; if (Optimizations.UseSse2) { EmitScalarUnaryOpSimd32(context, (m) => { Intrinsic inst = (op.Size & 1) == 0 ? Intrinsic.X86Roundss : Intrinsic.X86Roundsd; return(context.AddIntrinsic(inst, m, Const(X86GetRoundControl(FPRoundingMode.TowardsZero)))); }); } else { EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, MathF.Truncate, Math.Truncate, op1)); } }