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#include "registers_arm64.h"
18ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
19ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu#include <ostream>
20ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
21ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescunamespace art {
22ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescunamespace arm64 {
23ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
24ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustatic const char* kRegisterNames[] = {
25ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9",
26ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  "x10", "x11", "x12", "x13", "x14", "x15", "ip0", "ip1", "x18", "x19",
27ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27", "x28", "fp",
28b95a5345ae4217b70ca36f0cced92f68dda7caf5Stuart Monteith  "lr", "sp", "xzr"
29ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu};
30ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
31ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustatic const char* kWRegisterNames[] = {
32ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9",
33ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "w19",
34ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  "w20", "w21", "w22", "w23", "w24", "w25", "w26", "w27", "w28", "w29",
35a304f97c97d38af73afe6b49259ac4faf0902123Alexandre Rames  "w30", "wsp", "wzr"
36ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu};
37ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
3837c92df53979f9f6ab83155ab9521d554d717161Alexandre Ramesstd::ostream& operator<<(std::ostream& os, const XRegister& rhs) {
3937c92df53979f9f6ab83155ab9521d554d717161Alexandre Rames  if (rhs >= X0 && rhs < kNumberOfXRegisters) {
40ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << kRegisterNames[rhs];
41ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  } else {
42ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << "XRegister[" << static_cast<int>(rhs) << "]";
43ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  }
44ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  return os;
45ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}
46ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
47ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustd::ostream& operator<<(std::ostream& os, const WRegister& rhs) {
48a304f97c97d38af73afe6b49259ac4faf0902123Alexandre Rames  if (rhs >= W0 && rhs < kNumberOfWRegisters) {
49ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << kWRegisterNames[rhs];
50ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  } else {
51ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << "WRegister[" << static_cast<int>(rhs) << "]";
52ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  }
53ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  return os;
54ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}
55ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
56ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustd::ostream& operator<<(std::ostream& os, const DRegister& rhs) {
57ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  if (rhs >= D0 && rhs < kNumberOfDRegisters) {
58ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << "d" << static_cast<int>(rhs);
59ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  } else {
60ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << "DRegister[" << static_cast<int>(rhs) << "]";
61ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  }
62ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  return os;
63ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}
64ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
65ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescustd::ostream& operator<<(std::ostream& os, const SRegister& rhs) {
66ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  if (rhs >= S0 && rhs < kNumberOfSRegisters) {
67ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << "s" << static_cast<int>(rhs);
68ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  } else {
69ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu    os << "SRegister[" << static_cast<int>(rhs) << "]";
70ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  }
71ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu  return os;
72ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}
73ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu
74ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}  // namespace arm64
75ed8dd492e43cbaaa435c4892447072c84dbaf2dcSerban Constantinescu}  // namespace art
76