public static void Fcvtmu_Gp(ILEmitterCtx context) { EmitFcvt_u_Gp(context, () => EmitUnaryMathCall(context, nameof(Math.Floor))); }
public static void Ldar(ILEmitterCtx context) => EmitLdr(context, AccessType.Ordered);
public static void Ldaxp(ILEmitterCtx context) => EmitLdp(context, AccessType.OrderedEx);
public static void EmitVirtualJump(ILEmitterCtx context) { EmitVirtualCallOrJump(context, isJump: true); }
public static void Clrex(ILEmitterCtx context) { EmitMemoryCall(context, nameof(MemoryManager.ClearExclusive)); }
public static void EmitCall(ILEmitterCtx context, string name64, string name128) { bool isSimd64 = context.CurrOp.RegisterSize == RegisterSize.Simd64; context.EmitCall(typeof(VectorHelper), isSimd64 ? name64 : name128); }
public static void Bl(ILEmitterCtx context) { Blx(context, x: false); }
public static void Fcvtzu_Gp_Fixed(ILEmitterCtx context) { EmitFcvtzu_Gp_Fixed(context); }
public static void Fcvtzu_S(ILEmitterCtx context) { EmitScalarFcvtzu(context); }
public static void Fcvtpu_Gp(ILEmitterCtx context) { EmitFcvt_u_Gp(context, () => EmitUnaryMathCall(context, nameof(Math.Ceiling))); }
public static void Fcvtzu_Gp(ILEmitterCtx context) { EmitFcvt_u_Gp(context, () => { }); }
public static void Fcvtnu_V(ILEmitterCtx context) { EmitFcvtn(context, signed: false, scalar: false); }
public static void Fcvtns_S(ILEmitterCtx context) { EmitFcvtn(context, signed: true, scalar: true); }
public static void Fcvtn_V(ILEmitterCtx context) { OpCodeSimd64 op = (OpCodeSimd64)context.CurrOp; int sizeF = op.Size & 1; if (Optimizations.UseSse2 && sizeF == 1) { Type[] typesCvt = new Type[] { typeof(Vector128 <double>) }; string nameMov = op.RegisterSize == RegisterSize.Simd128 ? nameof(Sse.MoveLowToHigh) : nameof(Sse.MoveHighToLow); context.EmitLdvec(op.Rd); VectorHelper.EmitCall(context, nameof(VectorHelper.VectorSingleZero)); context.EmitCall(typeof(Sse).GetMethod(nameof(Sse.MoveLowToHigh))); context.EmitLdvec(op.Rn); context.EmitCall(typeof(Sse2).GetMethod(nameof(Sse2.ConvertToVector128Single), typesCvt)); context.Emit(OpCodes.Dup); context.EmitCall(typeof(Sse).GetMethod(nameof(Sse.MoveLowToHigh))); context.EmitCall(typeof(Sse).GetMethod(nameMov)); context.EmitStvec(op.Rd); } else { int elems = 4 >> sizeF; int part = op.RegisterSize == RegisterSize.Simd128 ? elems : 0; if (part != 0) { context.EmitLdvec(op.Rd); context.EmitStvectmp(); } for (int index = 0; index < elems; index++) { EmitVectorExtractF(context, op.Rn, index, sizeF); if (sizeF == 0) { context.EmitLdarg(TranslatedSub.StateArgIdx); context.EmitCall(typeof(SoftFloat32_16), nameof(SoftFloat32_16.FPConvert)); context.Emit(OpCodes.Conv_U8); EmitVectorInsertTmp(context, part + index, 1); } else /* if (sizeF == 1) */ { context.Emit(OpCodes.Conv_R4); EmitVectorInsertTmpF(context, part + index, 0); } } context.EmitLdvectmp(); context.EmitStvec(op.Rd); if (part == 0) { EmitVectorZeroUpper(context, op.Rd); } } }
private static void EmitVectorFcvtzu(ILEmitterCtx context) { EmitVectorFcvtz(context, false); }
public static void Fcvtzu_V(ILEmitterCtx context) { EmitVectorFcvtzu(context); }
public static void Fcvtau_Gp(ILEmitterCtx context) { EmitFcvt_u_Gp(context, () => EmitRoundMathCall(context, MidpointRounding.AwayFromZero)); }
public static void Ucvtf_V(ILEmitterCtx context) { EmitVectorCvtf(context, signed: false); }
public static void EmitCall(ILEmitterCtx context, string mthdName) { context.EmitCall(typeof(VectorHelper), mthdName); }
private static void EmitFcvt_s_Gp(ILEmitterCtx context, Action emit) { EmitFcvt___Gp(context, emit, true); }
public static void Blx(ILEmitterCtx context) { Blx(context, x: true); }
private static void EmitFcvt_u_Gp(ILEmitterCtx context, Action emit) { EmitFcvt___Gp(context, emit, false); }
private static void EmitStp(ILEmitterCtx context, AccessType accType) { EmitStore(context, accType, true); }
private static void EmitFcvtzs_Gp_Fixed(ILEmitterCtx context) { EmitFcvtz__Gp_Fixed(context, true); }
public static void Dsb(ILEmitterCtx context) => EmitBarrier(context);
private static void EmitFcvtzu_Gp_Fixed(ILEmitterCtx context) { EmitFcvtz__Gp_Fixed(context, false); }
public static void Ldxp(ILEmitterCtx context) => EmitLdp(context, AccessType.Exclusive);
private static void EmitVectorFcvtzs(ILEmitterCtx context) { EmitVectorFcvtz(context, true); }
private static void EmitLdp(ILEmitterCtx context, AccessType accType) { EmitLoad(context, accType, true); }
public static void EmitScalarSaturatingUnaryOpSx(ILEmitterCtx context, Action emit) { EmitSaturatingUnaryOpSx(context, emit, SaturatingFlags.ScalarSx); }