5#ifndef V8_CODEGEN_X64_REGISTER_X64_H_
6#define V8_CODEGEN_X64_REGISTER_X64_H_
13#define GENERAL_REGISTERS(V) \
31#define ALWAYS_ALLOCATABLE_GENERAL_REGISTERS(V) \
44#ifdef V8_COMPRESS_POINTERS
45#define MAYBE_ALLOCATABLE_GENERAL_REGISTERS(V)
47#define MAYBE_ALLOCATABLE_GENERAL_REGISTERS(V) V(r14)
50#define ALLOCATABLE_GENERAL_REGISTERS(V) \
51 ALWAYS_ALLOCATABLE_GENERAL_REGISTERS(V) \
52 MAYBE_ALLOCATABLE_GENERAL_REGISTERS(V)
55#define REGISTER_CODE(R) kRegCode_##R,
88static_assert(
sizeof(
Register) <=
sizeof(int),
89 "Register can efficiently be passed by value");
92template <
typename RegT>
95 source = RegT::no_reg();
99#define DECLARE_REGISTER(R) \
100 constexpr Register R = Register::from_code(kRegCode_##R);
102#undef DECLARE_REGISTER
107#ifdef V8_TARGET_OS_WIN
109constexpr Register
kCArgRegs[] = {rcx, rdx, r8, r9};
116constexpr int kWindowsHomeStackSlots = 4;
124#define DOUBLE_REGISTERS(V) \
142#define FLOAT_REGISTERS DOUBLE_REGISTERS
143#define SIMD128_REGISTERS DOUBLE_REGISTERS
145#define ALLOCATABLE_DOUBLE_REGISTERS(V) \
162#define YMM_REGISTERS(V) \
190#define REGISTER_CODE(R) kDoubleCode_##R,
197#define REGISTER_CODE(R) kYMMCode_##R,
204 "The number of XMM register codes must match the number of YMM "
223 "XMMRegister can efficiently be passed by value");
243 "YMMRegister can efficiently be passed by value");
253#define DECLARE_REGISTER(R) \
254 constexpr DoubleRegister R = DoubleRegister::from_code(kDoubleCode_##R);
256#undef DECLARE_REGISTER
259#define DECLARE_REGISTER(R) \
260 constexpr YMMRegister R = YMMRegister::from_code(kYMMCode_##R);
262#undef DECLARE_REGISTER
302#ifdef V8_COMPRESS_POINTERS
static constexpr int8_t kNumRegisters
static constexpr DwVfpRegister no_reg()
constexpr int8_t code() const
constexpr int low_bits() const
constexpr int high_bit() const
constexpr Register(int code)
constexpr bool is_byte_register() const
static constexpr Register no_reg()
TaggedRegister(Register reg)
constexpr XMMRegister(int code)
constexpr YMMRegister(int code)
static constexpr YMMRegister from_code(int code)
static constexpr YMMRegister from_xmm(XMMRegister xmm)
ZoneVector< RpoNumber > & result
InstructionOperand source
constexpr Register no_reg
constexpr Register kRootRegister
constexpr AliasingKind kFPAliasing
constexpr Register kRuntimeCallFunctionRegister
constexpr DoubleRegister kScratchDoubleReg
constexpr Register kRuntimeCallArgvRegister
constexpr Register kJavaScriptCallTargetRegister
constexpr DwVfpRegister no_dreg
constexpr Register kJavaScriptCallArgCountRegister
constexpr Register kInterpreterAccumulatorRegister
static const int kRegisterPassedArguments
constexpr DoubleRegister kFPReturnRegister0
constexpr Register kReturnRegister1
constexpr Register kReturnRegister0
constexpr Register kScratchRegister
constexpr Register kWasmImplicitArgRegister
constexpr Register kContextRegister
constexpr Register kRuntimeCallArgCountRegister
constexpr Register kInterpreterDispatchTableRegister
constexpr Register kAllocateSizeRegister
constexpr Register kWasmTrapHandlerFaultAddressRegister
constexpr Register kJavaScriptCallExtraArg1Register
constexpr Register kJavaScriptCallCodeStartRegister
constexpr Register kPtrComprCageBaseRegister
constexpr Register kReturnRegister2
Register ReassignRegister(Register &source)
constexpr Register kStackPointerRegister
constexpr int ArgumentPaddingSlots(int argument_count)
constexpr Register kCArgRegs[]
constexpr bool kSimdMaskRegisters
constexpr Register kJavaScriptCallDispatchHandleRegister
constexpr Register kInterpreterBytecodeOffsetRegister
constexpr Register kJavaScriptCallNewTargetRegister
constexpr Register kJSFunctionRegister
constexpr Register kInterpreterBytecodeArrayRegister
constexpr YMMRegister kScratchSimd256Reg
#define GENERAL_REGISTERS(V)
#define DECLARE_REGISTER(R)
#define DOUBLE_REGISTERS(V)
#define DEFINE_REGISTER_NAMES(RegType, LIST)
#define ASSERT_TRIVIALLY_COPYABLE(T)