xref: /aosp_15_r20/external/swiftshader/third_party/subzero/src/IceInstMIPS32.def (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker//===- subzero/src/IceInstMIPS32.def - X-Macros for MIPS insts --*- C++ -*-===//
2*03ce13f7SAndroid Build Coastguard Worker//
3*03ce13f7SAndroid Build Coastguard Worker//                        The Subzero Code Generator
4*03ce13f7SAndroid Build Coastguard Worker//
5*03ce13f7SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*03ce13f7SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*03ce13f7SAndroid Build Coastguard Worker//
8*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*03ce13f7SAndroid Build Coastguard Worker//
10*03ce13f7SAndroid Build Coastguard Worker// This file defines properties of MIPS32 instructions in the form of x-macros.
11*03ce13f7SAndroid Build Coastguard Worker//
12*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*03ce13f7SAndroid Build Coastguard Worker
14*03ce13f7SAndroid Build Coastguard Worker#ifndef SUBZERO_SRC_ICEINSTMIPS32_DEF
15*03ce13f7SAndroid Build Coastguard Worker#define SUBZERO_SRC_ICEINSTMIPS32_DEF
16*03ce13f7SAndroid Build Coastguard Worker
17*03ce13f7SAndroid Build Coastguard Worker// NOTE: PC and SP are not considered isInt, to avoid register allocating.
18*03ce13f7SAndroid Build Coastguard Worker// TODO(reed kotler). This needs to be scrubbed and is a placeholder to get
19*03ce13f7SAndroid Build Coastguard Worker// the Mips skeleton in.
20*03ce13f7SAndroid Build Coastguard Worker//
21*03ce13f7SAndroid Build Coastguard Worker// ALIASESn is a family of macros that we use to define register aliasing in
22*03ce13f7SAndroid Build Coastguard Worker// MIPS32. n indicates how many aliases are being provided to the macro. It
23*03ce13f7SAndroid Build Coastguard Worker// assumes the parameters are register names declared in a namespace/class
24*03ce13f7SAndroid Build Coastguard Worker// named RegMIPS32.
25*03ce13f7SAndroid Build Coastguard Worker#ifndef ALIASES1
26*03ce13f7SAndroid Build Coastguard Worker#define ALIASES1(r0)                                                           \
27*03ce13f7SAndroid Build Coastguard Worker    {RegMIPS32::r0}
28*03ce13f7SAndroid Build Coastguard Worker#define ALIASES2(r0, r1)                                                       \
29*03ce13f7SAndroid Build Coastguard Worker    {RegMIPS32::r0, RegMIPS32::r1}
30*03ce13f7SAndroid Build Coastguard Worker#define ALIASES3(r0, r1, r2)                                                   \
31*03ce13f7SAndroid Build Coastguard Worker    {RegMIPS32::r0, RegMIPS32::r1, RegMIPS32::r2}
32*03ce13f7SAndroid Build Coastguard Worker#define ALIASES4(r0, r1, r2, r3)                                               \
33*03ce13f7SAndroid Build Coastguard Worker    {RegMIPS32::r0, RegMIPS32::r1, RegMIPS32::r2, RegMIPS32::r3}
34*03ce13f7SAndroid Build Coastguard Worker#define ALIASES7(r0, r1, r2, r3, r4, r5, r6)                                   \
35*03ce13f7SAndroid Build Coastguard Worker    {RegMIPS32::r0, RegMIPS32::r1, RegMIPS32::r2, RegMIPS32::r3, RegMIPS32::r4,\
36*03ce13f7SAndroid Build Coastguard Worker     RegMIPS32::r5,RegMIPS32::r6}
37*03ce13f7SAndroid Build Coastguard Worker#endif
38*03ce13f7SAndroid Build Coastguard Worker
39*03ce13f7SAndroid Build Coastguard Worker#define REGMIPS32_GPR_TABLE                                                    \
40*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, scratch, preserved, stackptr, frameptr,                \
41*03ce13f7SAndroid Build Coastguard Worker     isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init */                 \
42*03ce13f7SAndroid Build Coastguard Worker  X(Reg_ZERO,     0,   "zero",  0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
43*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_ZERO))                                                        \
44*03ce13f7SAndroid Build Coastguard Worker  X(Reg_AT,       1,   "at",    0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
45*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_AT))                                                          \
46*03ce13f7SAndroid Build Coastguard Worker  X(Reg_V0,       2,   "v0",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
47*03ce13f7SAndroid Build Coastguard Worker     ALIASES2(Reg_V0, Reg_V0V1))                                               \
48*03ce13f7SAndroid Build Coastguard Worker  X(Reg_V1,       3,   "v1",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
49*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_V1, Reg_V0V1))                                                \
50*03ce13f7SAndroid Build Coastguard Worker  X(Reg_A0,       4,   "a0",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
51*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_A0, Reg_A0A1))                                                \
52*03ce13f7SAndroid Build Coastguard Worker  X(Reg_A1,       5,   "a1",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
53*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_A1, Reg_A0A1))                                                \
54*03ce13f7SAndroid Build Coastguard Worker  X(Reg_A2,       6,   "a2",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
55*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_A2, Reg_A2A3))                                                \
56*03ce13f7SAndroid Build Coastguard Worker  X(Reg_A3,       7,   "a3",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
57*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_A3, Reg_A2A3))                                                \
58*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T0,       8,   "t0",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
59*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T0, Reg_T0T1))                                                \
60*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T1,       9,   "t1",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
61*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T1, Reg_T0T1))                                                \
62*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T2,       10,  "t2",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
63*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T2, Reg_T2T3))                                                \
64*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T3,       11,  "t3",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
65*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T3, Reg_T2T3))                                                \
66*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T4,       12,  "t4",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
67*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T4, Reg_T4T5))                                                \
68*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T5,       13,  "t5",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
69*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T5, Reg_T4T5))                                                \
70*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T6,       14,  "t6",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
71*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T6, Reg_T6T7))                                                \
72*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T7,       15,  "t7",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
73*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T7, Reg_T6T7))                                                \
74*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S0,       16,  "s0",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
75*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S0, Reg_S0S1))                                                \
76*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S1,       17,  "s1",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
77*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S1, Reg_S0S1))                                                \
78*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S2,       18,  "s2",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
79*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S2, Reg_S2S3))                                                \
80*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S3,       19,  "s3",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
81*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S3, Reg_S2S3))                                                \
82*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S4,       20,  "s4",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
83*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S4, Reg_S4S5))                                                \
84*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S5,       21,  "s5",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
85*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S5, Reg_S4S5))                                                \
86*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S6,       22,  "s6",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
87*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S6, Reg_S6S7))                                                \
88*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S7,       23,  "s7",    0, 1, 0, 0, 1, 0, 0, 0, 0,                     \
89*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_S7, Reg_S6S7))                                                \
90*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T8,       24,  "t8",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
91*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T8, Reg_T8T9))                                                \
92*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T9,       25,  "t9",    1, 0, 0, 0, 1, 0, 0, 0, 0,                     \
93*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_T9, Reg_T8T9))                                                \
94*03ce13f7SAndroid Build Coastguard Worker  X(Reg_K0,       26,  "k0",    0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
95*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_K0))                                                          \
96*03ce13f7SAndroid Build Coastguard Worker  X(Reg_K1,       27,  "k1",    0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
97*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_K1))                                                          \
98*03ce13f7SAndroid Build Coastguard Worker  X(Reg_GP,       28,  "gp",    0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
99*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_GP))                                                          \
100*03ce13f7SAndroid Build Coastguard Worker  X(Reg_SP,       29,  "sp",    0, 0, 1, 0, 0, 0, 0, 0, 0,                     \
101*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_SP))                                                          \
102*03ce13f7SAndroid Build Coastguard Worker  X(Reg_FP,       30,  "fp",    0, 0, 0, 1, 0, 0, 0, 0, 0,                     \
103*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_FP))                                                          \
104*03ce13f7SAndroid Build Coastguard Worker  X(Reg_RA,       31,  "ra",    0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
105*03ce13f7SAndroid Build Coastguard Worker    ALIASES1(Reg_RA))                                                          \
106*03ce13f7SAndroid Build Coastguard Worker  X(Reg_LO,       0,   "lo",    0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
107*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_LO, Reg_LOHI))                                                \
108*03ce13f7SAndroid Build Coastguard Worker  X(Reg_HI,       0,   "hi",    0, 0, 0, 0, 0, 0, 0, 0, 0,                     \
109*03ce13f7SAndroid Build Coastguard Worker   ALIASES2(Reg_HI, Reg_LOHI))
110*03ce13f7SAndroid Build Coastguard Worker
111*03ce13f7SAndroid Build Coastguard Worker#define REGMIPS32_FPR_TABLE                                                    \
112*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, scratch, preserved, stackptr, frameptr,                \
113*03ce13f7SAndroid Build Coastguard Worker     isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init */                 \
114*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F0,       0,   "f0",    1,0,0,0, 0,0,1,0,0,                            \
115*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F0, Reg_F0F1))                                                \
116*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F1,       1,   "f1",    1,0,0,0, 0,0,1,0,0,                            \
117*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F1, Reg_F0F1))                                                \
118*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F2,       2,   "f2",    1,0,0,0, 0,0,1,0,0,                            \
119*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F2, Reg_F2F3))                                                \
120*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F3,       3,   "f3",    1,0,0,0, 0,0,1,0,0,                            \
121*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F3, Reg_F2F3))                                                \
122*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F4,       4,   "f4",    1,0,0,0, 0,0,1,0,0,                            \
123*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F4, Reg_F4F5))                                                \
124*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F5,       5,   "f5",    1,0,0,0, 0,0,1,0,0,                            \
125*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F5, Reg_F4F5))                                                \
126*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F6,       6,   "f6",    1,0,0,0, 0,0,1,0,0,                            \
127*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F6, Reg_F6F7))                                                \
128*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F7,       7,   "f7",    1,0,0,0, 0,0,1,0,0,                            \
129*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F7, Reg_F6F7))                                                \
130*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F8,       8,   "f8",    1,0,0,0, 0,0,1,0,0,                            \
131*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F8, Reg_F8F9))                                                \
132*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F9,       9,   "f9",    1,0,0,0, 0,0,1,0,0,                            \
133*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F9, Reg_F8F9))                                                \
134*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F10,      10,  "f10",   1,0,0,0, 0,0,1,0,0,                            \
135*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F10, Reg_F10F11))                                             \
136*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F11,      11,  "f11",   1,0,0,0, 0,0,1,0,0,                            \
137*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F11, Reg_F10F11))                                             \
138*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F12,      12,  "f12",   1,0,0,0, 0,0,1,0,0,                            \
139*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F12, Reg_F12F13))                                             \
140*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F13,      13,  "f13",   1,0,0,0, 0,0,1,0,0,                            \
141*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F13, Reg_F12F13))                                             \
142*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F14,      14,  "f14",   1,0,0,0, 0,0,1,0,0,                            \
143*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F14, Reg_F14F15))                                             \
144*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F15,      15,  "f15",   1,0,0,0, 0,0,1,0,0,                            \
145*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F15, Reg_F14F15))                                             \
146*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F16,      16,  "f16",   1,0,0,0, 0,0,1,0,0,                            \
147*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F16, Reg_F16F17))                                             \
148*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F17,      17,  "f17",   1,0,0,0, 0,0,1,0,0,                            \
149*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F17, Reg_F16F17))                                             \
150*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F18,      18,  "f18",   1,0,0,0, 0,0,1,0,0,                            \
151*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F18, Reg_F18F19))                                             \
152*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F19,      19,  "f19",   1,0,0,0, 0,0,1,0,0,                            \
153*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F19, Reg_F18F19))                                             \
154*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F20,      20,  "f20",   0,1,0,0, 0,0,1,0,0,                            \
155*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F20, Reg_F20F21))                                             \
156*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F21,      21,  "f21",   0,1,0,0, 0,0,1,0,0,                            \
157*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F21, Reg_F20F21))                                             \
158*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F22,      22,  "f22",   0,1,0,0, 0,0,1,0,0,                            \
159*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F22, Reg_F22F23))                                             \
160*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F23,      23,  "f23",   0,1,0,0, 0,0,1,0,0,                            \
161*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F23, Reg_F22F23))                                             \
162*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F24,      24,  "f24",   0,1,0,0, 0,0,1,0,0,                            \
163*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F24, Reg_F24F25))                                             \
164*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F25,      25,  "f25",   0,1,0,0, 0,0,1,0,0,                            \
165*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F25, Reg_F24F25))                                             \
166*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F26,      26,  "f26",   0,1,0,0, 0,0,1,0,0,                            \
167*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F26, Reg_F26F27))                                             \
168*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F27,      27,  "f27",   0,1,0,0, 0,0,1,0,0,                            \
169*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F27, Reg_F26F27))                                             \
170*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F28,      28,  "f28",   0,1,0,0, 0,0,1,0,0,                            \
171*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F28, Reg_F28F29))                                             \
172*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F29,      29,  "f29",   0,1,0,0, 0,0,1,0,0,                            \
173*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F29, Reg_F28F29))                                             \
174*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F30,      30,  "f30",   0,1,0,0, 0,0,1,0,0,                            \
175*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F30, Reg_F30F31))                                             \
176*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F31,      31,  "f31",   0,1,0,0, 0,0,1,0,0,                            \
177*03ce13f7SAndroid Build Coastguard Worker    ALIASES2(Reg_F31, Reg_F30F31))
178*03ce13f7SAndroid Build Coastguard Worker
179*03ce13f7SAndroid Build Coastguard Worker//#define X(val, encode, name, scratch, preserved, stackptr, frameptr,
180*03ce13f7SAndroid Build Coastguard Worker//          isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init)
181*03ce13f7SAndroid Build Coastguard Worker// The following defines a table with the available pairs of consecutive i32
182*03ce13f7SAndroid Build Coastguard Worker// GPRs starting at an even GPR that is not r14. Those are used to hold i64
183*03ce13f7SAndroid Build Coastguard Worker// variables for atomic memory operations. If one of the registers in the pair
184*03ce13f7SAndroid Build Coastguard Worker// is preserved, then we mark the whole pair as preserved to help the register
185*03ce13f7SAndroid Build Coastguard Worker// allocator.
186*03ce13f7SAndroid Build Coastguard Worker#define REGMIPS32_I64PAIR_TABLE                                                \
187*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, scratch, preserved, stackptr, frameptr,                \
188*03ce13f7SAndroid Build Coastguard Worker     isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init */                 \
189*03ce13f7SAndroid Build Coastguard Worker  X(Reg_V0V1,  0, "v0, v1",   1, 0, 0, 0, 0, 1, 0, 0, 0,                       \
190*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_V0, Reg_V1, Reg_V0V1))                                        \
191*03ce13f7SAndroid Build Coastguard Worker  X(Reg_A0A1,  2, "a0, a1",   1, 0, 0, 0, 0, 1, 0, 0, 0,                       \
192*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_A0, Reg_A1, Reg_A0A1))                                        \
193*03ce13f7SAndroid Build Coastguard Worker  X(Reg_A2A3,  4, "a2, a3",   1, 0, 0, 0, 0, 1, 0, 0, 0,                       \
194*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_A2, Reg_A3, Reg_A2A3))                                        \
195*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T0T1,  8, "t0, t1",   1, 0, 0, 0, 0, 1, 0, 0, 0,                       \
196*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_T0, Reg_T1, Reg_T0T1))                                        \
197*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T2T3,  10, "t2, t3",   1, 0, 0, 0, 0, 1, 0, 0, 0,                      \
198*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_T2, Reg_T3, Reg_T2T3))                                        \
199*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T4T5,  12,"t4, t5",   1, 0, 0, 0, 0, 1, 0, 0, 0,                       \
200*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_T4, Reg_T5, Reg_T4T5))                                        \
201*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T6T7,  14, "t6, t7",   1, 0, 0, 0, 0, 1, 0, 0, 0,                      \
202*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_T6, Reg_T7, Reg_T6T7))                                        \
203*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S0S1,  16, "s0, s1",   0, 1, 0, 0, 0, 1, 0, 0, 0,                      \
204*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_S0, Reg_S1, Reg_S0S1))                                        \
205*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S2S3,  18, "s2, s3",   0, 1, 0, 0, 0, 1, 0, 0, 0,                      \
206*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_S2, Reg_S3, Reg_S2S3))                                        \
207*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S4S5,  20, "s4, s5",   0, 1, 0, 0, 0, 1, 0, 0, 0,                      \
208*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_S4, Reg_S5, Reg_S4S5))                                        \
209*03ce13f7SAndroid Build Coastguard Worker  X(Reg_S6S7,  22, "s6, s7",   0, 1, 0, 0, 0, 1, 0, 0, 0,                      \
210*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_S6, Reg_S7, Reg_S6S7))                                        \
211*03ce13f7SAndroid Build Coastguard Worker  X(Reg_T8T9,  26, "t8, t9",   1, 0, 0, 0, 0, 1, 0, 0, 0,                      \
212*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_T8, Reg_T9, Reg_T8T9))                                        \
213*03ce13f7SAndroid Build Coastguard Worker  X(Reg_LOHI,  0, "lo, hi",    0, 0, 0, 0, 0, 0, 0, 0, 0,                      \
214*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_LO, Reg_HI, Reg_LOHI))                                        \
215*03ce13f7SAndroid Build Coastguard Worker//#define X(val, encode, name, scratch, preserved, stackptr, frameptr,
216*03ce13f7SAndroid Build Coastguard Worker//          isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init)
217*03ce13f7SAndroid Build Coastguard Worker
218*03ce13f7SAndroid Build Coastguard Worker#define REGMIPS32_F64PAIR_TABLE                                                \
219*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, scratch, preserved, stackptr, frameptr,                \
220*03ce13f7SAndroid Build Coastguard Worker     isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init */                 \
221*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F0F1,   0,  "f0",       1,0,0,0, 0,0,0,1,0,                            \
222*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F0, Reg_F1, Reg_F0F1))                                        \
223*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F2F3,   2,  "f2",       1,0,0,0, 0,0,0,1,0,                            \
224*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F2, Reg_F3, Reg_F2F3))                                        \
225*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F4F5,   4,  "f4",       1,0,0,0, 0,0,0,1,0,                            \
226*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F4, Reg_F5, Reg_F4F5))                                        \
227*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F6F7,   6,  "f6",       1,0,0,0, 0,0,0,1,0,                            \
228*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F6, Reg_F7, Reg_F6F7))                                        \
229*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F8F9,   8,  "f8",       1,0,0,0, 0,0,0,1,0,                            \
230*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F8, Reg_F9, Reg_F8F9))                                        \
231*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F10F11, 10, "f10",      1,0,0,0, 0,0,0,1,0,                            \
232*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F10, Reg_F11, Reg_F10F11))                                    \
233*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F12F13, 12, "f12",      1,0,0,0, 0,0,0,1,0,                            \
234*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F12, Reg_F13, Reg_F12F13))                                    \
235*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F14F15, 14, "f14",      1,0,0,0, 0,0,0,1,0,                            \
236*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F14, Reg_F15, Reg_F14F15))                                    \
237*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F16F17, 16, "f16",      1,0,0,0, 0,0,0,1,0,                            \
238*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F16, Reg_F17, Reg_F16F17))                                    \
239*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F18F19, 18, "f18",      1,0,0,0, 0,0,0,1,0,                            \
240*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F18, Reg_F19, Reg_F18F19))                                    \
241*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F20F21, 20, "f20",      0,1,0,0, 0,0,0,1,0,                            \
242*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F20, Reg_F21, Reg_F20F21))                                    \
243*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F22F23, 22, "f22",      0,1,0,0, 0,0,0,1,0,                            \
244*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F22, Reg_F23, Reg_F22F23))                                    \
245*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F24F25, 24, "f24",      0,1,0,0, 0,0,0,1,0,                            \
246*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F24, Reg_F25, Reg_F24F25))                                    \
247*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F26F27, 26, "f26",      0,1,0,0, 0,0,0,1,0,                            \
248*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F26, Reg_F27, Reg_F26F27))                                    \
249*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F28F29, 28, "f28",      0,1,0,0, 0,0,0,1,0,                            \
250*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F28, Reg_F29, Reg_F28F29))                                    \
251*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F30F31, 30, "f30",      0,1,0,0, 0,0,0,1,0,                            \
252*03ce13f7SAndroid Build Coastguard Worker    ALIASES3(Reg_F30, Reg_F31, Reg_F30F31))
253*03ce13f7SAndroid Build Coastguard Worker
254*03ce13f7SAndroid Build Coastguard Worker// We also provide a combined table, so that there is a namespace where
255*03ce13f7SAndroid Build Coastguard Worker// all of the registers are considered and have distinct numberings.
256*03ce13f7SAndroid Build Coastguard Worker// This is in contrast to the above, where the "encode" is based on how
257*03ce13f7SAndroid Build Coastguard Worker// the register numbers will be encoded in binaries and values can overlap.
258*03ce13f7SAndroid Build Coastguard Worker#define REGMIPS32_TABLE                                                        \
259*03ce13f7SAndroid Build Coastguard Worker  /* val, encode, name, scratch, preserved, stackptr, frameptr, isInt,         \
260*03ce13f7SAndroid Build Coastguard Worker     isFP32, isFP64, isVec128, alias_init */                                   \
261*03ce13f7SAndroid Build Coastguard Worker  REGMIPS32_GPR_TABLE                                                          \
262*03ce13f7SAndroid Build Coastguard Worker  REGMIPS32_FPR_TABLE                                                          \
263*03ce13f7SAndroid Build Coastguard Worker  REGMIPS32_I64PAIR_TABLE                                                      \
264*03ce13f7SAndroid Build Coastguard Worker  REGMIPS32_F64PAIR_TABLE
265*03ce13f7SAndroid Build Coastguard Worker
266*03ce13f7SAndroid Build Coastguard Worker//#define X(val, encode, name, scratch, preserved, stackptr, frameptr,
267*03ce13f7SAndroid Build Coastguard Worker//          isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init)
268*03ce13f7SAndroid Build Coastguard Worker#define REGMIPS32_TABLE_BOUNDS                                                 \
269*03ce13f7SAndroid Build Coastguard Worker  /* val, init */                                                              \
270*03ce13f7SAndroid Build Coastguard Worker  X(Reg_GPR_First, = Reg_ZERO)                                                 \
271*03ce13f7SAndroid Build Coastguard Worker  X(Reg_GPR_Last,  = Reg_HI)                                                   \
272*03ce13f7SAndroid Build Coastguard Worker  X(Reg_FPR_First, = Reg_F0)                                                   \
273*03ce13f7SAndroid Build Coastguard Worker  X(Reg_FPR_Last,  = Reg_F31)                                                  \
274*03ce13f7SAndroid Build Coastguard Worker  X(Reg_I64PAIR_First, = Reg_V0V1)                                             \
275*03ce13f7SAndroid Build Coastguard Worker  X(Reg_I64PAIR_Last, = Reg_LOHI)                                              \
276*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F64PAIR_First, = Reg_F0F1)                                             \
277*03ce13f7SAndroid Build Coastguard Worker  X(Reg_F64PAIR_Last, = Reg_F30F31)                                            \
278*03ce13f7SAndroid Build Coastguard Worker//define X(val, init)
279*03ce13f7SAndroid Build Coastguard Worker
280*03ce13f7SAndroid Build Coastguard Worker#define ICEINSTMIPS32COND_TABLE                                                \
281*03ce13f7SAndroid Build Coastguard Worker  /* enum value, opposite, emit */                                             \
282*03ce13f7SAndroid Build Coastguard Worker  X(EQ,    NE,    "eq")  /* equal */                                           \
283*03ce13f7SAndroid Build Coastguard Worker  X(NE,    EQ,    "ne")  /* not equal */                                       \
284*03ce13f7SAndroid Build Coastguard Worker  X(EQZ,   NEZ,   "eqz") /* signed equal to zero */                            \
285*03ce13f7SAndroid Build Coastguard Worker  X(NEZ,   EQZ,   "nez") /* signed not equal to zero */                        \
286*03ce13f7SAndroid Build Coastguard Worker  X(GEZ,   LTZ,   "gez") /* signed greater than or equal to zero */            \
287*03ce13f7SAndroid Build Coastguard Worker  X(LTZ,   GEZ,   "ltz") /* signed less than to zero */                        \
288*03ce13f7SAndroid Build Coastguard Worker  X(GTZ,   LEZ,   "gtz") /* signed greater than to zero */                     \
289*03ce13f7SAndroid Build Coastguard Worker  X(LEZ,   GTZ,   "lez") /* signed less than or equal to zero */               \
290*03ce13f7SAndroid Build Coastguard Worker  X(AL,    kNone, "")    /* always (unconditional) */                          \
291*03ce13f7SAndroid Build Coastguard Worker  X(kNone, kNone, "??")  /* special condition / none */
292*03ce13f7SAndroid Build Coastguard Worker//#define X(tag, opp, emit)
293*03ce13f7SAndroid Build Coastguard Worker
294*03ce13f7SAndroid Build Coastguard Worker#endif // SUBZERO_SRC_ICEINSTMIPS32_DEF
295