예제 #1
0
 public AOpCodeMemReg(AInst Inst, long Position, int OpCode) : base(Inst, Position, OpCode)
 {
     Shift    = ((OpCode >> 12) & 0x1) != 0;
     IntType  = (AIntType)((OpCode >> 13) & 0x7);
     Rm       = (OpCode >> 16) & 0x1f;
     Extend64 = ((OpCode >> 22) & 0x3) == 2;
 }
예제 #2
0
        public void EmitCast(AIntType IntType)
        {
            switch (IntType)
            {
            case AIntType.UInt8:  Emit(OpCodes.Conv_U1); break;

            case AIntType.UInt16: Emit(OpCodes.Conv_U2); break;

            case AIntType.UInt32: Emit(OpCodes.Conv_U4); break;

            case AIntType.UInt64: Emit(OpCodes.Conv_U8); break;

            case AIntType.Int8:   Emit(OpCodes.Conv_I1); break;

            case AIntType.Int16:  Emit(OpCodes.Conv_I2); break;

            case AIntType.Int32:  Emit(OpCodes.Conv_I4); break;

            case AIntType.Int64:  Emit(OpCodes.Conv_I8); break;
            }

            if (IntType == AIntType.UInt64 ||
                IntType == AIntType.Int64)
            {
                return;
            }

            if (CurrOp.RegisterSize != ARegisterSize.Int32)
            {
                Emit(IntType >= AIntType.Int8
                    ? OpCodes.Conv_I8
                    : OpCodes.Conv_U8);
            }
        }
예제 #3
0
 public AOpCodeAluRx(AInst Inst, long Position, int OpCode) : base(Inst, Position, OpCode)
 {
     Shift   = (OpCode >> 10) & 0x7;
     IntType = (AIntType)((OpCode >> 13) & 0x7);
     Rm      = (OpCode >> 16) & 0x1f;
 }