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