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,
5963206f3038d3d6e1cb24166726613808a4b0ad8cSerban Constantinescu  TR  = 18,     // ART Thread Register - Managed Runtime (Caller Saved Reg)
60b551fdcda9eb128c80de37c4fb978968bec6d4b3Zheng Xu  ETR = 21,     // ART Thread Register - External Calls  (Callee Saved Reg)
61ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  IP0 = 16,     // Used as scratch by VIXL.
62ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  IP1 = 17,     // Used as scratch by ART JNI Assembler.
63ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  FP  = 29,
64ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  LR  = 30,
65b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith  SP  = 31,     // SP is X31 and overlaps with XRZ but we encode it as a
66ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu                // special register, due to the different instruction semantics.
6715523731549152276f23dcf94d81b1a9ce9c5038Serban Constantinescu  XZR = 32,
6815523731549152276f23dcf94d81b1a9ce9c5038Serban Constantinescu  kNumberOfCoreRegisters = 33,
69ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  kNoRegister = -1,
70ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu};
71ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustd::ostream& operator<<(std::ostream& os, const Register& rhs);
72ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
73ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu// Values for GP WRegisters - 32bit registers.
74ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescuenum WRegister {
75ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W0  =  0,
76ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W1  =  1,
77ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W2  =  2,
78ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W3  =  3,
79ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W4  =  4,
80ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W5  =  5,
81ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W6  =  6,
82ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W7  =  7,
83ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W8  =  8,
84ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W9  =  9,
85ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W10 = 10,
86ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W11 = 11,
87ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W12 = 12,
88ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W13 = 13,
89ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W14 = 14,
90ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W15 = 15,
91ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W16 = 16,
92ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W17 = 17,
93ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W18 = 18,
94ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W19 = 19,
95ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W20 = 20,
96ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W21 = 21,
97ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W22 = 22,
98ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W23 = 23,
99ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W24 = 24,
100ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W25 = 25,
101ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W26 = 26,
102ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W27 = 27,
103ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W28 = 28,
104ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W29 = 29,
105ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W30 = 30,
106ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  W31 = 31,
107ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  WZR = 31,
108ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  kNumberOfWRegisters = 32,
109ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  kNoWRegister = -1,
110ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu};
111ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustd::ostream& operator<<(std::ostream& os, const WRegister& rhs);
112ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
113ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu// Values for FP DRegisters - double precision floating point.
114ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescuenum DRegister {
115ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D0  =  0,
116ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D1  =  1,
117ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D2  =  2,
118ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D3  =  3,
119ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D4  =  4,
120ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D5  =  5,
121ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D6  =  6,
122ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D7  =  7,
123ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D8  =  8,
124ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D9  =  9,
125ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D10 = 10,
126ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D11 = 11,
127ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D12 = 12,
128ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D13 = 13,
129ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D14 = 14,
130ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D15 = 15,
131ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D16 = 16,
132ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D17 = 17,
133ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D18 = 18,
134ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D19 = 19,
135ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D20 = 20,
136ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D21 = 21,
137ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D22 = 22,
138ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D23 = 23,
139ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D24 = 24,
140ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D25 = 25,
141ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D26 = 26,
142ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D27 = 27,
143ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D28 = 28,
144ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D29 = 29,
145ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D30 = 30,
146ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  D31 = 31,
147ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  kNumberOfDRegisters = 32,
148ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  kNoDRegister = -1,
149ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu};
150ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustd::ostream& operator<<(std::ostream& os, const DRegister& rhs);
151ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
152ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu// Values for FP SRegisters - single precision floating point.
153ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescuenum SRegister {
154ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S0  =  0,
155ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S1  =  1,
156ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S2  =  2,
157ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S3  =  3,
158ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S4  =  4,
159ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S5  =  5,
160ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S6  =  6,
161ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S7  =  7,
162ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S8  =  8,
163ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S9  =  9,
164ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S10 = 10,
165ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S11 = 11,
166ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S12 = 12,
167ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S13 = 13,
168ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S14 = 14,
169ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S15 = 15,
170ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S16 = 16,
171ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S17 = 17,
172ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S18 = 18,
173ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S19 = 19,
174ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S20 = 20,
175ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S21 = 21,
176ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S22 = 22,
177ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S23 = 23,
178ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S24 = 24,
179ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S25 = 25,
180ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S26 = 26,
181ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S27 = 27,
182ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S28 = 28,
183ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S29 = 29,
184ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S30 = 30,
185ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  S31 = 31,
186ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  kNumberOfSRegisters = 32,
187ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  kNoSRegister = -1,
188ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu};
189ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustd::ostream& operator<<(std::ostream& os, const SRegister& rhs);
190ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
191ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}  // namespace arm64
192ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}  // namespace art
193ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
194ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu#endif  // ART_RUNTIME_ARCH_ARM64_REGISTERS_ARM64_H_
195