5#ifndef V8_CODEGEN_RISCV_REGISTER_RISCV_H_
6#define V8_CODEGEN_RISCV_REGISTER_RISCV_H_
16#define GENERAL_REGISTERS(V) \
17 V(zero_reg) V(ra) V(sp) V(gp) V(tp) V(t0) V(t1) V(t2) \
18 V(fp) V(s1) V(a0) V(a1) V(a2) V(a3) V(a4) V(a5) \
19 V(a6) V(a7) V(s2) V(s3) V(s4) V(s5) V(s6) V(s7) V(s8) V(s9) \
20 V(s10) V(s11) V(t3) V(t4) V(t5) V(t6)
30#define ALWAYS_ALLOCATABLE_GENERAL_REGISTERS(V) \
31 V(a0) V(a1) V(a2) V(a3) \
32 V(a4) V(a5) V(a6) V(a7) V(t0) \
33 V(t1) V(t2) V(t4) V(s7) V(s8) V(s9) V(s10)
35#ifdef V8_COMPRESS_POINTERS
36#define MAYBE_ALLOCATABLE_GENERAL_REGISTERS(V)
38#define MAYBE_ALLOCATABLE_GENERAL_REGISTERS(V) V(s11)
41#define ALLOCATABLE_GENERAL_REGISTERS(V) \
42 ALWAYS_ALLOCATABLE_GENERAL_REGISTERS(V) \
43 MAYBE_ALLOCATABLE_GENERAL_REGISTERS(V)
45#define DOUBLE_REGISTERS(V) \
46 V(ft0) V(ft1) V(ft2) V(ft3) V(ft4) V(ft5) V(ft6) V(ft7) \
47 V(fs0) V(fs1) V(fa0) V(fa1) V(fa2) V(fa3) V(fa4) V(fa5) \
48 V(fa6) V(fa7) V(fs2) V(fs3) V(fs4) V(fs5) V(fs6) V(fs7) \
49 V(fs8) V(fs9) V(fs10) V(fs11) V(ft8) V(ft9) V(ft10) V(ft11)
51#define FLOAT_REGISTERS DOUBLE_REGISTERS
52#define VECTOR_REGISTERS(V) \
53 V(v0) V(v1) V(v2) V(v3) V(v4) V(v5) V(v6) V(v7) \
54 V(v8) V(v9) V(v10) V(v11) V(v12) V(v13) V(v14) V(v15) \
55 V(v16) V(v17) V(v18) V(v19) V(v20) V(v21) V(v22) V(v23) \
56 V(v24) V(v25) V(v26) V(v27) V(v28) V(v29) V(v30) V(v31)
58#define ALLOCATABLE_SIMD128_REGISTERS(V) \
59 V(v1) V(v2) V(v3) V(v4) V(v5) V(v6) V(v7) \
60 V(v10) V(v11) V(v12) V(v13) V(v14) V(v15) V(v16) \
61 V(v17) V(v18) V(v19) V(v20) V(v21) V(v22) V(v26) \
62 V(v27) V(v28) V(v29) V(v30) V(v31)
64#define ALLOCATABLE_DOUBLE_REGISTERS(V) \
65 V(ft1) V(ft2) V(ft3) V(ft4) V(ft5) V(ft6) V(ft7) V(ft8) \
66 V(ft9) V(ft10) V(ft11) V(fa0) V(fa1) V(fa2) V(fa3) V(fa4) V(fa5) \
139#define REGISTER_CODE(R) kRegCode_##R,
145class Register :
public RegisterBase<Register, kRegAfterLast> {
147#if defined(V8_TARGET_LITTLE_ENDIAN)
150#elif defined(V8_TARGET_BIG_ENDIAN)
154#error Unknown endianness
165#define DECLARE_REGISTER(R) \
166 constexpr Register R = Register::from_code(kRegCode_##R);
168#undef DECLARE_REGISTER
181#define REGISTER_CODE(R) kDoubleCode_##R,
188#define REGISTER_CODE(R) kVRCode_##R,
243#define DECLARE_DOUBLE_REGISTER(R) \
244 constexpr DoubleRegister R = DoubleRegister::from_code(kDoubleCode_##R);
246#undef DECLARE_DOUBLE_REGISTER
250#define DECLARE_VECTOR_REGISTER(R) \
251 constexpr VRegister R = VRegister::from_code(kVRCode_##R);
253#undef DECLARE_VECTOR_REGISTER
304#ifdef V8_TARGET_ARCH_RISCV64
329#ifdef V8_COMPRESS_POINTERS
constexpr FPURegister(int code)
static constexpr FPURegister from_code(int8_t code)
static constexpr DwVfpRegister no_reg()
constexpr int8_t code() const
static constexpr int kMantissaOffset
friend class RegisterBase
constexpr Register(int code)
static constexpr int kExponentOffset
static constexpr Register no_reg()
static constexpr VRegister no_reg()
constexpr VRegister(int code)
ZoneVector< RpoNumber > & result
InstructionOperand source
constexpr bool IsInRange(T value, U lower_limit, U higher_limit)
constexpr Register no_reg
constexpr Register kRootRegister
const Simd128Register no_msareg
constexpr AliasingKind kFPAliasing
constexpr Register kRuntimeCallFunctionRegister
constexpr int kFPRegisterPassedArguments
DwVfpRegister DoubleRegister
constexpr Simd128Register kSimd128RegZero
constexpr DoubleRegister kScratchDoubleReg
constexpr Register kRuntimeCallArgvRegister
constexpr Register kJavaScriptCallTargetRegister
constexpr DwVfpRegister no_dreg
constexpr Register kJavaScriptCallArgCountRegister
constexpr Register kInterpreterAccumulatorRegister
int ToNumber(Register reg)
constexpr Register kScratchReg2
constexpr VRegister kSimd128ScratchReg2
constexpr Register kScratchReg
static const int kRegisterPassedArguments
constexpr Register kSimulatorBreakArgument
QwNeonRegister Simd128Register
constexpr DoubleRegister kSingleRegZero
constexpr DoubleRegister kFPReturnRegister0
constexpr Register kReturnRegister1
constexpr Register kMaglevExtraScratchRegister
constexpr Simd128Register kSimd128ScratchReg
constexpr Register kReturnRegister0
constexpr bool kPadArguments
constexpr Register kWasmImplicitArgRegister
constexpr Register kContextRegister
constexpr VRegister kSimd128ScratchReg3
constexpr Register kRuntimeCallArgCountRegister
constexpr Register kInterpreterDispatchTableRegister
constexpr Register kAllocateSizeRegister
constexpr Register kWasmTrapHandlerFaultAddressRegister
constexpr LowDwVfpRegister kDoubleRegZero
constexpr Register kJavaScriptCallExtraArg1Register
Register ToRegister(int num)
constexpr Register kJavaScriptCallCodeStartRegister
constexpr Register kPtrComprCageBaseRegister
constexpr Register kReturnRegister2
Register ReassignRegister(Register &source)
constexpr Register kWasmCompileLazyFuncIndexRegister
const int kSafepointRegisterStackIndexMap[kNumRegs]
constexpr Register kStackPointerRegister
constexpr int ArgumentPaddingSlots(int argument_count)
constexpr Register kCArgRegs[]
constexpr Register kMaglevFlagsRegister
constexpr bool kSimdMaskRegisters
constexpr Register kJavaScriptCallDispatchHandleRegister
constexpr Register kInterpreterBytecodeOffsetRegister
constexpr Register kJavaScriptCallNewTargetRegister
constexpr Register kJSFunctionRegister
SwVfpRegister FloatRegister
constexpr Register kInterpreterBytecodeArrayRegister
constexpr Register padreg
#define VECTOR_REGISTERS(V)
#define GENERAL_REGISTERS(V)
#define DECLARE_DOUBLE_REGISTER(R)
#define DECLARE_REGISTER(R)
#define DOUBLE_REGISTERS(V)
#define DEFINE_REGISTER_NAMES(RegType, LIST)
#define DECLARE_VECTOR_REGISTER(R)
#define DCHECK(condition)