Exemplo n.º 1
0
 public static void Fcvtmu_Gp(ILEmitterCtx context)
 {
     EmitFcvt_u_Gp(context, () => EmitUnaryMathCall(context, nameof(Math.Floor)));
 }
Exemplo n.º 2
0
 public static void Ldar(ILEmitterCtx context) => EmitLdr(context, AccessType.Ordered);
Exemplo n.º 3
0
 public static void Ldaxp(ILEmitterCtx context) => EmitLdp(context, AccessType.OrderedEx);
Exemplo n.º 4
0
 public static void EmitVirtualJump(ILEmitterCtx context)
 {
     EmitVirtualCallOrJump(context, isJump: true);
 }
Exemplo n.º 5
0
 public static void Clrex(ILEmitterCtx context)
 {
     EmitMemoryCall(context, nameof(MemoryManager.ClearExclusive));
 }
Exemplo n.º 6
0
        public static void EmitCall(ILEmitterCtx context, string name64, string name128)
        {
            bool isSimd64 = context.CurrOp.RegisterSize == RegisterSize.Simd64;

            context.EmitCall(typeof(VectorHelper), isSimd64 ? name64 : name128);
        }
Exemplo n.º 7
0
 public static void Bl(ILEmitterCtx context)
 {
     Blx(context, x: false);
 }
Exemplo n.º 8
0
 public static void Fcvtzu_Gp_Fixed(ILEmitterCtx context)
 {
     EmitFcvtzu_Gp_Fixed(context);
 }
Exemplo n.º 9
0
 public static void Fcvtzu_S(ILEmitterCtx context)
 {
     EmitScalarFcvtzu(context);
 }
Exemplo n.º 10
0
 public static void Fcvtpu_Gp(ILEmitterCtx context)
 {
     EmitFcvt_u_Gp(context, () => EmitUnaryMathCall(context, nameof(Math.Ceiling)));
 }
Exemplo n.º 11
0
 public static void Fcvtzu_Gp(ILEmitterCtx context)
 {
     EmitFcvt_u_Gp(context, () => { });
 }
Exemplo n.º 12
0
 public static void Fcvtnu_V(ILEmitterCtx context)
 {
     EmitFcvtn(context, signed: false, scalar: false);
 }
Exemplo n.º 13
0
 public static void Fcvtns_S(ILEmitterCtx context)
 {
     EmitFcvtn(context, signed: true, scalar: true);
 }
Exemplo n.º 14
0
        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);
                }
            }
        }
Exemplo n.º 15
0
 private static void EmitVectorFcvtzu(ILEmitterCtx context)
 {
     EmitVectorFcvtz(context, false);
 }
Exemplo n.º 16
0
 public static void Fcvtzu_V(ILEmitterCtx context)
 {
     EmitVectorFcvtzu(context);
 }
Exemplo n.º 17
0
 public static void Fcvtau_Gp(ILEmitterCtx context)
 {
     EmitFcvt_u_Gp(context, () => EmitRoundMathCall(context, MidpointRounding.AwayFromZero));
 }
Exemplo n.º 18
0
 public static void Ucvtf_V(ILEmitterCtx context)
 {
     EmitVectorCvtf(context, signed: false);
 }
Exemplo n.º 19
0
 public static void EmitCall(ILEmitterCtx context, string mthdName)
 {
     context.EmitCall(typeof(VectorHelper), mthdName);
 }
Exemplo n.º 20
0
 private static void EmitFcvt_s_Gp(ILEmitterCtx context, Action emit)
 {
     EmitFcvt___Gp(context, emit, true);
 }
Exemplo n.º 21
0
 public static void Blx(ILEmitterCtx context)
 {
     Blx(context, x: true);
 }
Exemplo n.º 22
0
 private static void EmitFcvt_u_Gp(ILEmitterCtx context, Action emit)
 {
     EmitFcvt___Gp(context, emit, false);
 }
Exemplo n.º 23
0
 private static void EmitStp(ILEmitterCtx context, AccessType accType)
 {
     EmitStore(context, accType, true);
 }
Exemplo n.º 24
0
 private static void EmitFcvtzs_Gp_Fixed(ILEmitterCtx context)
 {
     EmitFcvtz__Gp_Fixed(context, true);
 }
Exemplo n.º 25
0
 public static void Dsb(ILEmitterCtx context) => EmitBarrier(context);
Exemplo n.º 26
0
 private static void EmitFcvtzu_Gp_Fixed(ILEmitterCtx context)
 {
     EmitFcvtz__Gp_Fixed(context, false);
 }
Exemplo n.º 27
0
 public static void Ldxp(ILEmitterCtx context) => EmitLdp(context, AccessType.Exclusive);
Exemplo n.º 28
0
 private static void EmitVectorFcvtzs(ILEmitterCtx context)
 {
     EmitVectorFcvtz(context, true);
 }
Exemplo n.º 29
0
 private static void EmitLdp(ILEmitterCtx context, AccessType accType)
 {
     EmitLoad(context, accType, true);
 }
Exemplo n.º 30
0
 public static void EmitScalarSaturatingUnaryOpSx(ILEmitterCtx context, Action emit)
 {
     EmitSaturatingUnaryOpSx(context, emit, SaturatingFlags.ScalarSx);
 }