Exemplo n.º 1
0
 public PreferredRegister(Register64 intRegister, XmmRegister floatRegister)
 {
     IntRegister   = intRegister;
     FloatRegister = floatRegister;
 }
Exemplo n.º 2
0
        public static Register MakeRegisterWithCorrectSize(this Type type, Register64 intRegister, XmmRegister floatRegister)
        {
            if (!type.IsIntegerRegisterType())
            {
                return(floatRegister);
            }

            switch (type.SizeOf())
            {
            case 8:
                return(intRegister);

            case 4:
                return((Register32)intRegister);

            case 2:
                return((Register16)intRegister);

            case 1:
                return((Register8)intRegister);

            default:
                throw new NotImplementedException($"Proper register for type {type} (size {type.SizeOf()}) has not been implemented yet");
            }
        }
Exemplo n.º 3
0
 public static MaybeOption <XmmRegister> GetOperand(CodeContext context, Instruction instruction, SharpDisasm.Operand operand, XmmRegister overload)
 {
     if (operand.Type == ud_type.UD_OP_REG)
     {
         var reg = SdToAsm.SdToAsmJit(context, operand.Base);
         if (reg.Present && reg.Type == RegisterType.XmmRegister)
         {
             return(new MaybeOption <XmmRegister>()
             {
                 Present = true,
                 Value = (XmmRegister)reg.Register
             });
         }
     }
     return(new MaybeOption <XmmRegister>());
 }
Exemplo n.º 4
0
 internal XmmRegister(XmmRegister other)
     : base(other)
 {
 }
Exemplo n.º 5
0
 public PreferredRegister MakePreferredRegister(Register64 fallbackInt = Register64.RAX, XmmRegister fallbackFloat = XmmRegister.XMM0) =>
 new PreferredRegister(
     _registerStorageInt.Count > 0 ? _registerStorageInt.Peek().Register.AsR64() : fallbackInt,
     _registerStorageFloat.Count > 0 ? _registerStorageFloat.Peek().Register.AsFloat() : fallbackFloat
     );
Exemplo n.º 6
0
 static ExpressionResult MakeRegister(Type type, Register64 registerInt, XmmRegister registerFloat) =>
 new ExpressionResult(
     type,
     type.MakeRegisterWithCorrectSize(registerInt, registerFloat)
     );