diff options
Diffstat (limited to 'deps/v8/src/codegen/arm/reglist-arm.h')
-rw-r--r-- | deps/v8/src/codegen/arm/reglist-arm.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/deps/v8/src/codegen/arm/reglist-arm.h b/deps/v8/src/codegen/arm/reglist-arm.h new file mode 100644 index 0000000000..c6834a5db5 --- /dev/null +++ b/deps/v8/src/codegen/arm/reglist-arm.h @@ -0,0 +1,56 @@ +// 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_ARM_REGLIST_ARM_H_ +#define V8_CODEGEN_ARM_REGLIST_ARM_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>; +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 = {r0, // r0 a1 + r1, // r1 a2 + r2, // r2 a3 + r3}; // r3 a4 + +const int kNumJSCallerSaved = 4; + +// Callee-saved registers preserved when switching from C to JavaScript +const RegList kCalleeSaved = {r4, // r4 v1 + r5, // r5 v2 + r6, // r6 v3 + r7, // r7 v4 (cp in JavaScript code) + r8, // r8 v5 (pp in JavaScript code) + kR9Available ? r9 : Register::no_reg(), // r9 v6 + r10, // r10 v7 + r11}; // r11 v8 (fp in JavaScript code) + +// When calling into C++ (only for C++ calls that can't cause a GC). +// The call code will take care of lr, fp, etc. +const RegList kCallerSaved = {r0, // r0 + r1, // r1 + r2, // r2 + r3, // r3 + r9}; // r9 + +const int kNumCalleeSaved = 7 + kR9Available; + +// Double registers d8 to d15 are callee-saved. +const int kNumDoubleCalleeSaved = 8; + +} // namespace internal +} // namespace v8 + +#endif // V8_CODEGEN_ARM_REGLIST_ARM_H_ |