xref: /aosp_15_r20/art/runtime/arch/arm64/registers_arm64.h (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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