/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ART_RUNTIME_ARCH_ARM64_REGISTERS_ARM64_H_ #define ART_RUNTIME_ARCH_ARM64_REGISTERS_ARM64_H_ #include <iosfwd> namespace art { namespace arm64 { // Values for GP XRegisters - 64bit registers. enum XRegister { X0 = 0, X1 = 1, X2 = 2, X3 = 3, X4 = 4, X5 = 5, X6 = 6, X7 = 7, X8 = 8, X9 = 9, X10 = 10, X11 = 11, X12 = 12, X13 = 13, X14 = 14, X15 = 15, X16 = 16, X17 = 17, X18 = 18, X19 = 19, X20 = 20, X21 = 21, X22 = 22, X23 = 23, X24 = 24, X25 = 25, X26 = 26, X27 = 27, X28 = 28, X29 = 29, X30 = 30, SP = 31, // SP and XZR are encoded in instructions using the register XZR = 32, // code `31`, the context deciding which is used. We use a // different enum value to distinguish between the two. kNumberOfXRegisters = 33, // Aliases. TR = X18, // ART Thread Register - Managed Runtime (Caller Saved Reg) ETR = X21, // ART Thread Register - External Calls (Callee Saved Reg) IP0 = X16, // Used as scratch by VIXL. IP1 = X17, // Used as scratch by ART JNI Assembler. FP = X29, LR = X30, kNoRegister = -1, }; std::ostream& operator<<(std::ostream& os, const XRegister& rhs); // Values for GP WRegisters - 32bit registers. enum WRegister { W0 = 0, W1 = 1, W2 = 2, W3 = 3, W4 = 4, W5 = 5, W6 = 6, W7 = 7, W8 = 8, W9 = 9, W10 = 10, W11 = 11, W12 = 12, W13 = 13, W14 = 14, W15 = 15, W16 = 16, W17 = 17, W18 = 18, W19 = 19, W20 = 20, W21 = 21, W22 = 22, W23 = 23, W24 = 24, W25 = 25, W26 = 26, W27 = 27, W28 = 28, W29 = 29, W30 = 30, WSP = 31, WZR = 32, kNumberOfWRegisters = 33, kNoWRegister = -1, }; std::ostream& operator<<(std::ostream& os, const WRegister& rhs); // Values for FP DRegisters - double precision floating point. enum DRegister { D0 = 0, D1 = 1, D2 = 2, D3 = 3, D4 = 4, D5 = 5, D6 = 6, D7 = 7, D8 = 8, D9 = 9, D10 = 10, D11 = 11, D12 = 12, D13 = 13, D14 = 14, D15 = 15, D16 = 16, D17 = 17, D18 = 18, D19 = 19, D20 = 20, D21 = 21, D22 = 22, D23 = 23, D24 = 24, D25 = 25, D26 = 26, D27 = 27, D28 = 28, D29 = 29, D30 = 30, D31 = 31, kNumberOfDRegisters = 32, kNoDRegister = -1, }; std::ostream& operator<<(std::ostream& os, const DRegister& rhs); // Values for FP SRegisters - single precision floating point. enum SRegister { S0 = 0, S1 = 1, S2 = 2, S3 = 3, S4 = 4, S5 = 5, S6 = 6, S7 = 7, S8 = 8, S9 = 9, S10 = 10, S11 = 11, S12 = 12, S13 = 13, S14 = 14, S15 = 15, S16 = 16, S17 = 17, S18 = 18, S19 = 19, S20 = 20, S21 = 21, S22 = 22, S23 = 23, S24 = 24, S25 = 25, S26 = 26, S27 = 27, S28 = 28, S29 = 29, S30 = 30, S31 = 31, kNumberOfSRegisters = 32, kNoSRegister = -1, }; std::ostream& operator<<(std::ostream& os, const SRegister& rhs); } // namespace arm64 } // namespace art #endif // ART_RUNTIME_ARCH_ARM64_REGISTERS_ARM64_H_