1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2014 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker #ifndef ART_RUNTIME_ARCH_ARM64_REGISTERS_ARM64_H_ 18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_ARCH_ARM64_REGISTERS_ARM64_H_ 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker #include <iosfwd> 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker #include "base/macros.h" 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN { 25*795d594fSAndroid Build Coastguard Worker namespace arm64 { 26*795d594fSAndroid Build Coastguard Worker 27*795d594fSAndroid Build Coastguard Worker // Values for GP XRegisters - 64bit registers. 28*795d594fSAndroid Build Coastguard Worker enum XRegister { 29*795d594fSAndroid Build Coastguard Worker X0 = 0, 30*795d594fSAndroid Build Coastguard Worker X1 = 1, 31*795d594fSAndroid Build Coastguard Worker X2 = 2, 32*795d594fSAndroid Build Coastguard Worker X3 = 3, 33*795d594fSAndroid Build Coastguard Worker X4 = 4, 34*795d594fSAndroid Build Coastguard Worker X5 = 5, 35*795d594fSAndroid Build Coastguard Worker X6 = 6, 36*795d594fSAndroid Build Coastguard Worker X7 = 7, 37*795d594fSAndroid Build Coastguard Worker X8 = 8, 38*795d594fSAndroid Build Coastguard Worker X9 = 9, 39*795d594fSAndroid Build Coastguard Worker X10 = 10, 40*795d594fSAndroid Build Coastguard Worker X11 = 11, 41*795d594fSAndroid Build Coastguard Worker X12 = 12, 42*795d594fSAndroid Build Coastguard Worker X13 = 13, 43*795d594fSAndroid Build Coastguard Worker X14 = 14, 44*795d594fSAndroid Build Coastguard Worker X15 = 15, 45*795d594fSAndroid Build Coastguard Worker X16 = 16, 46*795d594fSAndroid Build Coastguard Worker X17 = 17, 47*795d594fSAndroid Build Coastguard Worker X18 = 18, 48*795d594fSAndroid Build Coastguard Worker X19 = 19, 49*795d594fSAndroid Build Coastguard Worker X20 = 20, 50*795d594fSAndroid Build Coastguard Worker X21 = 21, 51*795d594fSAndroid Build Coastguard Worker X22 = 22, 52*795d594fSAndroid Build Coastguard Worker X23 = 23, 53*795d594fSAndroid Build Coastguard Worker X24 = 24, 54*795d594fSAndroid Build Coastguard Worker X25 = 25, 55*795d594fSAndroid Build Coastguard Worker X26 = 26, 56*795d594fSAndroid Build Coastguard Worker X27 = 27, 57*795d594fSAndroid Build Coastguard Worker X28 = 28, 58*795d594fSAndroid Build Coastguard Worker X29 = 29, 59*795d594fSAndroid Build Coastguard Worker X30 = 30, 60*795d594fSAndroid Build Coastguard Worker SP = 31, // SP and XZR are encoded in instructions using the register 61*795d594fSAndroid Build Coastguard Worker XZR = 32, // code `31`, the context deciding which is used. We use a 62*795d594fSAndroid Build Coastguard Worker // different enum value to distinguish between the two. 63*795d594fSAndroid Build Coastguard Worker kNumberOfXRegisters = 33, 64*795d594fSAndroid Build Coastguard Worker // Aliases. 65*795d594fSAndroid Build Coastguard Worker TR = X19, // ART Thread Register - Managed Runtime (Callee Saved Reg) 66*795d594fSAndroid Build Coastguard Worker MR = X20, // ART Marking Register - Managed Runtime (Callee Saved Reg) 67*795d594fSAndroid Build Coastguard Worker IP0 = X16, // Used as scratch by VIXL. 68*795d594fSAndroid Build Coastguard Worker IP1 = X17, // Used as scratch by ART JNI Assembler. 69*795d594fSAndroid Build Coastguard Worker FP = X29, 70*795d594fSAndroid Build Coastguard Worker LR = X30, 71*795d594fSAndroid Build Coastguard Worker kNoRegister = -1, 72*795d594fSAndroid Build Coastguard Worker }; 73*795d594fSAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const XRegister& rhs); 74*795d594fSAndroid Build Coastguard Worker 75*795d594fSAndroid Build Coastguard Worker // Values for GP WRegisters - 32bit registers. 76*795d594fSAndroid Build Coastguard Worker enum WRegister { 77*795d594fSAndroid Build Coastguard Worker W0 = 0, 78*795d594fSAndroid Build Coastguard Worker W1 = 1, 79*795d594fSAndroid Build Coastguard Worker W2 = 2, 80*795d594fSAndroid Build Coastguard Worker W3 = 3, 81*795d594fSAndroid Build Coastguard Worker W4 = 4, 82*795d594fSAndroid Build Coastguard Worker W5 = 5, 83*795d594fSAndroid Build Coastguard Worker W6 = 6, 84*795d594fSAndroid Build Coastguard Worker W7 = 7, 85*795d594fSAndroid Build Coastguard Worker W8 = 8, 86*795d594fSAndroid Build Coastguard Worker W9 = 9, 87*795d594fSAndroid Build Coastguard Worker W10 = 10, 88*795d594fSAndroid Build Coastguard Worker W11 = 11, 89*795d594fSAndroid Build Coastguard Worker W12 = 12, 90*795d594fSAndroid Build Coastguard Worker W13 = 13, 91*795d594fSAndroid Build Coastguard Worker W14 = 14, 92*795d594fSAndroid Build Coastguard Worker W15 = 15, 93*795d594fSAndroid Build Coastguard Worker W16 = 16, 94*795d594fSAndroid Build Coastguard Worker W17 = 17, 95*795d594fSAndroid Build Coastguard Worker W18 = 18, 96*795d594fSAndroid Build Coastguard Worker W19 = 19, 97*795d594fSAndroid Build Coastguard Worker W20 = 20, 98*795d594fSAndroid Build Coastguard Worker W21 = 21, 99*795d594fSAndroid Build Coastguard Worker W22 = 22, 100*795d594fSAndroid Build Coastguard Worker W23 = 23, 101*795d594fSAndroid Build Coastguard Worker W24 = 24, 102*795d594fSAndroid Build Coastguard Worker W25 = 25, 103*795d594fSAndroid Build Coastguard Worker W26 = 26, 104*795d594fSAndroid Build Coastguard Worker W27 = 27, 105*795d594fSAndroid Build Coastguard Worker W28 = 28, 106*795d594fSAndroid Build Coastguard Worker W29 = 29, 107*795d594fSAndroid Build Coastguard Worker W30 = 30, 108*795d594fSAndroid Build Coastguard Worker WSP = 31, 109*795d594fSAndroid Build Coastguard Worker WZR = 32, 110*795d594fSAndroid Build Coastguard Worker kNumberOfWRegisters = 33, 111*795d594fSAndroid Build Coastguard Worker kNoWRegister = -1, 112*795d594fSAndroid Build Coastguard Worker }; 113*795d594fSAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const WRegister& rhs); 114*795d594fSAndroid Build Coastguard Worker 115*795d594fSAndroid Build Coastguard Worker // Values for FP DRegisters - double precision floating point. 116*795d594fSAndroid Build Coastguard Worker enum DRegister { 117*795d594fSAndroid Build Coastguard Worker D0 = 0, 118*795d594fSAndroid Build Coastguard Worker D1 = 1, 119*795d594fSAndroid Build Coastguard Worker D2 = 2, 120*795d594fSAndroid Build Coastguard Worker D3 = 3, 121*795d594fSAndroid Build Coastguard Worker D4 = 4, 122*795d594fSAndroid Build Coastguard Worker D5 = 5, 123*795d594fSAndroid Build Coastguard Worker D6 = 6, 124*795d594fSAndroid Build Coastguard Worker D7 = 7, 125*795d594fSAndroid Build Coastguard Worker D8 = 8, 126*795d594fSAndroid Build Coastguard Worker D9 = 9, 127*795d594fSAndroid Build Coastguard Worker D10 = 10, 128*795d594fSAndroid Build Coastguard Worker D11 = 11, 129*795d594fSAndroid Build Coastguard Worker D12 = 12, 130*795d594fSAndroid Build Coastguard Worker D13 = 13, 131*795d594fSAndroid Build Coastguard Worker D14 = 14, 132*795d594fSAndroid Build Coastguard Worker D15 = 15, 133*795d594fSAndroid Build Coastguard Worker D16 = 16, 134*795d594fSAndroid Build Coastguard Worker D17 = 17, 135*795d594fSAndroid Build Coastguard Worker D18 = 18, 136*795d594fSAndroid Build Coastguard Worker D19 = 19, 137*795d594fSAndroid Build Coastguard Worker D20 = 20, 138*795d594fSAndroid Build Coastguard Worker D21 = 21, 139*795d594fSAndroid Build Coastguard Worker D22 = 22, 140*795d594fSAndroid Build Coastguard Worker D23 = 23, 141*795d594fSAndroid Build Coastguard Worker D24 = 24, 142*795d594fSAndroid Build Coastguard Worker D25 = 25, 143*795d594fSAndroid Build Coastguard Worker D26 = 26, 144*795d594fSAndroid Build Coastguard Worker D27 = 27, 145*795d594fSAndroid Build Coastguard Worker D28 = 28, 146*795d594fSAndroid Build Coastguard Worker D29 = 29, 147*795d594fSAndroid Build Coastguard Worker D30 = 30, 148*795d594fSAndroid Build Coastguard Worker D31 = 31, 149*795d594fSAndroid Build Coastguard Worker kNumberOfDRegisters = 32, 150*795d594fSAndroid Build Coastguard Worker kNoDRegister = -1, 151*795d594fSAndroid Build Coastguard Worker }; 152*795d594fSAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const DRegister& rhs); 153*795d594fSAndroid Build Coastguard Worker 154*795d594fSAndroid Build Coastguard Worker // Values for FP SRegisters - single precision floating point. 155*795d594fSAndroid Build Coastguard Worker enum SRegister { 156*795d594fSAndroid Build Coastguard Worker S0 = 0, 157*795d594fSAndroid Build Coastguard Worker S1 = 1, 158*795d594fSAndroid Build Coastguard Worker S2 = 2, 159*795d594fSAndroid Build Coastguard Worker S3 = 3, 160*795d594fSAndroid Build Coastguard Worker S4 = 4, 161*795d594fSAndroid Build Coastguard Worker S5 = 5, 162*795d594fSAndroid Build Coastguard Worker S6 = 6, 163*795d594fSAndroid Build Coastguard Worker S7 = 7, 164*795d594fSAndroid Build Coastguard Worker S8 = 8, 165*795d594fSAndroid Build Coastguard Worker S9 = 9, 166*795d594fSAndroid Build Coastguard Worker S10 = 10, 167*795d594fSAndroid Build Coastguard Worker S11 = 11, 168*795d594fSAndroid Build Coastguard Worker S12 = 12, 169*795d594fSAndroid Build Coastguard Worker S13 = 13, 170*795d594fSAndroid Build Coastguard Worker S14 = 14, 171*795d594fSAndroid Build Coastguard Worker S15 = 15, 172*795d594fSAndroid Build Coastguard Worker S16 = 16, 173*795d594fSAndroid Build Coastguard Worker S17 = 17, 174*795d594fSAndroid Build Coastguard Worker S18 = 18, 175*795d594fSAndroid Build Coastguard Worker S19 = 19, 176*795d594fSAndroid Build Coastguard Worker S20 = 20, 177*795d594fSAndroid Build Coastguard Worker S21 = 21, 178*795d594fSAndroid Build Coastguard Worker S22 = 22, 179*795d594fSAndroid Build Coastguard Worker S23 = 23, 180*795d594fSAndroid Build Coastguard Worker S24 = 24, 181*795d594fSAndroid Build Coastguard Worker S25 = 25, 182*795d594fSAndroid Build Coastguard Worker S26 = 26, 183*795d594fSAndroid Build Coastguard Worker S27 = 27, 184*795d594fSAndroid Build Coastguard Worker S28 = 28, 185*795d594fSAndroid Build Coastguard Worker S29 = 29, 186*795d594fSAndroid Build Coastguard Worker S30 = 30, 187*795d594fSAndroid Build Coastguard Worker S31 = 31, 188*795d594fSAndroid Build Coastguard Worker kNumberOfSRegisters = 32, 189*795d594fSAndroid Build Coastguard Worker kNoSRegister = -1, 190*795d594fSAndroid Build Coastguard Worker }; 191*795d594fSAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& os, const SRegister& rhs); 192*795d594fSAndroid Build Coastguard Worker 193*795d594fSAndroid Build Coastguard Worker } // namespace arm64 194*795d594fSAndroid Build Coastguard Worker } // namespace art 195*795d594fSAndroid Build Coastguard Worker 196*795d594fSAndroid Build Coastguard Worker #endif // ART_RUNTIME_ARCH_ARM64_REGISTERS_ARM64_H_ 197