public PreferredRegister(Register64 intRegister, XmmRegister floatRegister) { IntRegister = intRegister; FloatRegister = floatRegister; }
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"); } }
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>()); }
internal XmmRegister(XmmRegister other) : base(other) { }
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 );
static ExpressionResult MakeRegister(Type type, Register64 registerInt, XmmRegister registerFloat) => new ExpressionResult( type, type.MakeRegisterWithCorrectSize(registerInt, registerFloat) );