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