1166db04e259ca51838c311891598664deeed85adIan Rogers/*
2166db04e259ca51838c311891598664deeed85adIan Rogers * Copyright (C) 2012 The Android Open Source Project
3166db04e259ca51838c311891598664deeed85adIan Rogers *
4166db04e259ca51838c311891598664deeed85adIan Rogers * Licensed under the Apache License, Version 2.0 (the "License");
5166db04e259ca51838c311891598664deeed85adIan Rogers * you may not use this file except in compliance with the License.
6166db04e259ca51838c311891598664deeed85adIan Rogers * You may obtain a copy of the License at
7166db04e259ca51838c311891598664deeed85adIan Rogers *
8166db04e259ca51838c311891598664deeed85adIan Rogers *      http://www.apache.org/licenses/LICENSE-2.0
9166db04e259ca51838c311891598664deeed85adIan Rogers *
10166db04e259ca51838c311891598664deeed85adIan Rogers * Unless required by applicable law or agreed to in writing, software
11166db04e259ca51838c311891598664deeed85adIan Rogers * distributed under the License is distributed on an "AS IS" BASIS,
12166db04e259ca51838c311891598664deeed85adIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13166db04e259ca51838c311891598664deeed85adIan Rogers * See the License for the specific language governing permissions and
14166db04e259ca51838c311891598664deeed85adIan Rogers * limitations under the License.
15166db04e259ca51838c311891598664deeed85adIan Rogers */
16166db04e259ca51838c311891598664deeed85adIan Rogers
17166db04e259ca51838c311891598664deeed85adIan Rogers#ifndef ART_RUNTIME_ARCH_MIPS_REGISTERS_MIPS_H_
18166db04e259ca51838c311891598664deeed85adIan Rogers#define ART_RUNTIME_ARCH_MIPS_REGISTERS_MIPS_H_
19166db04e259ca51838c311891598664deeed85adIan Rogers
20166db04e259ca51838c311891598664deeed85adIan Rogers#include <iosfwd>
21166db04e259ca51838c311891598664deeed85adIan Rogers
22166db04e259ca51838c311891598664deeed85adIan Rogers#include "base/logging.h"
23166db04e259ca51838c311891598664deeed85adIan Rogers#include "base/macros.h"
24166db04e259ca51838c311891598664deeed85adIan Rogers#include "globals.h"
25166db04e259ca51838c311891598664deeed85adIan Rogers
26166db04e259ca51838c311891598664deeed85adIan Rogersnamespace art {
27166db04e259ca51838c311891598664deeed85adIan Rogersnamespace mips {
28166db04e259ca51838c311891598664deeed85adIan Rogers
29166db04e259ca51838c311891598664deeed85adIan Rogersenum Register {
30166db04e259ca51838c311891598664deeed85adIan Rogers  ZERO =  0,
31166db04e259ca51838c311891598664deeed85adIan Rogers  AT   =  1,  // Assembler temporary.
32166db04e259ca51838c311891598664deeed85adIan Rogers  V0   =  2,  // Values.
33166db04e259ca51838c311891598664deeed85adIan Rogers  V1   =  3,
34166db04e259ca51838c311891598664deeed85adIan Rogers  A0   =  4,  // Arguments.
35166db04e259ca51838c311891598664deeed85adIan Rogers  A1   =  5,
36166db04e259ca51838c311891598664deeed85adIan Rogers  A2   =  6,
37166db04e259ca51838c311891598664deeed85adIan Rogers  A3   =  7,
38166db04e259ca51838c311891598664deeed85adIan Rogers  T0   =  8,  // Temporaries.
39166db04e259ca51838c311891598664deeed85adIan Rogers  T1   =  9,
40166db04e259ca51838c311891598664deeed85adIan Rogers  T2   = 10,
41166db04e259ca51838c311891598664deeed85adIan Rogers  T3   = 11,
42166db04e259ca51838c311891598664deeed85adIan Rogers  T4   = 12,
43166db04e259ca51838c311891598664deeed85adIan Rogers  T5   = 13,
44166db04e259ca51838c311891598664deeed85adIan Rogers  T6   = 14,
45166db04e259ca51838c311891598664deeed85adIan Rogers  T7   = 15,
46166db04e259ca51838c311891598664deeed85adIan Rogers  S0   = 16,  // Saved values.
47166db04e259ca51838c311891598664deeed85adIan Rogers  S1   = 17,
48166db04e259ca51838c311891598664deeed85adIan Rogers  S2   = 18,
49166db04e259ca51838c311891598664deeed85adIan Rogers  S3   = 19,
50166db04e259ca51838c311891598664deeed85adIan Rogers  S4   = 20,
51166db04e259ca51838c311891598664deeed85adIan Rogers  S5   = 21,
52166db04e259ca51838c311891598664deeed85adIan Rogers  S6   = 22,
53166db04e259ca51838c311891598664deeed85adIan Rogers  S7   = 23,
54166db04e259ca51838c311891598664deeed85adIan Rogers  T8   = 24,  // More temporaries.
55166db04e259ca51838c311891598664deeed85adIan Rogers  T9   = 25,
56166db04e259ca51838c311891598664deeed85adIan Rogers  K0   = 26,  // Reserved for trap handler.
57166db04e259ca51838c311891598664deeed85adIan Rogers  K1   = 27,
58166db04e259ca51838c311891598664deeed85adIan Rogers  GP   = 28,  // Global pointer.
59166db04e259ca51838c311891598664deeed85adIan Rogers  SP   = 29,  // Stack pointer.
60166db04e259ca51838c311891598664deeed85adIan Rogers  FP   = 30,  // Saved value/frame pointer.
61166db04e259ca51838c311891598664deeed85adIan Rogers  RA   = 31,  // Return address.
62166db04e259ca51838c311891598664deeed85adIan Rogers  kNumberOfCoreRegisters = 32,
63166db04e259ca51838c311891598664deeed85adIan Rogers  kNoRegister = -1  // Signals an illegal register.
64166db04e259ca51838c311891598664deeed85adIan Rogers};
65166db04e259ca51838c311891598664deeed85adIan Rogersstd::ostream& operator<<(std::ostream& os, const Register& rhs);
66166db04e259ca51838c311891598664deeed85adIan Rogers
67166db04e259ca51838c311891598664deeed85adIan Rogers// Values for single-precision floating point registers.
68166db04e259ca51838c311891598664deeed85adIan Rogersenum FRegister {
69166db04e259ca51838c311891598664deeed85adIan Rogers  F0  =  0,
70166db04e259ca51838c311891598664deeed85adIan Rogers  F1  =  1,
71166db04e259ca51838c311891598664deeed85adIan Rogers  F2  =  2,
72166db04e259ca51838c311891598664deeed85adIan Rogers  F3  =  3,
73166db04e259ca51838c311891598664deeed85adIan Rogers  F4  =  4,
74166db04e259ca51838c311891598664deeed85adIan Rogers  F5  =  5,
75166db04e259ca51838c311891598664deeed85adIan Rogers  F6  =  6,
76166db04e259ca51838c311891598664deeed85adIan Rogers  F7  =  7,
77166db04e259ca51838c311891598664deeed85adIan Rogers  F8  =  8,
78166db04e259ca51838c311891598664deeed85adIan Rogers  F9  =  9,
79166db04e259ca51838c311891598664deeed85adIan Rogers  F10 = 10,
80166db04e259ca51838c311891598664deeed85adIan Rogers  F11 = 11,
81166db04e259ca51838c311891598664deeed85adIan Rogers  F12 = 12,
82166db04e259ca51838c311891598664deeed85adIan Rogers  F13 = 13,
83166db04e259ca51838c311891598664deeed85adIan Rogers  F14 = 14,
84166db04e259ca51838c311891598664deeed85adIan Rogers  F15 = 15,
85166db04e259ca51838c311891598664deeed85adIan Rogers  F16 = 16,
86166db04e259ca51838c311891598664deeed85adIan Rogers  F17 = 17,
87166db04e259ca51838c311891598664deeed85adIan Rogers  F18 = 18,
88166db04e259ca51838c311891598664deeed85adIan Rogers  F19 = 19,
89166db04e259ca51838c311891598664deeed85adIan Rogers  F20 = 20,
90166db04e259ca51838c311891598664deeed85adIan Rogers  F21 = 21,
91166db04e259ca51838c311891598664deeed85adIan Rogers  F22 = 22,
92166db04e259ca51838c311891598664deeed85adIan Rogers  F23 = 23,
93166db04e259ca51838c311891598664deeed85adIan Rogers  F24 = 24,
94166db04e259ca51838c311891598664deeed85adIan Rogers  F25 = 25,
95166db04e259ca51838c311891598664deeed85adIan Rogers  F26 = 26,
96166db04e259ca51838c311891598664deeed85adIan Rogers  F27 = 27,
97166db04e259ca51838c311891598664deeed85adIan Rogers  F28 = 28,
98166db04e259ca51838c311891598664deeed85adIan Rogers  F29 = 29,
99166db04e259ca51838c311891598664deeed85adIan Rogers  F30 = 30,
100166db04e259ca51838c311891598664deeed85adIan Rogers  F31 = 31,
101166db04e259ca51838c311891598664deeed85adIan Rogers  kNumberOfFRegisters = 32,
102166db04e259ca51838c311891598664deeed85adIan Rogers  kNoFRegister = -1,
103166db04e259ca51838c311891598664deeed85adIan Rogers};
104166db04e259ca51838c311891598664deeed85adIan Rogersstd::ostream& operator<<(std::ostream& os, const FRegister& rhs);
105166db04e259ca51838c311891598664deeed85adIan Rogers
106166db04e259ca51838c311891598664deeed85adIan Rogers}  // namespace mips
107166db04e259ca51838c311891598664deeed85adIan Rogers}  // namespace art
108166db04e259ca51838c311891598664deeed85adIan Rogers
109166db04e259ca51838c311891598664deeed85adIan Rogers#endif  // ART_RUNTIME_ARCH_MIPS_REGISTERS_MIPS_H_
110