5#ifndef V8_CODEGEN_PPC_REGISTER_PPC_H_
6#define V8_CODEGEN_PPC_REGISTER_PPC_H_
14#define GENERAL_REGISTERS(V) \
15 V(r0) V(sp) V(r2) V(r3) V(r4) V(r5) V(r6) V(r7) \
16 V(r8) V(r9) V(r10) V(r11) V(ip) V(r13) V(r14) V(r15) \
17 V(r16) V(r17) V(r18) V(r19) V(r20) V(r21) V(r22) V(r23) \
18 V(r24) V(r25) V(r26) V(r27) V(r28) V(r29) V(r30) V(fp)
20#define ALWAYS_ALLOCATABLE_GENERAL_REGISTERS(V) \
21 V(r3) V(r4) V(r5) V(r6) V(r7) \
22 V(r8) V(r9) V(r10) V(r14) V(r15) \
23 V(r16) V(r17) V(r18) V(r19) V(r20) V(r21) V(r22) V(r23) \
24 V(r24) V(r25) V(r26) V(r30)
26#if V8_EMBEDDED_CONSTANT_POOL_BOOL
27#define MAYBE_ALLOCATEABLE_CONSTANT_POOL_REGISTER(V)
29#define MAYBE_ALLOCATEABLE_CONSTANT_POOL_REGISTER(V) V(r28)
32#ifdef V8_COMPRESS_POINTERS
33#define MAYBE_ALLOCATABLE_CAGE_REGISTERS(V)
35#define MAYBE_ALLOCATABLE_CAGE_REGISTERS(V) V(r27)
38#define ALLOCATABLE_GENERAL_REGISTERS(V) \
39 ALWAYS_ALLOCATABLE_GENERAL_REGISTERS(V) \
40 MAYBE_ALLOCATEABLE_CONSTANT_POOL_REGISTER(V) \
41 MAYBE_ALLOCATABLE_CAGE_REGISTERS(V)
43#define LOW_DOUBLE_REGISTERS(V) \
44 V(d0) V(d1) V(d2) V(d3) V(d4) V(d5) V(d6) V(d7) \
45 V(d8) V(d9) V(d10) V(d11) V(d12) V(d13) V(d14) V(d15)
47#define NON_LOW_DOUBLE_REGISTERS(V) \
48 V(d16) V(d17) V(d18) V(d19) V(d20) V(d21) V(d22) V(d23) \
49 V(d24) V(d25) V(d26) V(d27) V(d28) V(d29) V(d30) V(d31)
51#define DOUBLE_REGISTERS(V) \
52 LOW_DOUBLE_REGISTERS(V) NON_LOW_DOUBLE_REGISTERS(V)
54#define ALLOCATABLE_DOUBLE_REGISTERS(V) \
55 V(d1) V(d2) V(d3) V(d4) V(d5) V(d6) V(d7) \
56 V(d8) V(d9) V(d10) V(d11) V(d12) V(d15) \
57 V(d16) V(d17) V(d18) V(d19) V(d20) V(d21) V(d22) V(d23) \
58 V(d24) V(d25) V(d26) V(d27) V(d28) V(d29) V(d30) V(d31)
60#define FLOAT_REGISTERS DOUBLE_REGISTERS
61#define SIMD128_REGISTERS(V) \
62 V(v0) V(v1) V(v2) V(v3) V(v4) V(v5) V(v6) V(v7) \
63 V(v8) V(v9) V(v10) V(v11) V(v12) V(v13) V(v14) V(v15) \
64 V(v16) V(v17) V(v18) V(v19) V(v20) V(v21) V(v22) V(v23) \
65 V(v24) V(v25) V(v26) V(v27) V(v28) V(v29) V(v30) V(v31)
67#define ALLOCATABLE_SIMD128_REGISTERS(V) \
68 V(v0) V(v1) V(v2) V(v3) V(v4) V(v5) V(v6) V(v7) \
69 V(v8) V(v9) V(v10) V(v11) V(v12) \
70 V(v16) V(v17) V(v18) V(v19) V(v20) V(v21) V(v22) V(v23) \
71 V(v24) V(v25) V(v26) V(v27) V(v28) V(v29) V(v30) V(v31)
73#define C_REGISTERS(V) \
74 V(cr0) V(cr1) V(cr2) V(cr3) V(cr4) V(cr5) V(cr6) V(cr7) \
75 V(cr8) V(cr9) V(cr10) V(cr11) V(cr12) V(cr15)
81#if V8_TARGET_ARCH_PPC64 && \
82 (V8_TARGET_LITTLE_ENDIAN || \
83 (defined(_CALL_ELF) && _CALL_ELF == 2))
114#define REGISTER_CODE(R) kRegCode_##R,
120class Register :
public RegisterBase<Register, kRegAfterLast> {
122#if V8_TARGET_LITTLE_ENDIAN
136static_assert(
sizeof(Register) <=
sizeof(int),
137 "Register can efficiently be passed by value");
146#define DEFINE_REGISTER(R) \
147 constexpr Register R = Register::from_code(kRegCode_##R);
149#undef DEFINE_REGISTER
156#ifdef V8_COMPRESS_POINTERS
199#define REGISTER_CODE(R) kSimd128Code_##R,
207 :
public RegisterBase<Simd128Register, kSimd128AfterLast> {
215 "Simd128Register can efficiently be passed by value");
218#define REGISTER_CODE(R) kDoubleCode_##R,
225class DoubleRegister :
public RegisterBase<DoubleRegister, kDoubleAfterLast> {
242 int reg_code =
code();
254 "DoubleRegister can efficiently be passed by value");
258#define DECLARE_SIMD128_REGISTER(R) \
259 constexpr Simd128Register R = Simd128Register::from_code(kSimd128Code_##R);
261#undef DECLARE_SIMD128_REGISTER
264#define DEFINE_REGISTER(R) \
265 constexpr DoubleRegister R = DoubleRegister::from_code(kDoubleCode_##R);
267#undef DEFINE_REGISTER
281#define REGISTER_CODE(R) kCCode_##R,
288class CRegister :
public RegisterBase<CRegister, kCAfterLast> {
294#define DECLARE_C_REGISTER(R) \
295 constexpr CRegister R = CRegister::from_code(kCCode_##R);
297#undef DECLARE_C_REGISTER
constexpr CRegister(int code)
friend class RegisterBase
constexpr DoubleRegister(int code)
static constexpr int kSizeInBytes
Simd128Register toSimd() const
static int SupportedRegisterCount()
static constexpr QwNeonRegister 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()
constexpr Simd128Register(int code)
ZoneVector< RpoNumber > & result
InstructionOperand source
constexpr Register no_reg
constexpr Register kRootRegister
const int kStackFrameLRSlot
constexpr AliasingKind kFPAliasing
constexpr Register kRuntimeCallFunctionRegister
const int kNumRequiredStackFrameSlots
DwVfpRegister DoubleRegister
constexpr Simd128Register kSimd128RegZero
constexpr DoubleRegister kScratchDoubleReg
constexpr Register kRuntimeCallArgvRegister
constexpr Simd128Register kScratchSimd128Reg
constexpr Register kJavaScriptCallTargetRegister
const int kStackFrameExtraParamSlot
constexpr DwVfpRegister no_dreg
constexpr LowDwVfpRegister kLastCalleeSavedDoubleReg
constexpr Register kJavaScriptCallArgCountRegister
constexpr Register kInterpreterAccumulatorRegister
static const int kRegisterPassedArguments
constexpr Register kConstantPoolRegister
QwNeonRegister Simd128Register
constexpr DoubleRegister kFPReturnRegister0
constexpr Register kReturnRegister1
constexpr Register kReturnRegister0
constexpr Register kWasmImplicitArgRegister
constexpr Register kContextRegister
constexpr Register kRuntimeCallArgCountRegister
constexpr Register kInterpreterDispatchTableRegister
constexpr Register kAllocateSizeRegister
constexpr LowDwVfpRegister kDoubleRegZero
constexpr Register kJavaScriptCallExtraArg1Register
Register ToRegister(int num)
constexpr Register kJavaScriptCallCodeStartRegister
constexpr Register kPtrComprCageBaseRegister
constexpr Register kReturnRegister2
Register ReassignRegister(Register &source)
constexpr CRegister no_creg
constexpr Register kWasmCompileLazyFuncIndexRegister
constexpr LowDwVfpRegister kFirstCalleeSavedDoubleReg
constexpr int ArgumentPaddingSlots(int argument_count)
constexpr Register kCArgRegs[]
constexpr bool kSimdMaskRegisters
constexpr Register kJavaScriptCallDispatchHandleRegister
constexpr Simd128Register kScratchSimd128Reg2
const Simd128Register no_simdreg
constexpr Register kInterpreterBytecodeOffsetRegister
constexpr Register kJavaScriptCallNewTargetRegister
constexpr Register kJSFunctionRegister
constexpr Register kInterpreterBytecodeArrayRegister
#define DEFINE_REGISTER(register_class, name,...)
#define GENERAL_REGISTERS(V)
#define SIMD128_REGISTERS(V)
#define DECLARE_C_REGISTER(R)
#define DOUBLE_REGISTERS(V)
#define DECLARE_SIMD128_REGISTER(R)
#define DEFINE_REGISTER_NAMES(RegType, LIST)
#define ASSERT_TRIVIALLY_COPYABLE(T)