blob: 4f9a9ef7ea3387cb5397fc24444bc20613650203 [file] [log] [blame] [edit]
// Copyright 2022 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_CODEGEN_PPC_REGLIST_PPC_H_
#define V8_CODEGEN_PPC_REGLIST_PPC_H_
#include "src/codegen/register-arch.h"
#include "src/codegen/reglist-base.h"
namespace v8 {
namespace internal {
using RegList = RegListBase<Register>;
using DoubleRegList = RegListBase<DoubleRegister>;
using Simd128RegList = RegListBase<Simd128Register>;
ASSERT_TRIVIALLY_COPYABLE(RegList);
ASSERT_TRIVIALLY_COPYABLE(DoubleRegList);
// Register list in load/store instructions
// Note that the bit values must match those used in actual instruction encoding
// Caller-saved/arguments registers
const RegList kJSCallerSaved = {r3, // a1
r4, // a2
r5, // a3
r6, // a4
r7, // a5
r8, // a6
r9, // a7
r10, // a8
r11};
const int kNumJSCallerSaved = 9;
// Return the code of the n-th caller-saved register available to JavaScript
// e.g. JSCallerSavedReg(0) returns r0.code() == 0
int JSCallerSavedCode(int n);
// Callee-saved registers preserved when switching from C to JavaScript
const RegList kCalleeSaved = {r14, r15, r16, r17, r18, r19, r20, r21, r22,
r23, r24, r25, r26, r27, r28, r29, r30, fp};
const int kNumCalleeSaved = 18;
const DoubleRegList kCallerSavedDoubles = {d0, d1, d2, d3, d4, d5, d6,
d7, d8, d9, d10, d11, d12, d13};
const Simd128RegList kCallerSavedSimd128s = {v0, v1, v2, v3, v4, v5, v6,
v7, v8, v9, v10, v11, v12, v13,
v14, v15, v16, v17, v18, v19};
const int kNumCallerSavedDoubles = 14;
const DoubleRegList kCalleeSavedDoubles = {d14, d15, d16, d17, d18, d19,
d20, d21, d22, d23, d24, d25,
d26, d27, d28, d29, d30, d31};
const int kNumCalleeSavedDoubles = 18;
} // namespace internal
} // namespace v8
#endif // V8_CODEGEN_PPC_REGLIST_PPC_H_