xref: /nrf52832-nimble/rt-thread/libcpu/mips/common/mips_def.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * File      : mips_def.h
3*10465441SEvalZero  * This file is part of RT-Thread RTOS
4*10465441SEvalZero  * COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team
5*10465441SEvalZero  *
6*10465441SEvalZero  *  This program is free software; you can redistribute it and/or modify
7*10465441SEvalZero  *  it under the terms of the GNU General Public License as published by
8*10465441SEvalZero  *  the Free Software Foundation; either version 2 of the License, or
9*10465441SEvalZero  *  (at your option) any later version.
10*10465441SEvalZero  *
11*10465441SEvalZero  *  This program is distributed in the hope that it will be useful,
12*10465441SEvalZero  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*10465441SEvalZero  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*10465441SEvalZero  *  GNU General Public License for more details.
15*10465441SEvalZero  *
16*10465441SEvalZero  *  You should have received a copy of the GNU General Public License along
17*10465441SEvalZero  *  with this program; if not, write to the Free Software Foundation, Inc.,
18*10465441SEvalZero  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*10465441SEvalZero  *
20*10465441SEvalZero  * Change Logs:
21*10465441SEvalZero  * Date           Author       Notes
22*10465441SEvalZero  * 2016��9��7��     Urey         the first version
23*10465441SEvalZero  */
24*10465441SEvalZero 
25*10465441SEvalZero #ifndef _COMMON_MIPS_DEF_H_
26*10465441SEvalZero #define _COMMON_MIPS_DEF_H_
27*10465441SEvalZero 
28*10465441SEvalZero 
29*10465441SEvalZero /*
30*10465441SEvalZero  ************************************************************************
31*10465441SEvalZero  *                I N S T R U C T I O N   F O R M A T S                 *
32*10465441SEvalZero  ************************************************************************
33*10465441SEvalZero  *
34*10465441SEvalZero  * The following definitions describe each field in an instruction.  There
35*10465441SEvalZero  * is one diagram for each type of instruction, with field definitions
36*10465441SEvalZero  * following the diagram for that instruction.  Note that if a field of
37*10465441SEvalZero  * the same name and position is defined in an earlier diagram, it is
38*10465441SEvalZero  * not defined again in the subsequent diagram.  Only new fields are
39*10465441SEvalZero  * defined for each diagram.
40*10465441SEvalZero  *
41*10465441SEvalZero  * R-Type (operate)
42*10465441SEvalZero  *
43*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
44*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
45*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46*10465441SEvalZero  * |           |   rs    |   rt    |   rd    |   sa    |           |
47*10465441SEvalZero  * |   Opcode  |         |         |       Tcode       |   func    |
48*10465441SEvalZero  * |           |                  Bcode                |     | sel |
49*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50*10465441SEvalZero  */
51*10465441SEvalZero 
52*10465441SEvalZero #define S_InstnOpcode		26
53*10465441SEvalZero #define M_InstnOpcode		(0x3f << S_InstnOpcode)
54*10465441SEvalZero #define S_InstnRS			21
55*10465441SEvalZero #define M_InstnRS			(0x1f << S_InstnRS)
56*10465441SEvalZero #define S_InstnRT			16
57*10465441SEvalZero #define M_InstnRT			(0x1f << S_InstnRT)
58*10465441SEvalZero #define S_InstnRD			11
59*10465441SEvalZero #define M_InstnRD			(0x1f << S_InstnRD)
60*10465441SEvalZero #define S_InstnSA			6
61*10465441SEvalZero #define M_InstnSA			(0x1f << S_InstnSA)
62*10465441SEvalZero #define S_InstnTcode		6
63*10465441SEvalZero #define M_InstnTcode		(0x3ff << S_InstnTcode)
64*10465441SEvalZero #define S_InstnBcode		6
65*10465441SEvalZero #define M_InstnBcode		(0xfffff << S_InstnBcode)
66*10465441SEvalZero #define S_InstnFunc		0
67*10465441SEvalZero #define M_InstnFunc		(0x3f << S_InstnFunc)
68*10465441SEvalZero #define S_InstnSel			0
69*10465441SEvalZero #define M_InstnSel			(0x7 << S_InstnSel)
70*10465441SEvalZero 
71*10465441SEvalZero /*
72*10465441SEvalZero  * I-Type (load, store, branch, immediate)
73*10465441SEvalZero  *
74*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
75*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
76*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
77*10465441SEvalZero  * |   Opcode  |   rs    |   rt    |             Offset            |
78*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
79*10465441SEvalZero  */
80*10465441SEvalZero 
81*10465441SEvalZero #define S_InstnOffset		0
82*10465441SEvalZero #define M_InstnOffset		(0xffff << S_InstnOffset)
83*10465441SEvalZero 
84*10465441SEvalZero /*
85*10465441SEvalZero  * I-Type (pref)
86*10465441SEvalZero  *
87*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
88*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
89*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
90*10465441SEvalZero  * |   Opcode  |   rs    |  hint   |             Offset            |
91*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
92*10465441SEvalZero  */
93*10465441SEvalZero 
94*10465441SEvalZero #define S_InstnHint		S_InstnRT
95*10465441SEvalZero #define M_InstnHint		M_InstnRT
96*10465441SEvalZero 
97*10465441SEvalZero /*
98*10465441SEvalZero  * J-Type (jump)
99*10465441SEvalZero  *
100*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
101*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
102*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
103*10465441SEvalZero  * |   Opcode  |                    JIndex                         |
104*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
105*10465441SEvalZero  */
106*10465441SEvalZero 
107*10465441SEvalZero #define S_InstnJIndex		0
108*10465441SEvalZero #define M_InstnJIndex		(0x03ffffff << S_InstnJIndex)
109*10465441SEvalZero 
110*10465441SEvalZero /*
111*10465441SEvalZero  * FP R-Type (operate)
112*10465441SEvalZero  *
113*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
114*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
115*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
116*10465441SEvalZero  * |   Opcode  |   fmt   |   ft    |   fs    |   fd    |   func    |
117*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
118*10465441SEvalZero  */
119*10465441SEvalZero 
120*10465441SEvalZero #define S_InstnFmt		S_InstnRS
121*10465441SEvalZero #define M_InstnFmt		M_InstnRS
122*10465441SEvalZero #define S_InstnFT		S_InstnRT
123*10465441SEvalZero #define M_InstnFT		M_InstnRT
124*10465441SEvalZero #define S_InstnFS		S_InstnRD
125*10465441SEvalZero #define M_InstnFS		M_InstnRD
126*10465441SEvalZero #define S_InstnFD		S_InstnSA
127*10465441SEvalZero #define M_InstnFD		M_InstnSA
128*10465441SEvalZero 
129*10465441SEvalZero /*
130*10465441SEvalZero  * FP R-Type (cpu <-> cpu data movement))
131*10465441SEvalZero  *
132*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
133*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
134*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
135*10465441SEvalZero  * |   Opcode  |   sub   |   rt    |   fs    |          0          |
136*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
137*10465441SEvalZero  */
138*10465441SEvalZero 
139*10465441SEvalZero #define S_InstnSub		S_InstnRS
140*10465441SEvalZero #define M_InstnSub		M_InstnRS
141*10465441SEvalZero 
142*10465441SEvalZero /*
143*10465441SEvalZero  * FP R-Type (compare)
144*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
145*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
146*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
147*10465441SEvalZero  * |           |         |         |         |     | |C|           |
148*10465441SEvalZero  * |   Opcode  |   fmt   |   ft    |   fs    |  cc |0|A|   func    |
149*10465441SEvalZero  * |           |         |         |         |     | |B|           |
150*10465441SEvalZero  * |           |         |         |         |     | |S|           |
151*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
152*10465441SEvalZero  */
153*10465441SEvalZero 
154*10465441SEvalZero #define S_InstnCCcmp		8
155*10465441SEvalZero #define M_InstnCCcmp		(0x7 << S_InstnCCcmp)
156*10465441SEvalZero #define S_InstnCABS		6
157*10465441SEvalZero #define M_InstnCABS		(0x1 << S_InstnCABS)
158*10465441SEvalZero 
159*10465441SEvalZero /*
160*10465441SEvalZero  * FP R-Type (FPR conditional move on FP cc)
161*10465441SEvalZero  *
162*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
163*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
164*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
165*10465441SEvalZero  * |   Opcode  |   fmt   |  cc |n|t|   fs    |   fd    |   func    |
166*10465441SEvalZero  * |           |         |     |d|f|         |         |           |
167*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
168*10465441SEvalZero  */
169*10465441SEvalZero 
170*10465441SEvalZero #define S_InstnCC		18
171*10465441SEvalZero #define M_InstnCC		(0x7 << S_InstnCC)
172*10465441SEvalZero #define S_InstnND		17
173*10465441SEvalZero #define M_InstnND		(0x1 << S_InstnND)
174*10465441SEvalZero #define S_InstnTF		16
175*10465441SEvalZero #define M_InstnTF		(0x1 << S_InstnTF)
176*10465441SEvalZero 
177*10465441SEvalZero /*
178*10465441SEvalZero  * FP R-Type (3-operand operate)
179*10465441SEvalZero  *
180*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
181*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
182*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
183*10465441SEvalZero  * |   Opcode  |   fr    |   ft    |   fs    |   fd    | op4 | fmt3|
184*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
185*10465441SEvalZero  */
186*10465441SEvalZero 
187*10465441SEvalZero #define S_InstnFR		S_InstnRS
188*10465441SEvalZero #define M_InstnFR		M_InstnRS
189*10465441SEvalZero #define S_InstnOp4		3
190*10465441SEvalZero #define M_InstnOp4		(0x7 << S_InstnOp4)
191*10465441SEvalZero #define S_InstnFmt3		0
192*10465441SEvalZero #define M_InstnFmt3		(0x7 << S_InstnFmt3)
193*10465441SEvalZero 
194*10465441SEvalZero /*
195*10465441SEvalZero  * FP R-Type (Indexed load, store)
196*10465441SEvalZero  *
197*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
198*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
199*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
200*10465441SEvalZero  * |   Opcode  |   rs    |   rt    |   0     |   fd    |   func    |
201*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
202*10465441SEvalZero  */
203*10465441SEvalZero /*
204*10465441SEvalZero  * FP R-Type (prefx)
205*10465441SEvalZero  *
206*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
207*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
208*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
209*10465441SEvalZero  * |   Opcode  |   rs    |   rt    |  hint   |    0    |   func    |
210*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
211*10465441SEvalZero  */
212*10465441SEvalZero 
213*10465441SEvalZero #define S_InstnHintX		S_InstnRD
214*10465441SEvalZero #define M_InstnHintX		M_InstnRD
215*10465441SEvalZero 
216*10465441SEvalZero /*
217*10465441SEvalZero  * FP R-Type (GPR conditional move on FP cc)
218*10465441SEvalZero  *
219*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
220*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
221*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
222*10465441SEvalZero  * |   Opcode  |    rs   |  cc |n|t|   rd    |    0    |   func    |
223*10465441SEvalZero  * |           |         |     |d|f|         |         |           |
224*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
225*10465441SEvalZero  */
226*10465441SEvalZero 
227*10465441SEvalZero /*
228*10465441SEvalZero  * FP I-Type (load, store)
229*10465441SEvalZero  *
230*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
231*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
232*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
233*10465441SEvalZero  * |   Opcode  |   rs    |    ft   |           Offset              |
234*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
235*10465441SEvalZero  */
236*10465441SEvalZero 
237*10465441SEvalZero /*
238*10465441SEvalZero  * FP I-Type (branch)
239*10465441SEvalZero  *
240*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
241*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
242*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
243*10465441SEvalZero  * |   Opcode  |   fmt   |  cc |n|t|           Offset              |
244*10465441SEvalZero  * |           |         |     |d|f|                               |
245*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
246*10465441SEvalZero  */
247*10465441SEvalZero 
248*10465441SEvalZero 
249*10465441SEvalZero /*
250*10465441SEvalZero  *************************************************************************
251*10465441SEvalZero  *         V I R T U A L   A D D R E S S   D E F I N I T I O N S         *
252*10465441SEvalZero  *************************************************************************
253*10465441SEvalZero  */
254*10465441SEvalZero 
255*10465441SEvalZero #ifdef MIPSADDR64
256*10465441SEvalZero #define A_K0BASE		UNS64Const(0xffffffff80000000)
257*10465441SEvalZero #define A_K1BASE		UNS64Const(0xffffffffa0000000)
258*10465441SEvalZero #define A_K2BASE		UNS64Const(0xffffffffc0000000)
259*10465441SEvalZero #define A_K3BASE		UNS64Const(0xffffffffe0000000)
260*10465441SEvalZero #define A_REGION		UNS64Const(0xc000000000000000)
261*10465441SEvalZero #define A_XKPHYS_ATTR		UNS64Const(0x3800000000000000)
262*10465441SEvalZero #else
263*10465441SEvalZero #define A_K0BASE		0x80000000
264*10465441SEvalZero #define A_K1BASE		0xa0000000
265*10465441SEvalZero #define A_K2BASE		0xc0000000
266*10465441SEvalZero #define A_K3BASE		0xe0000000
267*10465441SEvalZero #endif
268*10465441SEvalZero #define M_KMAPPED		0x40000000		/* KnSEG address is mapped if bit is one */
269*10465441SEvalZero 
270*10465441SEvalZero 
271*10465441SEvalZero #ifdef MIPS_Model64
272*10465441SEvalZero 
273*10465441SEvalZero #define S_VMAP64                62
274*10465441SEvalZero #define M_VMAP64                UNS64Const(0xc000000000000000)
275*10465441SEvalZero 
276*10465441SEvalZero #define K_VMode11               3
277*10465441SEvalZero #define K_VMode10               2
278*10465441SEvalZero #define K_VMode01               1
279*10465441SEvalZero #define K_VMode00               0
280*10465441SEvalZero 
281*10465441SEvalZero #define S_KSEG3                 29
282*10465441SEvalZero #define M_KSEG3                 (0x7 << S_KSEG3)
283*10465441SEvalZero #define K_KSEG3                 7
284*10465441SEvalZero 
285*10465441SEvalZero #define S_SSEG                  29
286*10465441SEvalZero #define M_SSEG                  (0x7 << S_KSEG3)
287*10465441SEvalZero #define K_SSEG                  6
288*10465441SEvalZero 
289*10465441SEvalZero #define S_KSSEG                 29
290*10465441SEvalZero #define M_KSSEG                 (0x7 << S_KSEG3)
291*10465441SEvalZero #define K_KSSEG                 6
292*10465441SEvalZero 
293*10465441SEvalZero #define S_KSEG1                 29
294*10465441SEvalZero #define M_KSEG1                 (0x7 << S_KSEG3)
295*10465441SEvalZero #define K_KSEG1                 5
296*10465441SEvalZero 
297*10465441SEvalZero #define S_KSEG0                 29
298*10465441SEvalZero #define M_KSEG0                 (0x7 << S_KSEG3)
299*10465441SEvalZero #define K_KSEG0                 4
300*10465441SEvalZero 
301*10465441SEvalZero #define S_XKSEG                 29
302*10465441SEvalZero #define M_XKSEG                 (0x7 << S_KSEG3)
303*10465441SEvalZero #define K_XKSEG                 3
304*10465441SEvalZero 
305*10465441SEvalZero #define S_USEG                  31
306*10465441SEvalZero #define M_USEG                  (0x1 << S_USEG)
307*10465441SEvalZero #define K_USEG                  0
308*10465441SEvalZero 
309*10465441SEvalZero #define S_EjtagProbeMem         20
310*10465441SEvalZero #define M_EjtagProbeMem         (0x1 << S_EjtagProbeMem)
311*10465441SEvalZero #define K_EjtagProbeMem         0
312*10465441SEvalZero 
313*10465441SEvalZero 
314*10465441SEvalZero 
315*10465441SEvalZero #else
316*10465441SEvalZero 
317*10465441SEvalZero #define S_KSEG3                 29
318*10465441SEvalZero #define M_KSEG3                 (0x7 << S_KSEG3)
319*10465441SEvalZero #define K_KSEG3                 7
320*10465441SEvalZero 
321*10465441SEvalZero #define S_KSSEG                 29
322*10465441SEvalZero #define M_KSSEG                 (0x7 << S_KSSEG)
323*10465441SEvalZero #define K_KSSEG                 6
324*10465441SEvalZero 
325*10465441SEvalZero #define S_SSEG                  29
326*10465441SEvalZero #define M_SSEG                  (0x7 << S_SSEG)
327*10465441SEvalZero #define K_SSEG                  6
328*10465441SEvalZero 
329*10465441SEvalZero #define S_KSEG1                 29
330*10465441SEvalZero #define M_KSEG1                 (0x7 << S_KSEG1)
331*10465441SEvalZero #define K_KSEG1                 5
332*10465441SEvalZero 
333*10465441SEvalZero #define S_KSEG0                 29
334*10465441SEvalZero #define M_KSEG0                 (0x7 << S_KSEG0)
335*10465441SEvalZero #define K_KSEG0                 4
336*10465441SEvalZero 
337*10465441SEvalZero #define S_KUSEG                 31
338*10465441SEvalZero #define M_KUSEG                 (0x1 << S_KUSEG)
339*10465441SEvalZero #define K_KUSEG                 0
340*10465441SEvalZero 
341*10465441SEvalZero #define S_SUSEG                 31
342*10465441SEvalZero #define M_SUSEG                 (0x1 << S_SUSEG)
343*10465441SEvalZero #define K_SUSEG                 0
344*10465441SEvalZero 
345*10465441SEvalZero #define S_USEG                  31
346*10465441SEvalZero #define M_USEG                  (0x1 << S_USEG)
347*10465441SEvalZero #define K_USEG                  0
348*10465441SEvalZero 
349*10465441SEvalZero #define K_EjtagLower            0xff200000
350*10465441SEvalZero #define K_EjtagUpper            0xff3fffff
351*10465441SEvalZero 
352*10465441SEvalZero #define S_EjtagProbeMem         20
353*10465441SEvalZero #define M_EjtagProbeMem         (0x1 << S_EjtagProbeMem)
354*10465441SEvalZero #define K_EjtagProbeMem         0
355*10465441SEvalZero 
356*10465441SEvalZero #endif
357*10465441SEvalZero 
358*10465441SEvalZero 
359*10465441SEvalZero 
360*10465441SEvalZero /*
361*10465441SEvalZero  *************************************************************************
362*10465441SEvalZero  *   C A C H E   I N S T R U C T I O N   O P E R A T I O N   C O D E S   *
363*10465441SEvalZero  *************************************************************************
364*10465441SEvalZero  */
365*10465441SEvalZero 
366*10465441SEvalZero /*
367*10465441SEvalZero  * Cache encodings
368*10465441SEvalZero  */
369*10465441SEvalZero #define K_CachePriI		0			/* Primary Icache */
370*10465441SEvalZero #define K_CachePriD		1			/* Primary Dcache */
371*10465441SEvalZero #define K_CachePriU		1			/* Unified primary */
372*10465441SEvalZero #define K_CacheTerU		2			/* Unified Tertiary */
373*10465441SEvalZero #define K_CacheSecU		3			/* Unified secondary */
374*10465441SEvalZero 
375*10465441SEvalZero 
376*10465441SEvalZero /*
377*10465441SEvalZero  * Function encodings
378*10465441SEvalZero  */
379*10465441SEvalZero #define S_CacheFunc		2			/* Amount to shift function encoding within 5-bit field */
380*10465441SEvalZero #define K_CacheIndexInv		0			/* Index invalidate */
381*10465441SEvalZero #define K_CacheIndexWBInv       0			/* Index writeback invalidate */
382*10465441SEvalZero #define K_CacheIndexLdTag	1			/* Index load tag */
383*10465441SEvalZero #define K_CacheIndexStTag	2			/* Index store tag */
384*10465441SEvalZero #define K_CacheHitInv		4			/* Hit Invalidate */
385*10465441SEvalZero #define K_CacheFill		5			/* Fill (Icache only) */
386*10465441SEvalZero #define K_CacheHitWBInv		5			/* Hit writeback invalidate */
387*10465441SEvalZero #define K_CacheHitWB		6			/* Hit writeback */
388*10465441SEvalZero #define K_CacheFetchLock	7			/* Fetch and lock */
389*10465441SEvalZero 
390*10465441SEvalZero #define ICIndexInv		((K_CacheIndexInv << S_CacheFunc) | K_CachePriI)
391*10465441SEvalZero #define DCIndexWBInv		((K_CacheIndexWBInv << S_CacheFunc) | K_CachePriD)
392*10465441SEvalZero #define DCIndexInv		DCIndexWBInv
393*10465441SEvalZero #define ICIndexLdTag		((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriI)
394*10465441SEvalZero #define DCIndexLdTag		((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriD)
395*10465441SEvalZero #define ICIndexStTag		((K_CacheIndexStTag << S_CacheFunc) | K_CachePriI)
396*10465441SEvalZero #define DCIndexStTag		((K_CacheIndexStTag << S_CacheFunc) | K_CachePriD)
397*10465441SEvalZero #define ICHitInv		((K_CacheHitInv << S_CacheFunc) | K_CachePriI)
398*10465441SEvalZero #define DCHitInv		((K_CacheHitInv << S_CacheFunc) | K_CachePriD)
399*10465441SEvalZero #define ICFill			((K_CacheFill << S_CacheFunc) | K_CachePriI)
400*10465441SEvalZero #define DCHitWBInv		((K_CacheHitWBInv << S_CacheFunc) | K_CachePriD)
401*10465441SEvalZero #define DCHitWB			((K_CacheHitWB << S_CacheFunc) | K_CachePriD)
402*10465441SEvalZero #define ICFetchLock		((K_CacheFetchLock << S_CacheFunc) | K_CachePriI)
403*10465441SEvalZero #define DCFetchLock		((K_CacheFetchLock << S_CacheFunc) | K_CachePriD)
404*10465441SEvalZero 
405*10465441SEvalZero 
406*10465441SEvalZero /*
407*10465441SEvalZero  *************************************************************************
408*10465441SEvalZero  *          P R E F E T C H   I N S T R U C T I O N   H I N T S          *
409*10465441SEvalZero  *************************************************************************
410*10465441SEvalZero  */
411*10465441SEvalZero 
412*10465441SEvalZero #define PrefLoad		0
413*10465441SEvalZero #define PrefStore		1
414*10465441SEvalZero #define PrefLoadStreamed	4
415*10465441SEvalZero #define PrefStoreStreamed	5
416*10465441SEvalZero #define PrefLoadRetained	6
417*10465441SEvalZero #define PrefStoreRetained	7
418*10465441SEvalZero #define PrefWBInval		25
419*10465441SEvalZero #define PrefNudge		25
420*10465441SEvalZero 
421*10465441SEvalZero 
422*10465441SEvalZero /*
423*10465441SEvalZero  *************************************************************************
424*10465441SEvalZero  *             C P U   R E G I S T E R   D E F I N I T I O N S           *
425*10465441SEvalZero  *************************************************************************
426*10465441SEvalZero  */
427*10465441SEvalZero 
428*10465441SEvalZero 
429*10465441SEvalZero /*
430*10465441SEvalZero  *************************************************************************
431*10465441SEvalZero  *                  S O F T W A R E   G P R   N A M E S                  *
432*10465441SEvalZero  *************************************************************************
433*10465441SEvalZero  */
434*10465441SEvalZero #ifdef __ASSEMBLY__
435*10465441SEvalZero #define zero			 $0
436*10465441SEvalZero #define AT			 $1
437*10465441SEvalZero #define v0			 $2
438*10465441SEvalZero #define v1			 $3
439*10465441SEvalZero #define a0			 $4
440*10465441SEvalZero #define a1			 $5
441*10465441SEvalZero #define a2			 $6
442*10465441SEvalZero #define a3			 $7
443*10465441SEvalZero #define t0			 $8
444*10465441SEvalZero #define t1			 $9
445*10465441SEvalZero #define t2			$10
446*10465441SEvalZero #define t3			$11
447*10465441SEvalZero #define t4			$12
448*10465441SEvalZero #define t5			$13
449*10465441SEvalZero #define t6			$14
450*10465441SEvalZero #define t7			$15
451*10465441SEvalZero #define s0			$16
452*10465441SEvalZero #define s1			$17
453*10465441SEvalZero #define s2			$18
454*10465441SEvalZero #define s3			$19
455*10465441SEvalZero #define s4			$20
456*10465441SEvalZero #define s5			$21
457*10465441SEvalZero #define s6			$22
458*10465441SEvalZero #define s7			$23
459*10465441SEvalZero #define t8			$24
460*10465441SEvalZero #define t9			$25
461*10465441SEvalZero #define k0			$26
462*10465441SEvalZero #define k1			$27
463*10465441SEvalZero #define gp			$28
464*10465441SEvalZero #define sp			$29
465*10465441SEvalZero #define fp			$30
466*10465441SEvalZero #define ra			$31
467*10465441SEvalZero 
468*10465441SEvalZero /*
469*10465441SEvalZero  * The following registers are used by the AVP environment and
470*10465441SEvalZero  * are not part of the normal software definitions.
471*10465441SEvalZero  */
472*10465441SEvalZero 
473*10465441SEvalZero #ifdef MIPSAVPENV
474*10465441SEvalZero #define repc			$25			/* Expected exception PC */
475*10465441SEvalZero #define tid			$30			/* Current test case address */
476*10465441SEvalZero #endif
477*10465441SEvalZero 
478*10465441SEvalZero 
479*10465441SEvalZero /*
480*10465441SEvalZero  *************************************************************************
481*10465441SEvalZero  *                  H A R D W A R E   G P R   N A M E S                  *
482*10465441SEvalZero  *************************************************************************
483*10465441SEvalZero  *
484*10465441SEvalZero  * In the AVP environment, several of the `r' names are removed from the
485*10465441SEvalZero  * name space because they are used by the kernel for special purposes.
486*10465441SEvalZero  * Removing them causes assembly rather than runtime errors for tests that
487*10465441SEvalZero  * use the `r' names.
488*10465441SEvalZero  *
489*10465441SEvalZero  *	- r25 (repc) is used as the expected PC on an exception
490*10465441SEvalZero  *	- r26-r27 (k0, k1) are used in the exception handler
491*10465441SEvalZero  *	- r30 (tid) is used as the current test address
492*10465441SEvalZero  */
493*10465441SEvalZero 
494*10465441SEvalZero #define r0			 $0
495*10465441SEvalZero #define r1			 $1
496*10465441SEvalZero #define r2			 $2
497*10465441SEvalZero #define r3			 $3
498*10465441SEvalZero #define r4			 $4
499*10465441SEvalZero #define r5			 $5
500*10465441SEvalZero #define r6			 $6
501*10465441SEvalZero #define r7			 $7
502*10465441SEvalZero #define r8			 $8
503*10465441SEvalZero #define r9			 $9
504*10465441SEvalZero #define r10			$10
505*10465441SEvalZero #define r11			$11
506*10465441SEvalZero #define r12			$12
507*10465441SEvalZero #define r13			$13
508*10465441SEvalZero #define r14			$14
509*10465441SEvalZero #define r15			$15
510*10465441SEvalZero #define r16			$16
511*10465441SEvalZero #define r17			$17
512*10465441SEvalZero #define r18			$18
513*10465441SEvalZero #define r19			$19
514*10465441SEvalZero #define r20			$20
515*10465441SEvalZero #define r21			$21
516*10465441SEvalZero #define r22			$22
517*10465441SEvalZero #define r23			$23
518*10465441SEvalZero #define r24			$24
519*10465441SEvalZero #ifdef MIPSAVPENV
520*10465441SEvalZero #define r25			r25_unknown
521*10465441SEvalZero #define r26			r26_unknown
522*10465441SEvalZero #define r27			r27_unknown
523*10465441SEvalZero #else
524*10465441SEvalZero #define r25			$25
525*10465441SEvalZero #define r26			$26
526*10465441SEvalZero #define r27			$27
527*10465441SEvalZero #endif
528*10465441SEvalZero #define r28			$28
529*10465441SEvalZero #define r29			$29
530*10465441SEvalZero #ifdef MIPSAVPENV
531*10465441SEvalZero #define r30			r30_unknown
532*10465441SEvalZero #else
533*10465441SEvalZero #define r30			$30
534*10465441SEvalZero #endif
535*10465441SEvalZero #define r31			$31
536*10465441SEvalZero 
537*10465441SEvalZero #endif
538*10465441SEvalZero 
539*10465441SEvalZero /*
540*10465441SEvalZero  *************************************************************************
541*10465441SEvalZero  *                H A R D W A R E   G P R   I N D I C E S                *
542*10465441SEvalZero  *************************************************************************
543*10465441SEvalZero  *
544*10465441SEvalZero  * These definitions provide the index (number) of the GPR, as opposed
545*10465441SEvalZero  * to the assembler register name ($n).
546*10465441SEvalZero  */
547*10465441SEvalZero 
548*10465441SEvalZero #define R_r0			 0
549*10465441SEvalZero #define R_r1			 1
550*10465441SEvalZero #define R_r2			 2
551*10465441SEvalZero #define R_r3			 3
552*10465441SEvalZero #define R_r4			 4
553*10465441SEvalZero #define R_r5			 5
554*10465441SEvalZero #define R_r6			 6
555*10465441SEvalZero #define R_r7			 7
556*10465441SEvalZero #define R_r8			 8
557*10465441SEvalZero #define R_r9			 9
558*10465441SEvalZero #define R_r10			10
559*10465441SEvalZero #define R_r11			11
560*10465441SEvalZero #define R_r12			12
561*10465441SEvalZero #define R_r13			13
562*10465441SEvalZero #define R_r14			14
563*10465441SEvalZero #define R_r15			15
564*10465441SEvalZero #define R_r16			16
565*10465441SEvalZero #define R_r17			17
566*10465441SEvalZero #define R_r18			18
567*10465441SEvalZero #define R_r19			19
568*10465441SEvalZero #define R_r20			20
569*10465441SEvalZero #define R_r21			21
570*10465441SEvalZero #define R_r22			22
571*10465441SEvalZero #define R_r23			23
572*10465441SEvalZero #define R_r24			24
573*10465441SEvalZero #define R_r25			25
574*10465441SEvalZero #define R_r26			26
575*10465441SEvalZero #define R_r27			27
576*10465441SEvalZero #define R_r28			28
577*10465441SEvalZero #define R_r29			29
578*10465441SEvalZero #define R_r30			30
579*10465441SEvalZero #define R_r31			31
580*10465441SEvalZero #define R_hi			32			/* Hi register */
581*10465441SEvalZero #define R_lo			33			/* Lo register */
582*10465441SEvalZero 
583*10465441SEvalZero 
584*10465441SEvalZero /*
585*10465441SEvalZero  *************************************************************************
586*10465441SEvalZero  *                  S O F T W A R E   G P R   M A S K S                  *
587*10465441SEvalZero  *************************************************************************
588*10465441SEvalZero  *
589*10465441SEvalZero  * These definitions provide the bit mask corresponding to the GPR number
590*10465441SEvalZero  */
591*10465441SEvalZero 
592*10465441SEvalZero #define M_AT			 (1<<1)
593*10465441SEvalZero #define M_v0			 (1<<2)
594*10465441SEvalZero #define M_v1			 (1<<3)
595*10465441SEvalZero #define M_a0			 (1<<4)
596*10465441SEvalZero #define M_a1			 (1<<5)
597*10465441SEvalZero #define M_a2			 (1<<6)
598*10465441SEvalZero #define M_a3			 (1<<7)
599*10465441SEvalZero #define M_t0			 (1<<8)
600*10465441SEvalZero #define M_t1			 (1<<9)
601*10465441SEvalZero #define M_t2			(1<<10)
602*10465441SEvalZero #define M_t3			(1<<11)
603*10465441SEvalZero #define M_t4			(1<<12)
604*10465441SEvalZero #define M_t5			(1<<13)
605*10465441SEvalZero #define M_t6			(1<<14)
606*10465441SEvalZero #define M_t7			(1<<15)
607*10465441SEvalZero #define M_s0			(1<<16)
608*10465441SEvalZero #define M_s1			(1<<17)
609*10465441SEvalZero #define M_s2			(1<<18)
610*10465441SEvalZero #define M_s3			(1<<19)
611*10465441SEvalZero #define M_s4			(1<<20)
612*10465441SEvalZero #define M_s5			(1<<21)
613*10465441SEvalZero #define M_s6			(1<<22)
614*10465441SEvalZero #define M_s7			(1<<23)
615*10465441SEvalZero #define M_t8			(1<<24)
616*10465441SEvalZero #define M_t9			(1<<25)
617*10465441SEvalZero #define M_k0			(1<<26)
618*10465441SEvalZero #define M_k1			(1<<27)
619*10465441SEvalZero #define M_gp			(1<<28)
620*10465441SEvalZero #define M_sp			(1<<29)
621*10465441SEvalZero #define M_fp			(1<<30)
622*10465441SEvalZero #define M_ra			(1<<31)
623*10465441SEvalZero 
624*10465441SEvalZero 
625*10465441SEvalZero /*
626*10465441SEvalZero  *************************************************************************
627*10465441SEvalZero  *             C P 0   R E G I S T E R   D E F I N I T I O N S           *
628*10465441SEvalZero  *************************************************************************
629*10465441SEvalZero  * Each register has the following definitions:
630*10465441SEvalZero  *
631*10465441SEvalZero  *	C0_rrr		The register number (as a $n value)
632*10465441SEvalZero  *	R_C0_rrr	The register index (as an integer corresponding
633*10465441SEvalZero  *			to the register number)
634*10465441SEvalZero  *
635*10465441SEvalZero  * Each field in a register has the following definitions:
636*10465441SEvalZero  *
637*10465441SEvalZero  *	S_rrrfff	The shift count required to right-justify
638*10465441SEvalZero  *			the field.  This corresponds to the bit
639*10465441SEvalZero  *			number of the right-most bit in the field.
640*10465441SEvalZero  *	M_rrrfff	The Mask required to isolate the field.
641*10465441SEvalZero  *
642*10465441SEvalZero  * Register diagrams included below as comments correspond to the
643*10465441SEvalZero  * MIPS32 and MIPS64 architecture specifications.  Refer to other
644*10465441SEvalZero  * sources for register diagrams for older architectures.
645*10465441SEvalZero  */
646*10465441SEvalZero 
647*10465441SEvalZero 
648*10465441SEvalZero /*
649*10465441SEvalZero  ************************************************************************
650*10465441SEvalZero  *                 I N D E X   R E G I S T E R   ( 0 )                  *
651*10465441SEvalZero  ************************************************************************
652*10465441SEvalZero  *
653*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
654*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
655*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
656*10465441SEvalZero  * |P|                         0                       |   Index   | Index
657*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
658*10465441SEvalZero  */
659*10465441SEvalZero 
660*10465441SEvalZero #define C0_Index		$0
661*10465441SEvalZero #define R_C0_Index		0
662*10465441SEvalZero #define C0_INX			C0_Index		/* OBSOLETE - DO NOT USE IN NEW CODE */
663*10465441SEvalZero 
664*10465441SEvalZero #define S_IndexP		31			/* Probe failure (R)*/
665*10465441SEvalZero #define M_IndexP		(0x1 << S_IndexP)
666*10465441SEvalZero 
667*10465441SEvalZero #define S_IndexIndex		0			/* TLB index (R/W)*/
668*10465441SEvalZero #define M_IndexIndex		(0x3f << S_IndexIndex)
669*10465441SEvalZero 
670*10465441SEvalZero #define M_Index0Fields		0x7fffffc0
671*10465441SEvalZero #define M_IndexRFields		0x80000000
672*10465441SEvalZero 
673*10465441SEvalZero 
674*10465441SEvalZero /*
675*10465441SEvalZero  ************************************************************************
676*10465441SEvalZero  *                R A N D O M   R E G I S T E R   ( 1 )                 *
677*10465441SEvalZero  ************************************************************************
678*10465441SEvalZero  *
679*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
680*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
681*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
682*10465441SEvalZero  * |                            0                      |   Index   | Random
683*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
684*10465441SEvalZero  */
685*10465441SEvalZero 
686*10465441SEvalZero #define C0_Random		$1
687*10465441SEvalZero #define R_C0_Random		1
688*10465441SEvalZero #define C0_RAND			$1			/* OBSOLETE - DO NOT USE IN NEW CODE */
689*10465441SEvalZero 
690*10465441SEvalZero #define S_RandomIndex		0			/* TLB random index (R)*/
691*10465441SEvalZero #define M_RandomIndex		(0x3f << S_RandomIndex)
692*10465441SEvalZero 
693*10465441SEvalZero #define M_Random0Fields		0xffffffc0
694*10465441SEvalZero #define M_RandomRFields		0x0000003f
695*10465441SEvalZero 
696*10465441SEvalZero 
697*10465441SEvalZero /*
698*10465441SEvalZero  ************************************************************************
699*10465441SEvalZero  *              E N T R Y L O 0   R E G I S T E R   ( 2 )               *
700*10465441SEvalZero  ************************************************************************
701*10465441SEvalZero  *
702*10465441SEvalZero  *  6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
703*10465441SEvalZero  *  3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
704*10465441SEvalZero  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
705*10465441SEvalZero  * | Fill (0) //| 0 |                     PFN                       |  C  |D|V|G| EntryLo0
706*10465441SEvalZero  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
707*10465441SEvalZero  */
708*10465441SEvalZero 
709*10465441SEvalZero #define C0_EntryLo0		$2
710*10465441SEvalZero #define R_C0_EntryLo0		2
711*10465441SEvalZero #define C0_TLBLO_0		C0_EntryLo0		/* OBSOLETE - DO NOT USE IN NEW CODE */
712*10465441SEvalZero 
713*10465441SEvalZero #define S_EntryLoPFN		6			/* PFN (R/W) */
714*10465441SEvalZero #define M_EntryLoPFN		(0xffffff << S_EntryLoPFN)
715*10465441SEvalZero #define S_EntryLoC		3			/* Coherency attribute (R/W) */
716*10465441SEvalZero #define M_EntryLoC		(0x7 << S_EntryLoC)
717*10465441SEvalZero #define S_EntryLoD		2			/* Dirty (R/W) */
718*10465441SEvalZero #define M_EntryLoD		(0x1 << S_EntryLoD)
719*10465441SEvalZero #define S_EntryLoV		1			/* Valid (R/W) */
720*10465441SEvalZero #define M_EntryLoV		(0x1 << S_EntryLoV)
721*10465441SEvalZero #define S_EntryLoG		0			/* Global (R/W) */
722*10465441SEvalZero #define M_EntryLoG		(0x1 << S_EntryLoG)
723*10465441SEvalZero #define M_EntryLoOddPFN		(0x1 << S_EntryLoPFN)	/* Odd PFN bit */
724*10465441SEvalZero #define S_EntryLo_RS		K_PageAlign		/* Right-justify PFN */
725*10465441SEvalZero #define S_EntryLo_LS		S_EntryLoPFN		/* Position PFN to appropriate position */
726*10465441SEvalZero 
727*10465441SEvalZero #define M_EntryLo0Fields	0x00000000
728*10465441SEvalZero #define M_EntryLoRFields	0xc0000000
729*10465441SEvalZero #define M_EntryLo0Fields64	UNS64Const(0x0000000000000000)
730*10465441SEvalZero #define M_EntryLoRFields64	UNS64Const(0xffffffffc0000000)
731*10465441SEvalZero 
732*10465441SEvalZero /*
733*10465441SEvalZero  * Cache attribute values in the C field of EntryLo and the
734*10465441SEvalZero  * K0 field of Config
735*10465441SEvalZero  */
736*10465441SEvalZero #define K_CacheAttrCWTnWA	0			/* Cacheable, write-thru, no write allocate */
737*10465441SEvalZero #define K_CacheAttrCWTWA	1			/* Cacheable, write-thru, write allocate */
738*10465441SEvalZero #define K_CacheAttrU		2			/* Uncached */
739*10465441SEvalZero #define K_CacheAttrC		3			/* Cacheable */
740*10465441SEvalZero #define K_CacheAttrCN		3			/* Cacheable, non-coherent */
741*10465441SEvalZero #define K_CacheAttrCCE		4			/* Cacheable, coherent, exclusive */
742*10465441SEvalZero #define K_CacheAttrCCS		5			/* Cacheable, coherent, shared */
743*10465441SEvalZero #define K_CacheAttrCCU		6			/* Cacheable, coherent, update */
744*10465441SEvalZero #define K_CacheAttrUA		7			/* Uncached accelerated */
745*10465441SEvalZero 
746*10465441SEvalZero 
747*10465441SEvalZero /*
748*10465441SEvalZero  ************************************************************************
749*10465441SEvalZero  *              E N T R Y L O 1   R E G I S T E R   ( 3 )               *
750*10465441SEvalZero  ************************************************************************
751*10465441SEvalZero  *
752*10465441SEvalZero  *  6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
753*10465441SEvalZero  *  3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
754*10465441SEvalZero  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
755*10465441SEvalZero  * | Fill (0) //| 0 |                     PFN                       |  C  |D|V|G| EntryLo1
756*10465441SEvalZero  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
757*10465441SEvalZero  */
758*10465441SEvalZero 
759*10465441SEvalZero #define C0_EntryLo1		$3
760*10465441SEvalZero #define R_C0_EntryLo1		3
761*10465441SEvalZero #define C0_TLBLO_1		C0_EntryLo1		/* OBSOLETE - DO NOT USE IN NEW CODE */
762*10465441SEvalZero 
763*10465441SEvalZero /*
764*10465441SEvalZero  * Field definitions are as given for EntryLo0 above
765*10465441SEvalZero  */
766*10465441SEvalZero 
767*10465441SEvalZero 
768*10465441SEvalZero /*
769*10465441SEvalZero  ************************************************************************
770*10465441SEvalZero  *               C O N T E X T   R E G I S T E R   ( 4 )                *
771*10465441SEvalZero  ************************************************************************
772*10465441SEvalZero  *
773*10465441SEvalZero  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
774*10465441SEvalZero  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
775*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
776*10465441SEvalZero  * |  //       PTEBase    |            BadVPN<31:13>            |   0   | Context
777*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
778*10465441SEvalZero  */
779*10465441SEvalZero 
780*10465441SEvalZero #define C0_Context		$4
781*10465441SEvalZero #define R_C0_Context		4
782*10465441SEvalZero #define C0_CTXT			C0_Context		/* OBSOLETE - DO NOT USE IN NEW CODE */
783*10465441SEvalZero 
784*10465441SEvalZero #define S_ContextPTEBase	23			/* PTE base (R/W) */
785*10465441SEvalZero #define M_ContextPTEBase	(0x1ff << S_ContextPTEBase)
786*10465441SEvalZero #define S_ContextBadVPN		4			/* BadVPN2 (R) */
787*10465441SEvalZero #define M_ContextBadVPN		(0x7ffff << S_ContextBadVPN)
788*10465441SEvalZero #define S_ContextBadVPN_LS	9			/* Position BadVPN to bit 31 */
789*10465441SEvalZero #define S_ContextBadVPN_RS	13			/* Right-justify shifted BadVPN field */
790*10465441SEvalZero 
791*10465441SEvalZero #define M_Context0Fields	0x0000000f
792*10465441SEvalZero #define M_ContextRFields	0x007ffff0
793*10465441SEvalZero #define M_Context0Fields64	UNS64Const(0x000000000000000f)
794*10465441SEvalZero #define M_ContextRFields64	UNS64Const(0x00000000007ffff0)
795*10465441SEvalZero 
796*10465441SEvalZero 
797*10465441SEvalZero /*
798*10465441SEvalZero  ************************************************************************
799*10465441SEvalZero  *              P A G E M A S K   R E G I S T E R   ( 5 )               *
800*10465441SEvalZero  ************************************************************************
801*10465441SEvalZero  *
802*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
803*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
804*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
805*10465441SEvalZero  * |      0      |        Mask           |            0            | PageMask
806*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
807*10465441SEvalZero  */
808*10465441SEvalZero 
809*10465441SEvalZero #define C0_PageMask		$5
810*10465441SEvalZero #define R_C0_PageMask		5			/* Mask (R/W) */
811*10465441SEvalZero #define C0_PGMASK		C0_PageMask		/* OBSOLETE - DO NOT USE IN NEW CODE */
812*10465441SEvalZero 
813*10465441SEvalZero #define S_PageMaskMask		13
814*10465441SEvalZero #define M_PageMaskMask		(0xfff << S_PageMaskMask)
815*10465441SEvalZero 
816*10465441SEvalZero #define M_PageMask0Fields	0xfe001fff
817*10465441SEvalZero #define M_PageMaskRFields	0x00000000
818*10465441SEvalZero 
819*10465441SEvalZero /*
820*10465441SEvalZero  * Values in the Mask field
821*10465441SEvalZero  */
822*10465441SEvalZero #define K_PageMask4K		0x000			/* K_PageMasknn values are values for use */
823*10465441SEvalZero #define K_PageMask16K		0x003			/* with KReqPageAttributes or KReqPageMask macros */
824*10465441SEvalZero #define K_PageMask64K		0x00f
825*10465441SEvalZero #define K_PageMask256K		0x03f
826*10465441SEvalZero #define K_PageMask1M		0x0ff
827*10465441SEvalZero #define K_PageMask4M		0x3ff
828*10465441SEvalZero #define K_PageMask16M		0xfff
829*10465441SEvalZero 
830*10465441SEvalZero #define M_PageMask4K		(K_PageMask4K << S_PageMaskMask) /* M_PageMasknn values are masks */
831*10465441SEvalZero #define M_PageMask16K		(K_PageMask16K << S_PageMaskMask) /* in position in the PageMask register */
832*10465441SEvalZero #define M_PageMask64K		(K_PageMask64K << S_PageMaskMask)
833*10465441SEvalZero #define M_PageMask256K		(K_PageMask256K << S_PageMaskMask)
834*10465441SEvalZero #define M_PageMask1M		(K_PageMask1M << S_PageMaskMask)
835*10465441SEvalZero #define M_PageMask4M		(K_PageMask4M << S_PageMaskMask)
836*10465441SEvalZero #define M_PageMask16M		(K_PageMask16M << S_PageMaskMask)
837*10465441SEvalZero 
838*10465441SEvalZero 
839*10465441SEvalZero /*
840*10465441SEvalZero  ************************************************************************
841*10465441SEvalZero  *                 W I R E D   R E G I S T E R   ( 6 )                  *
842*10465441SEvalZero  ************************************************************************
843*10465441SEvalZero  *
844*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
845*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
846*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
847*10465441SEvalZero  * |                            0                      |   Index   | Wired
848*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
849*10465441SEvalZero  */
850*10465441SEvalZero 
851*10465441SEvalZero #define C0_Wired		$6
852*10465441SEvalZero #define R_C0_Wired		6
853*10465441SEvalZero #define C0_TLBWIRED		C0_Wired		/* OBSOLETE - DO NOT USE IN NEW CODE */
854*10465441SEvalZero 
855*10465441SEvalZero #define S_WiredIndex		0			/* TLB wired boundary (R/W) */
856*10465441SEvalZero #define M_WiredIndex		(0x3f << S_WiredIndex)
857*10465441SEvalZero 
858*10465441SEvalZero #define M_Wired0Fields		0xffffffc0
859*10465441SEvalZero #define M_WiredRFields		0x00000000
860*10465441SEvalZero 
861*10465441SEvalZero 
862*10465441SEvalZero /*
863*10465441SEvalZero  ************************************************************************
864*10465441SEvalZero  *              B A D V A D D R   R E G I S T E R   ( 8 )               *
865*10465441SEvalZero  ************************************************************************
866*10465441SEvalZero  *
867*10465441SEvalZero  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
868*10465441SEvalZero  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
869*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
870*10465441SEvalZero  * |  //                     Bad Virtual Address                        | BadVAddr
871*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
872*10465441SEvalZero  */
873*10465441SEvalZero 
874*10465441SEvalZero #define C0_BadVAddr		$8
875*10465441SEvalZero #define R_C0_BadVAddr		8
876*10465441SEvalZero #define C0_BADVADDR		C0_BadVAddr		/* OBSOLETE - DO NOT USE IN NEW CODE */
877*10465441SEvalZero 
878*10465441SEvalZero #define M_BadVAddrOddPage	K_PageSize		/* Even/Odd VA bit for pair of PAs */
879*10465441SEvalZero 
880*10465441SEvalZero #define M_BadVAddr0Fields	0x00000000
881*10465441SEvalZero #define M_BadVAddrRFields	0xffffffff
882*10465441SEvalZero #define M_BadVAddr0Fields64	UNS64Const(0x0000000000000000)
883*10465441SEvalZero #define M_BadVAddrRFields64	UNS64Const(0xffffffffffffffff)
884*10465441SEvalZero 
885*10465441SEvalZero /*
886*10465441SEvalZero  ************************************************************************
887*10465441SEvalZero  *                 C O U N T   R E G I S T E R   ( 9 )                  *
888*10465441SEvalZero  ************************************************************************
889*10465441SEvalZero  *
890*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
891*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
892*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
893*10465441SEvalZero  * |                         Count Value                           | Count
894*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
895*10465441SEvalZero  */
896*10465441SEvalZero 
897*10465441SEvalZero #define C0_Count		$9
898*10465441SEvalZero #define R_C0_Count		9
899*10465441SEvalZero #define C0_COUNT		C0_Count		/* OBSOLETE - DO NOT USE IN NEW CODE */
900*10465441SEvalZero 
901*10465441SEvalZero #define M_Count0Fields		0x00000000
902*10465441SEvalZero #define M_CountRFields		0x00000000
903*10465441SEvalZero 
904*10465441SEvalZero 
905*10465441SEvalZero /*
906*10465441SEvalZero  ************************************************************************
907*10465441SEvalZero  *              E N T R Y H I   R E G I S T E R   ( 1 0 )               *
908*10465441SEvalZero  ************************************************************************
909*10465441SEvalZero  *
910*10465441SEvalZero  *  6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
911*10465441SEvalZero  *  3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
912*10465441SEvalZero  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
913*10465441SEvalZero  * | R | Fill //                 VPN2                 |    0    |     ASID      | EntryHi
914*10465441SEvalZero  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
915*10465441SEvalZero  */
916*10465441SEvalZero 
917*10465441SEvalZero #define C0_EntryHi		$10
918*10465441SEvalZero #define R_C0_EntryHi		10
919*10465441SEvalZero #define C0_TLBHI		C0_EntryHi		/* OBSOLETE - DO NOT USE IN NEW CODE */
920*10465441SEvalZero 
921*10465441SEvalZero #define S_EntryHiR64		62			/* Region (R/W) */
922*10465441SEvalZero #define M_EntryHiR64		UNS64Const(0xc000000000000000)
923*10465441SEvalZero #define S_EntryHiVPN2		13			/* VPN/2 (R/W) */
924*10465441SEvalZero #define M_EntryHiVPN2		(0x7ffff << S_EntryHiVPN2)
925*10465441SEvalZero #define M_EntryHiVPN264		UNS64Const(0x000000ffffffe000)
926*10465441SEvalZero #define S_EntryHiASID		0			/* ASID (R/W) */
927*10465441SEvalZero #define M_EntryHiASID		(0xff << S_EntryHiASID)
928*10465441SEvalZero #define S_EntryHiVPN_Shf	S_EntryHiVPN2
929*10465441SEvalZero 
930*10465441SEvalZero #define M_EntryHi0Fields	0x00001f00
931*10465441SEvalZero #define M_EntryHiRFields	0x00000000
932*10465441SEvalZero #define M_EntryHi0Fields64	UNS64Const(0x0000000000001f00)
933*10465441SEvalZero #define M_EntryHiRFields64	UNS64Const(0x3fffff0000000000)
934*10465441SEvalZero 
935*10465441SEvalZero 
936*10465441SEvalZero /*
937*10465441SEvalZero  ************************************************************************
938*10465441SEvalZero  *              C O M P A R E   R E G I S T E R   ( 1 1 )               *
939*10465441SEvalZero  ************************************************************************
940*10465441SEvalZero  *
941*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
942*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
943*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
944*10465441SEvalZero  * |                        Compare Value                          | Compare
945*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
946*10465441SEvalZero  */
947*10465441SEvalZero 
948*10465441SEvalZero #define C0_Compare		$11
949*10465441SEvalZero #define R_C0_Compare		11
950*10465441SEvalZero #define C0_COMPARE		C0_Compare		/* OBSOLETE - DO NOT USE IN NEW CODE */
951*10465441SEvalZero 
952*10465441SEvalZero #define M_Compare0Fields	0x00000000
953*10465441SEvalZero #define M_CompareRFields	0x00000000
954*10465441SEvalZero 
955*10465441SEvalZero 
956*10465441SEvalZero /*
957*10465441SEvalZero  ************************************************************************
958*10465441SEvalZero  *               S T A T U S   R E G I S T E R   ( 1 2 )                *
959*10465441SEvalZero  ************************************************************************
960*10465441SEvalZero  *
961*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
962*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
963*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
964*10465441SEvalZero  * |C|C|C|C|R|F|R|M|P|B|T|S|M| | R |I|I|I|I|I|I|I|I|K|S|U|U|R|E|E|I|
965*10465441SEvalZero  * |U|U|U|U|P|R|E|X|X|E|S|R|M| | s |M|M|M|M|M|M|M|M|X|X|X|M|s|R|X|E| Status
966*10465441SEvalZero  * |3|2|1|0| | | | | |V| | |I| | v |7|6|5|4|3|2|1|0| | | | |v|L|L| |
967*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
968*10465441SEvalZero  */
969*10465441SEvalZero 
970*10465441SEvalZero #define C0_Status		$12
971*10465441SEvalZero #define R_C0_Status		12
972*10465441SEvalZero #define C0_SR			C0_Status		/* OBSOLETE - DO NOT USE IN NEW CODE */
973*10465441SEvalZero 
974*10465441SEvalZero #define S_StatusCU		28			/* Coprocessor enable (R/W) */
975*10465441SEvalZero #define M_StatusCU		(0xf << S_StatusCU)
976*10465441SEvalZero #define S_StatusCU3		31
977*10465441SEvalZero #define M_StatusCU3     	(0x1 << S_StatusCU3)
978*10465441SEvalZero #define S_StatusCU2		30
979*10465441SEvalZero #define M_StatusCU2		(0x1 << S_StatusCU2)
980*10465441SEvalZero #define S_StatusCU1		29
981*10465441SEvalZero #define M_StatusCU1		(0x1 << S_StatusCU1)
982*10465441SEvalZero #define S_StatusCU0		28
983*10465441SEvalZero #define M_StatusCU0		(0x1 << S_StatusCU0)
984*10465441SEvalZero #define S_StatusRP		27			/* Enable reduced power mode (R/W) */
985*10465441SEvalZero #define M_StatusRP		(0x1 << S_StatusRP)
986*10465441SEvalZero #define S_StatusFR		26			/* Enable 64-bit FPRs (MIPS64 only) (R/W) */
987*10465441SEvalZero #define M_StatusFR		(0x1 << S_StatusFR)
988*10465441SEvalZero #define S_StatusRE		25			/* Enable reverse endian (R/W) */
989*10465441SEvalZero #define M_StatusRE		(0x1 << S_StatusRE)
990*10465441SEvalZero #define S_StatusMX		24			/* Enable access to MDMX resources (MIPS64 only) (R/W) */
991*10465441SEvalZero #define M_StatusMX		(0x1 << S_StatusMX)
992*10465441SEvalZero #define S_StatusPX		23			/* Enable access to 64-bit instructions/data (MIPS64 only) (R/W) */
993*10465441SEvalZero #define M_StatusPX		(0x1 << S_StatusPX)
994*10465441SEvalZero #define S_StatusBEV		22			/* Enable Boot Exception Vectors (R/W) */
995*10465441SEvalZero #define M_StatusBEV		(0x1 << S_StatusBEV)
996*10465441SEvalZero #define S_StatusTS		21			/* Denote TLB shutdown (R/W) */
997*10465441SEvalZero #define M_StatusTS		(0x1 << S_StatusTS)
998*10465441SEvalZero #define S_StatusSR		20			/* Denote soft reset (R/W) */
999*10465441SEvalZero #define M_StatusSR		(0x1 << S_StatusSR)
1000*10465441SEvalZero #define S_StatusNMI		19
1001*10465441SEvalZero #define M_StatusNMI		(0x1 << S_StatusNMI)	/* Denote NMI (R/W) */
1002*10465441SEvalZero #define S_StatusIM		8			/* Interrupt mask (R/W) */
1003*10465441SEvalZero #define M_StatusIM		(0xff << S_StatusIM)
1004*10465441SEvalZero #define S_StatusIM7		15
1005*10465441SEvalZero #define M_StatusIM7		(0x1 << S_StatusIM7)
1006*10465441SEvalZero #define S_StatusIM6		14
1007*10465441SEvalZero #define M_StatusIM6		(0x1 << S_StatusIM6)
1008*10465441SEvalZero #define S_StatusIM5		13
1009*10465441SEvalZero #define M_StatusIM5		(0x1 << S_StatusIM5)
1010*10465441SEvalZero #define S_StatusIM4		12
1011*10465441SEvalZero #define M_StatusIM4		(0x1 << S_StatusIM4)
1012*10465441SEvalZero #define S_StatusIM3		11
1013*10465441SEvalZero #define M_StatusIM3		(0x1 << S_StatusIM3)
1014*10465441SEvalZero #define S_StatusIM2		10
1015*10465441SEvalZero #define M_StatusIM2		(0x1 << S_StatusIM2)
1016*10465441SEvalZero #define S_StatusIM1		9
1017*10465441SEvalZero #define M_StatusIM1		(0x1 << S_StatusIM1)
1018*10465441SEvalZero #define S_StatusIM0		8
1019*10465441SEvalZero #define M_StatusIM0		(0x1 << S_StatusIM0)
1020*10465441SEvalZero #define S_StatusKX		7			/* Enable access to extended kernel addresses (MIPS64 only) (R/W) */
1021*10465441SEvalZero #define M_StatusKX		(0x1 << S_StatusKX)
1022*10465441SEvalZero #define S_StatusSX		6			/* Enable access to extended supervisor addresses (MIPS64 only) (R/W) */
1023*10465441SEvalZero #define M_StatusSX		(0x1 << S_StatusSX)
1024*10465441SEvalZero #define S_StatusUX		5			/* Enable access to extended user addresses (MIPS64 only) (R/W) */
1025*10465441SEvalZero #define M_StatusUX		(0x1 << S_StatusUX)
1026*10465441SEvalZero #define S_StatusKSU		3			/* Two-bit current mode (R/W) */
1027*10465441SEvalZero #define M_StatusKSU		(0x3 << S_StatusKSU)
1028*10465441SEvalZero #define S_StatusUM		4			/* User mode if supervisor mode not implemented (R/W) */
1029*10465441SEvalZero #define M_StatusUM		(0x1 << S_StatusUM)
1030*10465441SEvalZero #define S_StatusSM		3			/* Supervisor mode (R/W) */
1031*10465441SEvalZero #define M_StatusSM		(0x1 << S_StatusSM)
1032*10465441SEvalZero #define S_StatusERL		2			/* Denotes error level (R/W) */
1033*10465441SEvalZero #define M_StatusERL		(0x1 << S_StatusERL)
1034*10465441SEvalZero #define S_StatusEXL		1			/* Denotes exception level (R/W) */
1035*10465441SEvalZero #define M_StatusEXL		(0x1 << S_StatusEXL)
1036*10465441SEvalZero #define S_StatusIE		0			/* Enables interrupts (R/W) */
1037*10465441SEvalZero #define M_StatusIE		(0x1 << S_StatusIE)
1038*10465441SEvalZero 
1039*10465441SEvalZero #define M_Status0Fields		0x00040000
1040*10465441SEvalZero #define M_StatusRFields		0x058000e0		/* FR, MX, PX, KX, SX, UX unused in MIPS32 */
1041*10465441SEvalZero #define M_Status0Fields64	0x00040000
1042*10465441SEvalZero #define M_StatusRFields64	0x00000000
1043*10465441SEvalZero 
1044*10465441SEvalZero /*
1045*10465441SEvalZero  * Values in the KSU field
1046*10465441SEvalZero  */
1047*10465441SEvalZero #define K_StatusKSU_U		2			/* User mode in KSU field */
1048*10465441SEvalZero #define K_StatusKSU_S		1			/* Supervisor mode in KSU field */
1049*10465441SEvalZero #define K_StatusKSU_K		0			/* Kernel mode in KSU field */
1050*10465441SEvalZero 
1051*10465441SEvalZero 
1052*10465441SEvalZero /*
1053*10465441SEvalZero  ************************************************************************
1054*10465441SEvalZero  *                C A U S E   R E G I S T E R   ( 1 3 )                 *
1055*10465441SEvalZero  ************************************************************************
1056*10465441SEvalZero  *
1057*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1058*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1059*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1060*10465441SEvalZero  * |B| | C |       |I|W|           |I|I|I|I|I|I|I|I| |         | R |
1061*10465441SEvalZero  * |D| | E | Rsvd  |V|P|    Rsvd   |P|P|P|P|P|P|P|P| | ExcCode | s | Cause
1062*10465441SEvalZero  * | | |   |       | | |           |7|6|5|4|3|2|1|0| |         | v |
1063*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1064*10465441SEvalZero  */
1065*10465441SEvalZero 
1066*10465441SEvalZero #define C0_Cause		$13
1067*10465441SEvalZero #define R_C0_Cause		13
1068*10465441SEvalZero #define C0_CAUSE		C0_Cause		/* OBSOLETE - DO NOT USE IN NEW CODE */
1069*10465441SEvalZero 
1070*10465441SEvalZero #define S_CauseBD		31
1071*10465441SEvalZero #define M_CauseBD		(0x1 << S_CauseBD)
1072*10465441SEvalZero #define S_CauseCE		28
1073*10465441SEvalZero #define M_CauseCE		(0x3<< S_CauseCE)
1074*10465441SEvalZero #define S_CauseIV		23
1075*10465441SEvalZero #define M_CauseIV		(0x1 << S_CauseIV)
1076*10465441SEvalZero #define S_CauseWP		22
1077*10465441SEvalZero #define M_CauseWP		(0x1 << S_CauseWP)
1078*10465441SEvalZero #define S_CauseIP		8
1079*10465441SEvalZero #define M_CauseIP		(0xff << S_CauseIP)
1080*10465441SEvalZero #define S_CauseIPEXT		10
1081*10465441SEvalZero #define M_CauseIPEXT		(0x3f << S_CauseIPEXT)
1082*10465441SEvalZero #define S_CauseIP7		15
1083*10465441SEvalZero #define M_CauseIP7		(0x1 << S_CauseIP7)
1084*10465441SEvalZero #define S_CauseIP6		14
1085*10465441SEvalZero #define M_CauseIP6		(0x1 << S_CauseIP6)
1086*10465441SEvalZero #define S_CauseIP5		13
1087*10465441SEvalZero #define M_CauseIP5		(0x1 << S_CauseIP5)
1088*10465441SEvalZero #define S_CauseIP4		12
1089*10465441SEvalZero #define M_CauseIP4		(0x1 << S_CauseIP4)
1090*10465441SEvalZero #define S_CauseIP3		11
1091*10465441SEvalZero #define M_CauseIP3		(0x1 << S_CauseIP3)
1092*10465441SEvalZero #define S_CauseIP2		10
1093*10465441SEvalZero #define M_CauseIP2		(0x1 << S_CauseIP2)
1094*10465441SEvalZero #define S_CauseIP1		9
1095*10465441SEvalZero #define M_CauseIP1		(0x1 << S_CauseIP1)
1096*10465441SEvalZero #define S_CauseIP0		8
1097*10465441SEvalZero #define M_CauseIP0		(0x1 << S_CauseIP0)
1098*10465441SEvalZero #define S_CauseExcCode		2
1099*10465441SEvalZero #define M_CauseExcCode		(0x1f << S_CauseExcCode)
1100*10465441SEvalZero 
1101*10465441SEvalZero #define M_Cause0Fields		0x4f3f0083
1102*10465441SEvalZero #define M_CauseRFields		0xb000fc7c
1103*10465441SEvalZero 
1104*10465441SEvalZero /*
1105*10465441SEvalZero  * Values in the CE field
1106*10465441SEvalZero  */
1107*10465441SEvalZero #define K_CauseCE0		0			/* Coprocessor 0 in the CE field */
1108*10465441SEvalZero #define K_CauseCE1		1			/* Coprocessor 1 in the CE field */
1109*10465441SEvalZero #define K_CauseCE2		2			/* Coprocessor 2 in the CE field */
1110*10465441SEvalZero #define K_CauseCE3		3			/* Coprocessor 3 in the CE field */
1111*10465441SEvalZero 
1112*10465441SEvalZero /*
1113*10465441SEvalZero  * Values in the ExcCode field
1114*10465441SEvalZero  */
1115*10465441SEvalZero #define	EX_INT			0			/* Interrupt */
1116*10465441SEvalZero #define	EXC_INT			(EX_INT << S_CauseExcCode)
1117*10465441SEvalZero #define	EX_MOD			1			/* TLB modified */
1118*10465441SEvalZero #define	EXC_MOD			(EX_MOD << S_CauseExcCode)
1119*10465441SEvalZero #define	EX_TLBL		        2			/* TLB exception (load or ifetch) */
1120*10465441SEvalZero #define	EXC_TLBL		(EX_TLBL << S_CauseExcCode)
1121*10465441SEvalZero #define	EX_TLBS		        3			/* TLB exception (store) */
1122*10465441SEvalZero #define	EXC_TLBS		(EX_TLBS << S_CauseExcCode)
1123*10465441SEvalZero #define	EX_ADEL		        4			/* Address error (load or ifetch) */
1124*10465441SEvalZero #define	EXC_ADEL		(EX_ADEL << S_CauseExcCode)
1125*10465441SEvalZero #define	EX_ADES		        5			/* Address error (store) */
1126*10465441SEvalZero #define	EXC_ADES		(EX_ADES << S_CauseExcCode)
1127*10465441SEvalZero #define	EX_IBE			6			/* Instruction Bus Error */
1128*10465441SEvalZero #define	EXC_IBE			(EX_IBE << S_CauseExcCode)
1129*10465441SEvalZero #define	EX_DBE			7			/* Data Bus Error */
1130*10465441SEvalZero #define	EXC_DBE			(EX_DBE << S_CauseExcCode)
1131*10465441SEvalZero #define	EX_SYS			8			/* Syscall */
1132*10465441SEvalZero #define	EXC_SYS			(EX_SYS << S_CauseExcCode)
1133*10465441SEvalZero #define	EX_SYSCALL		EX_SYS
1134*10465441SEvalZero #define	EXC_SYSCALL		EXC_SYS
1135*10465441SEvalZero #define	EX_BP			9			/* Breakpoint */
1136*10465441SEvalZero #define	EXC_BP			(EX_BP << S_CauseExcCode)
1137*10465441SEvalZero #define	EX_BREAK		EX_BP
1138*10465441SEvalZero #define	EXC_BREAK		EXC_BP
1139*10465441SEvalZero #define	EX_RI			10			/* Reserved instruction */
1140*10465441SEvalZero #define	EXC_RI			(EX_RI << S_CauseExcCode)
1141*10465441SEvalZero #define	EX_CPU			11			/* CoProcessor Unusable */
1142*10465441SEvalZero #define	EXC_CPU			(EX_CPU << S_CauseExcCode)
1143*10465441SEvalZero #define	EX_OV			12			/* OVerflow */
1144*10465441SEvalZero #define	EXC_OV			(EX_OV << S_CauseExcCode)
1145*10465441SEvalZero #define	EX_TR		    	13			/* Trap instruction */
1146*10465441SEvalZero #define	EXC_TR			(EX_TR << S_CauseExcCode)
1147*10465441SEvalZero #define	EX_TRAP			EX_TR
1148*10465441SEvalZero #define	EXC_TRAP		EXC_TR
1149*10465441SEvalZero #define EX_FPE			15			/* floating point exception */
1150*10465441SEvalZero #define EXC_FPE			(EX_FPE << S_CauseExcCode)
1151*10465441SEvalZero #define EX_C2E			18			/* COP2 exception */
1152*10465441SEvalZero #define EXC_C2E			(EX_C2E << S_CauseExcCode)
1153*10465441SEvalZero #define EX_MDMX			22			/* MDMX exception */
1154*10465441SEvalZero #define EXC_MDMX		(EX_MDMX << S_CauseExcCode)
1155*10465441SEvalZero #define EX_WATCH		23			/* Watch exception */
1156*10465441SEvalZero #define EXC_WATCH		(EX_WATCH << S_CauseExcCode)
1157*10465441SEvalZero #define	EX_MCHECK	        24			/* Machine check exception */
1158*10465441SEvalZero #define	EXC_MCHECK 		(EX_MCHECK << S_CauseExcCode)
1159*10465441SEvalZero #define	EX_CacheErr	        30			/* Cache error caused re-entry to Debug Mode */
1160*10465441SEvalZero #define	EXC_CacheErr 		(EX_CacheErr << S_CauseExcCode)
1161*10465441SEvalZero 
1162*10465441SEvalZero 
1163*10465441SEvalZero /*
1164*10465441SEvalZero  ************************************************************************
1165*10465441SEvalZero  *                   E P C   R E G I S T E R   ( 1 4 )                  *
1166*10465441SEvalZero  ************************************************************************
1167*10465441SEvalZero  *
1168*10465441SEvalZero  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1169*10465441SEvalZero  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1170*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1171*10465441SEvalZero  * |  //                        Exception PC                            | EPC
1172*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1173*10465441SEvalZero  */
1174*10465441SEvalZero 
1175*10465441SEvalZero #define C0_EPC			$14
1176*10465441SEvalZero #define R_C0_EPC		14
1177*10465441SEvalZero 
1178*10465441SEvalZero #define M_EPC0Fields		0x00000000
1179*10465441SEvalZero #define M_EPCRFields		0x00000000
1180*10465441SEvalZero #define M_EPC0Fields64		UNS64Const(0x0000000000000000)
1181*10465441SEvalZero #define M_EPCRFields64		UNS64Const(0x0000000000000000)
1182*10465441SEvalZero 
1183*10465441SEvalZero /*
1184*10465441SEvalZero  ************************************************************************
1185*10465441SEvalZero  *                  P R I D   R E G I S T E R   ( 1 5 )                 *
1186*10465441SEvalZero  ************************************************************************
1187*10465441SEvalZero  *
1188*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1189*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1190*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1191*10465441SEvalZero  * |  Company Opts |   Company ID  |  Procesor ID  |   Revision    | PRId
1192*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1193*10465441SEvalZero  */
1194*10465441SEvalZero 
1195*10465441SEvalZero #define C0_PRId			$15
1196*10465441SEvalZero #define R_C0_PRId		15
1197*10465441SEvalZero #define C0_PRID			C0_PRID			/* OBSOLETE - DO NOT USE IN NEW CODE */
1198*10465441SEvalZero 
1199*10465441SEvalZero #define S_PRIdCoOpt		24			/* Company options (R) */
1200*10465441SEvalZero #define M_PRIdCoOpt		(0xff << S_PRIdCoOpt)
1201*10465441SEvalZero #define S_PRIdCoID		16			/* Company ID (R) */
1202*10465441SEvalZero #define M_PRIdCoID		(0xff << S_PRIdCoID)
1203*10465441SEvalZero #define S_PRIdImp		8			/* Implementation ID (R) */
1204*10465441SEvalZero #define M_PRIdImp		(0xff << S_PRIdImp)
1205*10465441SEvalZero #define S_PRIdRev		0			/* Revision (R) */
1206*10465441SEvalZero #define M_PRIdRev		(0xff << S_PRIdRev)
1207*10465441SEvalZero 
1208*10465441SEvalZero #define M_PRId0Fields		0x00000000
1209*10465441SEvalZero #define M_PRIdRFields		0xffffffff
1210*10465441SEvalZero /*
1211*10465441SEvalZero  * Values in the Company ID field
1212*10465441SEvalZero  */
1213*10465441SEvalZero #define K_PRIdCoID_MIPS	1
1214*10465441SEvalZero #define K_PRIdCoID_Broadcom 2
1215*10465441SEvalZero #define K_PRIdCoID_Alchemy 3
1216*10465441SEvalZero #define K_PRIdCoID_SiByte 4
1217*10465441SEvalZero #define K_PRIdCoID_SandCraft 5
1218*10465441SEvalZero #define K_PRIdCoID_Philips 6
1219*10465441SEvalZero #define K_PRIdCoID_NextAvailable 7 /* Next available encoding */
1220*10465441SEvalZero 
1221*10465441SEvalZero 
1222*10465441SEvalZero /*
1223*10465441SEvalZero  * Values in the implementation number field
1224*10465441SEvalZero  */
1225*10465441SEvalZero #define K_PRIdImp_Jade		0x80
1226*10465441SEvalZero #define K_PRIdImp_Opal		0x81
1227*10465441SEvalZero #define K_PRIdImp_Ruby		0x82
1228*10465441SEvalZero #define K_PRIdImp_JadeLite	0x83
1229*10465441SEvalZero #define K_PRIdImp_4KEc          0x84    /* Emerald with TLB MMU */
1230*10465441SEvalZero #define K_PRIdImp_4KEmp         0x85    /* Emerald with FM MMU */
1231*10465441SEvalZero #define K_PRIdImp_4KSc          0x86    /* Coral */
1232*10465441SEvalZero 
1233*10465441SEvalZero #define K_PRIdImp_R3000		0x01
1234*10465441SEvalZero #define K_PRIdImp_R4000		0x04
1235*10465441SEvalZero #define K_PRIdImp_R10000	0x09
1236*10465441SEvalZero #define K_PRIdImp_R4300		0x0b
1237*10465441SEvalZero #define K_PRIdImp_R5000		0x23
1238*10465441SEvalZero #define K_PRIdImp_R5200		0x28
1239*10465441SEvalZero #define K_PRIdImp_R5400		0x54
1240*10465441SEvalZero 
1241*10465441SEvalZero /*
1242*10465441SEvalZero  ************************************************************************
1243*10465441SEvalZero  *               C O N F I G   R E G I S T E R   ( 1 6 )                *
1244*10465441SEvalZero  ************************************************************************
1245*10465441SEvalZero  *
1246*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1247*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1248*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1249*10465441SEvalZero  * |M|                             |B| A |  A  |               | K | Config
1250*10465441SEvalZero  * | | Reserved for Implementations|E| T |  R  |    Reserved   | 0 |
1251*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1252*10465441SEvalZero  */
1253*10465441SEvalZero 
1254*10465441SEvalZero #define C0_Config		$16
1255*10465441SEvalZero #define R_C0_Config		16
1256*10465441SEvalZero #define C0_CONFIG		C0_Config		/* OBSOLETE - DO NOT USE IN NEW CODE */
1257*10465441SEvalZero 
1258*10465441SEvalZero #define S_ConfigMore		31			/* Additional config registers present (R) */
1259*10465441SEvalZero #define M_ConfigMore		(0x1 << S_ConfigMore)
1260*10465441SEvalZero #define S_ConfigImpl		16			/* Implementation-specific fields */
1261*10465441SEvalZero #define M_ConfigImpl		(0x7fff << S_ConfigImpl)
1262*10465441SEvalZero #define S_ConfigBE		15			/* Denotes big-endian operation (R) */
1263*10465441SEvalZero #define M_ConfigBE		(0x1 << S_ConfigBE)
1264*10465441SEvalZero #define S_ConfigAT		13			/* Architecture type (R) */
1265*10465441SEvalZero #define M_ConfigAT		(0x3 << S_ConfigAT)
1266*10465441SEvalZero #define S_ConfigAR		10			/* Architecture revision (R) */
1267*10465441SEvalZero #define M_ConfigAR		(0x7 << S_ConfigAR)
1268*10465441SEvalZero #define S_ConfigMT		7			/* MMU Type (R) */
1269*10465441SEvalZero #define M_ConfigMT		(0x7 << S_ConfigMT)
1270*10465441SEvalZero #define S_ConfigK0		0			/* Kseg0 coherency algorithm (R/W) */
1271*10465441SEvalZero #define M_ConfigK0		(0x7 << S_ConfigK0)
1272*10465441SEvalZero 
1273*10465441SEvalZero /*
1274*10465441SEvalZero  * The following definitions are technically part of the "reserved for
1275*10465441SEvalZero  * implementations" field, but are the semi-standard definition used in
1276*10465441SEvalZero  * fixed-mapping MMUs to control the cacheability of kuseg and kseg2/3
1277*10465441SEvalZero  * references.  For that reason, they are included here, but may be
1278*10465441SEvalZero  * overridden by true implementation-specific definitions
1279*10465441SEvalZero  */
1280*10465441SEvalZero #define S_ConfigK23		28			/* Kseg2/3 coherency algorithm (FM MMU only) (R/W) */
1281*10465441SEvalZero #define M_ConfigK23		(0x7 << S_ConfigK23)
1282*10465441SEvalZero #define S_ConfigKU		25			/* Kuseg coherency algorithm (FM MMU only) (R/W) */
1283*10465441SEvalZero #define M_ConfigKU		(0x7 << S_ConfigKU)
1284*10465441SEvalZero 
1285*10465441SEvalZero #define M_Config0Fields		0x00000078
1286*10465441SEvalZero #define M_ConfigRFields		0x8000ff80
1287*10465441SEvalZero 
1288*10465441SEvalZero /*
1289*10465441SEvalZero  * Values in the AT field
1290*10465441SEvalZero  */
1291*10465441SEvalZero #define K_ConfigAT_MIPS32	0			/* MIPS32 */
1292*10465441SEvalZero #define K_ConfigAT_MIPS64S	1			/* MIPS64 with 32-bit addresses */
1293*10465441SEvalZero #define K_ConfigAT_MIPS64	2			/* MIPS64 with 32/64-bit addresses */
1294*10465441SEvalZero 
1295*10465441SEvalZero /*
1296*10465441SEvalZero  * Values in the MT field
1297*10465441SEvalZero  */
1298*10465441SEvalZero #define K_ConfigMT_NoMMU	0			/* No MMU */
1299*10465441SEvalZero #define K_ConfigMT_TLBMMU	1			/* Standard TLB MMU */
1300*10465441SEvalZero #define K_ConfigMT_BATMMU	2			/* Standard BAT MMU */
1301*10465441SEvalZero #define K_ConfigMT_FMMMU	3			/* Standard Fixed Mapping MMU */
1302*10465441SEvalZero 
1303*10465441SEvalZero 
1304*10465441SEvalZero /*
1305*10465441SEvalZero  ************************************************************************
1306*10465441SEvalZero  *         C O N F I G 1   R E G I S T E R   ( 1 6, SELECT 1 )          *
1307*10465441SEvalZero  ************************************************************************
1308*10465441SEvalZero  *
1309*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1310*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1311*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1312*10465441SEvalZero  * |M|  MMU Size |  IS |  IL |  IA |  DS |  DL |  DA |C|M|P|W|C|E|F| Config1
1313*10465441SEvalZero  * | |           |     |     |     |     |     |     |2|D|C|R|A|P|P|
1314*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1315*10465441SEvalZero  */
1316*10465441SEvalZero 
1317*10465441SEvalZero #define C0_Config1		$16,1
1318*10465441SEvalZero #define R_C0_Config1		16
1319*10465441SEvalZero 
1320*10465441SEvalZero #define S_Config1More		31			/* Additional Config registers present (R) */
1321*10465441SEvalZero #define M_Config1More		(0x1 << S_Config1More)
1322*10465441SEvalZero #define S_Config1MMUSize 	25			/* Number of MMU entries - 1 (R) */
1323*10465441SEvalZero #define M_Config1MMUSize 	(0x3f << S_Config1MMUSize)
1324*10465441SEvalZero #define S_Config1IS		22			/* Icache sets per way (R) */
1325*10465441SEvalZero #define M_Config1IS		(0x7 << S_Config1IS)
1326*10465441SEvalZero #define S_Config1IL		19			/* Icache line size (R) */
1327*10465441SEvalZero #define M_Config1IL		(0x7 << S_Config1IL)
1328*10465441SEvalZero #define S_Config1IA		16			/* Icache associativity - 1 (R) */
1329*10465441SEvalZero #define M_Config1IA		(0x7 << S_Config1IA)
1330*10465441SEvalZero #define S_Config1DS		13			/* Dcache sets per way (R) */
1331*10465441SEvalZero #define M_Config1DS		(0x7 << S_Config1DS)
1332*10465441SEvalZero #define S_Config1DL		10			/* Dcache line size (R) */
1333*10465441SEvalZero #define M_Config1DL		(0x7 << S_Config1DL)
1334*10465441SEvalZero #define S_Config1DA		7			/* Dcache associativity (R) */
1335*10465441SEvalZero #define M_Config1DA		(0x7 << S_Config1DA)
1336*10465441SEvalZero #define S_Config1C2		6			/* Coprocessor 2 present (R) */
1337*10465441SEvalZero #define M_Config1C2		(0x1 << S_Config1C2)
1338*10465441SEvalZero #define S_Config1MD		5			/* Denotes MDMX present (R) */
1339*10465441SEvalZero #define M_Config1MD		(0x1 << S_Config1MD)
1340*10465441SEvalZero #define S_Config1PC		4			/* Denotes performance counters present (R) */
1341*10465441SEvalZero #define M_Config1PC		(0x1 << S_Config1PC)
1342*10465441SEvalZero #define S_Config1WR		3			/* Denotes watch registers present (R) */
1343*10465441SEvalZero #define M_Config1WR		(0x1 << S_Config1WR)
1344*10465441SEvalZero #define S_Config1CA		2			/* Denotes MIPS-16 present (R) */
1345*10465441SEvalZero #define M_Config1CA		(0x1 << S_Config1CA)
1346*10465441SEvalZero #define S_Config1EP		1			/* Denotes EJTAG present (R) */
1347*10465441SEvalZero #define M_Config1EP		(0x1 << S_Config1EP)
1348*10465441SEvalZero #define S_Config1FP		0			/* Denotes floating point present (R) */
1349*10465441SEvalZero #define M_Config1FP		(0x1 << S_Config1FP)
1350*10465441SEvalZero 
1351*10465441SEvalZero #define M_Config10Fields	0x00000060
1352*10465441SEvalZero #define M_Config1RFields	0x7fffff9f
1353*10465441SEvalZero 
1354*10465441SEvalZero /*
1355*10465441SEvalZero  * The following macro generates a table that is indexed
1356*10465441SEvalZero  * by the Icache or Dcache sets field in Config1 and
1357*10465441SEvalZero  * contains the decoded value of sets per way
1358*10465441SEvalZero  */
1359*10465441SEvalZero #define Config1CacheSets()	\
1360*10465441SEvalZero 	HALF(64);		\
1361*10465441SEvalZero 	HALF(128);		\
1362*10465441SEvalZero 	HALF(256);		\
1363*10465441SEvalZero 	HALF(512);		\
1364*10465441SEvalZero 	HALF(1024);		\
1365*10465441SEvalZero 	HALF(2048);		\
1366*10465441SEvalZero 	HALF(4096);		\
1367*10465441SEvalZero 	HALF(8192);
1368*10465441SEvalZero 
1369*10465441SEvalZero /*
1370*10465441SEvalZero  * The following macro generates a table that is indexed
1371*10465441SEvalZero  * by the Icache or Dcache line size field in Config1 and
1372*10465441SEvalZero  * contains the decoded value of the cache line size, in bytes
1373*10465441SEvalZero  */
1374*10465441SEvalZero #define Config1CacheLineSize()	\
1375*10465441SEvalZero 	HALF(0);		\
1376*10465441SEvalZero 	HALF(4);		\
1377*10465441SEvalZero 	HALF(8);		\
1378*10465441SEvalZero 	HALF(16);		\
1379*10465441SEvalZero 	HALF(32);		\
1380*10465441SEvalZero 	HALF(64);		\
1381*10465441SEvalZero 	HALF(128);		\
1382*10465441SEvalZero 	HALF(256);
1383*10465441SEvalZero 
1384*10465441SEvalZero 
1385*10465441SEvalZero /*
1386*10465441SEvalZero  ************************************************************************
1387*10465441SEvalZero  *         C O N F I G 2   R E G I S T E R   ( 1 6, SELECT 2 )          *
1388*10465441SEvalZero  ************************************************************************
1389*10465441SEvalZero  *
1390*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1391*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1392*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1393*10465441SEvalZero  * |M|           |     |     |     |     |     |     | | | | | |S|T| Config1
1394*10465441SEvalZero  * | |           |     |     |     |     |     |     | | | | | |M|L|
1395*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1396*10465441SEvalZero  */
1397*10465441SEvalZero 
1398*10465441SEvalZero #define C0_Config2		$16,2
1399*10465441SEvalZero #define R_C0_Config2		16
1400*10465441SEvalZero 
1401*10465441SEvalZero #define S_Config2More		31			/* Additional Config registers present (R) */
1402*10465441SEvalZero #define M_Config2More		(0x1 << S_Config2More)
1403*10465441SEvalZero #define S_Config2SM		1			/* Denotes SmartMIPS ASE present (R) */
1404*10465441SEvalZero #define M_Config2SM		(0x1 << S_Config2SM)
1405*10465441SEvalZero #define S_Config2TL		0			/* Denotes Tracing Logic present (R) */
1406*10465441SEvalZero #define M_Config2TL		(0x1 << S_Config2TL)
1407*10465441SEvalZero 
1408*10465441SEvalZero #define M_Config20Fields	0xfffffffc
1409*10465441SEvalZero #define M_Config2RFields	0x00000003
1410*10465441SEvalZero 
1411*10465441SEvalZero /*
1412*10465441SEvalZero  ************************************************************************
1413*10465441SEvalZero  *                L L A D D R   R E G I S T E R   ( 1 7 )               *
1414*10465441SEvalZero  ************************************************************************
1415*10465441SEvalZero  *
1416*10465441SEvalZero  *  6 6    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1417*10465441SEvalZero  *  3 2    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1418*10465441SEvalZero  * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1419*10465441SEvalZero  * |    //                      LL Physical Address                       | LLAddr
1420*10465441SEvalZero  * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1421*10465441SEvalZero  */
1422*10465441SEvalZero 
1423*10465441SEvalZero #define C0_LLAddr		$17
1424*10465441SEvalZero #define R_C0_LLAddr		17
1425*10465441SEvalZero #define C0_LLADDR		C0_LLAddr		/* OBSOLETE - DO NOT USE IN NEW CODE */
1426*10465441SEvalZero 
1427*10465441SEvalZero #define M_LLAddr0Fields		0x00000000
1428*10465441SEvalZero #define M_LLAddrRFields		0x00000000
1429*10465441SEvalZero #define M_LLAddr0Fields64	UNS64Const(0x0000000000000000)
1430*10465441SEvalZero #define M_LLAddrRFields64	UNS64Const(0x0000000000000000)
1431*10465441SEvalZero 
1432*10465441SEvalZero 
1433*10465441SEvalZero /*
1434*10465441SEvalZero  ************************************************************************
1435*10465441SEvalZero  *               W A T C H L O   R E G I S T E R   ( 1 8 )              *
1436*10465441SEvalZero  ************************************************************************
1437*10465441SEvalZero  *
1438*10465441SEvalZero  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1439*10465441SEvalZero  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1440*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1441*10465441SEvalZero  * |  //                    Watch Virtual Address                 |I|R|W| WatchLo
1442*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1443*10465441SEvalZero  */
1444*10465441SEvalZero 
1445*10465441SEvalZero #define C0_WatchLo		$18
1446*10465441SEvalZero #define R_C0_WatchLo		18
1447*10465441SEvalZero #define C0_WATCHLO		C0_WatchLo		/* OBSOLETE - DO NOT USE IN NEW CODE */
1448*10465441SEvalZero 
1449*10465441SEvalZero #define S_WatchLoVAddr		3			/* Watch virtual address (R/W) */
1450*10465441SEvalZero #define M_WatchLoVAddr		(0x1fffffff << S_WatchLoVAddr)
1451*10465441SEvalZero #define S_WatchLoI		2			/* Enable Istream watch (R/W) */
1452*10465441SEvalZero #define M_WatchLoI		(0x1 << S_WatchLoI)
1453*10465441SEvalZero #define S_WatchLoR		1			/* Enable data read watch (R/W) */
1454*10465441SEvalZero #define M_WatchLoR		(0x1 << S_WatchLoR)
1455*10465441SEvalZero #define S_WatchLoW		0			/* Enable data write watch (R/W) */
1456*10465441SEvalZero #define M_WatchLoW		(0x1 << S_WatchLoW)
1457*10465441SEvalZero 
1458*10465441SEvalZero #define M_WatchLo0Fields	0x00000000
1459*10465441SEvalZero #define M_WatchLoRFields	0x00000000
1460*10465441SEvalZero #define M_WatchLo0Fields64	UNS64Const(0x0000000000000000)
1461*10465441SEvalZero #define M_WatchLoRFields64	UNS64Const(0x0000000000000000)
1462*10465441SEvalZero 
1463*10465441SEvalZero #define M_WatchLoEnables	(M_WatchLoI | M_WatchLoR | M_WatchLoW)
1464*10465441SEvalZero 
1465*10465441SEvalZero 
1466*10465441SEvalZero /*
1467*10465441SEvalZero  ************************************************************************
1468*10465441SEvalZero  *               W A T C H H I   R E G I S T E R   ( 1 9 )              *
1469*10465441SEvalZero  ************************************************************************
1470*10465441SEvalZero  *
1471*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1472*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1473*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1474*10465441SEvalZero  * |M|G|    Rsvd   |      ASID     |  Rsvd |       Mask      |  0  | WatchHi
1475*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1476*10465441SEvalZero  */
1477*10465441SEvalZero 
1478*10465441SEvalZero #define C0_WatchHi		$19
1479*10465441SEvalZero #define R_C0_WatchHi		19
1480*10465441SEvalZero #define C0_WATCHHI		C0_WatchHi		/* OBSOLETE - DO NOT USE IN NEW CODE */
1481*10465441SEvalZero 
1482*10465441SEvalZero #define S_WatchHiM		31			/* Denotes additional Watch registers present (R) */
1483*10465441SEvalZero #define M_WatchHiM		(0x1 << S_WatchHiM)
1484*10465441SEvalZero #define S_WatchHiG		30			/* Enable ASID-independent Watch match (R/W) */
1485*10465441SEvalZero #define M_WatchHiG		(0x1 << S_WatchHiG)
1486*10465441SEvalZero #define S_WatchHiASID		16			/* ASID value to match (R/W) */
1487*10465441SEvalZero #define M_WatchHiASID		(0xff << S_WatchHiASID)
1488*10465441SEvalZero #define S_WatchHiMask		3			/* Address inhibit mask (R/W) */
1489*10465441SEvalZero #define M_WatchHiMask		(0x1ff << S_WatchHiMask)
1490*10465441SEvalZero 
1491*10465441SEvalZero #define M_WatchHi0Fields	0x3f00f007
1492*10465441SEvalZero #define M_WatchHiRFields	0x80000000
1493*10465441SEvalZero 
1494*10465441SEvalZero 
1495*10465441SEvalZero /*
1496*10465441SEvalZero  ************************************************************************
1497*10465441SEvalZero  *             X C O N T E X T   R E G I S T E R   ( 2 0 )              *
1498*10465441SEvalZero  ************************************************************************
1499*10465441SEvalZero  *
1500*10465441SEvalZero  *  6 // 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1501*10465441SEvalZero  *  3 // 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1502*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1503*10465441SEvalZero  * |  // PTEBase  | R |                      BadVPN2<39:13>                 |   0   | XContext
1504*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1505*10465441SEvalZero  */
1506*10465441SEvalZero 
1507*10465441SEvalZero #define C0_XContext		$20
1508*10465441SEvalZero #define R_C0_XContext		20
1509*10465441SEvalZero #define C0_EXTCTXT		C0_XContext		/* OBSOLETE - DO NOT USE IN NEW CODE */
1510*10465441SEvalZero 
1511*10465441SEvalZero #define S_XContextBadVPN2	4			/* BadVPN2 (R) */
1512*10465441SEvalZero #define S_XContextBadVPN	S_XContextBadVPN2
1513*10465441SEvalZero 
1514*10465441SEvalZero #define M_XContext0Fields	0x0000000f
1515*10465441SEvalZero 
1516*10465441SEvalZero 
1517*10465441SEvalZero /*
1518*10465441SEvalZero  ************************************************************************
1519*10465441SEvalZero  *                 D E B U G   R E G I S T E R   ( 2 3 )                *
1520*10465441SEvalZero  ************************************************************************
1521*10465441SEvalZero  *
1522*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1523*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1524*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1525*10465441SEvalZero  * |D|D|N|L|D|H|C|I|M|C|D|I|D|D|     |         |N|S|   |D|D|D|D|D|D|
1526*10465441SEvalZero  * |B|M|o|S|o|a|o|B|C|a|B|E|D|D|EJTAG|DExcCode |o|S|   |I|I|D|D|B|S|
1527*10465441SEvalZero  * |D| |D|N|z|l|u|u|h|c|u|X|B|B| ver |         |S|t|   |N|B|B|B|p|S|
1528*10465441SEvalZero  * | | |C|M|e|t|n|s|e|h|s|I|S|L|     |         |S| | 0 |T| |S|L| | | Debug
1529*10465441SEvalZero  * | | |R| | | |t|E|c|e|E| |I|I|     |         |t| |   | | | | | | |
1530*10465441SEvalZero  * | | | | | | |D|P|k|E|P| |m|m|     |         | | |   | | | | | | |
1531*10465441SEvalZero  * | | | | | | |M| |P|P| | |p|p|     |         | | |   | | | | | | |
1532*10465441SEvalZero  * | | | | | | | | | | | | |r|r|     |         | | |   | | | | | | |
1533*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1534*10465441SEvalZero  */
1535*10465441SEvalZero 
1536*10465441SEvalZero #define C0_Debug		$23	/* EJTAG */
1537*10465441SEvalZero #define R_C0_Debug		23
1538*10465441SEvalZero 
1539*10465441SEvalZero #define S_DebugDBD		31			/* Debug branch delay (R) */
1540*10465441SEvalZero #define M_DebugDBD		(0x1 << S_DebugDBD)
1541*10465441SEvalZero #define S_DebugDM		30			/* Debug mode (R) */
1542*10465441SEvalZero #define M_DebugDM		(0x1 << S_DebugDM)
1543*10465441SEvalZero #define S_DebugNoDCR		29			/* No debug control register present (R) */
1544*10465441SEvalZero #define M_DebugNoDCR		(0x1 << S_DebugNoDCR)
1545*10465441SEvalZero #define S_DebugLSNM		28			/* Load/Store Normal Memory (R/W) */
1546*10465441SEvalZero #define M_DebugLSNM		(0x1 << S_DebugLSNM)
1547*10465441SEvalZero #define S_DebugDoze		27			/* Doze (R) */
1548*10465441SEvalZero #define M_DebugDoze		(0x1 << S_DebugDoze)
1549*10465441SEvalZero #define S_DebugHalt		26			/* Halt (R) */
1550*10465441SEvalZero #define M_DebugHalt		(0x1 << S_DebugHalt)
1551*10465441SEvalZero #define S_DebugCountDM		25			/* Count register behavior in debug mode (R/W) */
1552*10465441SEvalZero #define M_DebugCountDM		(0x1 << S_DebugCountDM)
1553*10465441SEvalZero #define S_DebugIBusEP		24			/* Imprecise Instn Bus Error Pending (R/W) */
1554*10465441SEvalZero #define M_DebugIBusEP		(0x1 << S_DebugIBusEP)
1555*10465441SEvalZero #define S_DebugMCheckP		23			/* Imprecise Machine Check Pending (R/W) */
1556*10465441SEvalZero #define M_DebugMCheckP		(0x1 << S_DebugMCheckP)
1557*10465441SEvalZero #define S_DebugCacheEP		22			/* Imprecise Cache Error Pending (R/W) */
1558*10465441SEvalZero #define M_DebugCacheEP		(0x1 << S_DebugCacheEP)
1559*10465441SEvalZero #define S_DebugDBusEP		21			/* Imprecise Data Bus Error Pending (R/W) */
1560*10465441SEvalZero #define M_DebugDBusEP		(0x1 << S_DebugDBusEP)
1561*10465441SEvalZero #define S_DebugIEXI		20			/* Imprecise Exception Inhibit (R/W) */
1562*10465441SEvalZero #define M_DebugIEXI		(0x1 << S_DebugIEXI)
1563*10465441SEvalZero #define S_DebugDDBSImpr		19			/* Debug data break store imprecise (R) */
1564*10465441SEvalZero #define M_DebugDDBSImpr		(0x1 << S_DebugDDBSImpr)
1565*10465441SEvalZero #define S_DebugDDBLImpr		18			/* Debug data break load imprecise (R) */
1566*10465441SEvalZero #define M_DebugDDBLImpr		(0x1 << S_DebugDDBLImpr)
1567*10465441SEvalZero #define S_DebugEJTAGver		15			/* EJTAG version number (R) */
1568*10465441SEvalZero #define M_DebugEJTAGver		(0x7 << S_DebugEJTAGver)
1569*10465441SEvalZero #define S_DebugDExcCode		10			/* Debug exception code (R) */
1570*10465441SEvalZero #define M_DebugDExcCode		(0x1f << S_DebugDExcCode)
1571*10465441SEvalZero #define S_DebugNoSSt		9			/* No single step implemented (R) */
1572*10465441SEvalZero #define M_DebugNoSSt		(0x1 << S_DebugNoSSt)
1573*10465441SEvalZero #define S_DebugSSt		8			/* Single step enable (R/W) */
1574*10465441SEvalZero #define M_DebugSSt		(0x1 << S_DebugSSt)
1575*10465441SEvalZero #define S_DebugDINT		5			/* Debug interrupt (R) */
1576*10465441SEvalZero #define M_DebugDINT		(0x1 << S_DebugDINT)
1577*10465441SEvalZero #define S_DebugDIB		4			/* Debug instruction break (R) */
1578*10465441SEvalZero #define M_DebugDIB		(0x1 << S_DebugDIB)
1579*10465441SEvalZero #define S_DebugDDBS		3			/* Debug data break store (R) */
1580*10465441SEvalZero #define M_DebugDDBS		(0x1 << S_DebugDDBS)
1581*10465441SEvalZero #define S_DebugDDBL		2			/* Debug data break load (R) */
1582*10465441SEvalZero #define M_DebugDDBL		(0x1 << S_DebugDDBL)
1583*10465441SEvalZero #define S_DebugDBp		1			/* Debug breakpoint (R) */
1584*10465441SEvalZero #define M_DebugDBp		(0x1 << S_DebugDBp)
1585*10465441SEvalZero #define S_DebugDSS		0			/* Debug single step (R) */
1586*10465441SEvalZero #define M_DebugDSS		(0x1 << S_DebugDSS)
1587*10465441SEvalZero 
1588*10465441SEvalZero #define M_Debug0Fields	0x01f000c0
1589*10465441SEvalZero #define M_DebugRFields	0xec0ffe3f
1590*10465441SEvalZero 
1591*10465441SEvalZero 
1592*10465441SEvalZero /*
1593*10465441SEvalZero  ************************************************************************
1594*10465441SEvalZero  *                 D E P C   R E G I S T E R   ( 2 4 )                  *
1595*10465441SEvalZero  ************************************************************************
1596*10465441SEvalZero  *
1597*10465441SEvalZero  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1598*10465441SEvalZero  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1599*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1600*10465441SEvalZero  * |  //                  EJTAG Debug Exception PC                      | DEPC
1601*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1602*10465441SEvalZero  */
1603*10465441SEvalZero 
1604*10465441SEvalZero 
1605*10465441SEvalZero #define C0_DEPC			$24
1606*10465441SEvalZero #define R_C0_DEPC		24
1607*10465441SEvalZero 
1608*10465441SEvalZero #define M_DEEPC0Fields		0x00000000
1609*10465441SEvalZero #define M_DEEPCRFields		0x00000000
1610*10465441SEvalZero #define M_DEEPC0Fields64	UNS64Const(0x0000000000000000)
1611*10465441SEvalZero #define M_DEEPCRFields64	UNS64Const(0x0000000000000000)
1612*10465441SEvalZero 
1613*10465441SEvalZero 
1614*10465441SEvalZero /*
1615*10465441SEvalZero  ************************************************************************
1616*10465441SEvalZero  *              P E R F C N T   R E G I S T E R   ( 2 5 )               *
1617*10465441SEvalZero  ************************************************************************
1618*10465441SEvalZero  *
1619*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1620*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1621*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1622*10465441SEvalZero  * | |                                       |           |I| | | |E|
1623*10465441SEvalZero  * |M|                    0                  |   Event   |E|U|S|K|X| PerfCnt
1624*10465441SEvalZero  * | |                                       |           | | | | |L|
1625*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1626*10465441SEvalZero  *
1627*10465441SEvalZero  *
1628*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1629*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1630*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1631*10465441SEvalZero  * |                          Event Count                          | PerfCnt
1632*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1633*10465441SEvalZero  */
1634*10465441SEvalZero 
1635*10465441SEvalZero #define C0_PerfCnt		$25
1636*10465441SEvalZero #define R_C0_PerfCnt		25
1637*10465441SEvalZero #define C0_PRFCNT0		C0_PerfCnt		/* OBSOLETE - DO NOT USE IN NEW CODE */
1638*10465441SEvalZero #define C0_PRFCNT1		C0_PerfCnt		/* OBSOLETE - DO NOT USE IN NEW CODE */
1639*10465441SEvalZero 
1640*10465441SEvalZero #define S_PerfCntM		31			/* More performance counters exist (R) */
1641*10465441SEvalZero #define M_PerfCntM		(1 << S_PerfCntM)
1642*10465441SEvalZero #define S_PerfCntEvent		5			/* Enabled event (R/W) */
1643*10465441SEvalZero #define M_PerfCntEvent		(0x3f << S_PerfCntEvent)
1644*10465441SEvalZero #define S_PerfCntIE		4			/* Interrupt Enable (R/W) */
1645*10465441SEvalZero #define M_PerfCntIE		(1 << S_PerfCntIE)
1646*10465441SEvalZero #define S_PerfCntU		3			/* Enable counting in User Mode (R/W) */
1647*10465441SEvalZero #define M_PerfCntU		(1 << S_PerfCntU)
1648*10465441SEvalZero #define S_PerfCntS		2			/* Enable counting in Supervisor Mode (R/W) */
1649*10465441SEvalZero #define M_PerfCntS		(1 << S_PerfCntS)
1650*10465441SEvalZero #define S_PerfCntK		1			/* Enable counting in Kernel Mode (R/W) */
1651*10465441SEvalZero #define M_PerfCntK		(1 << S_PerfCntK)
1652*10465441SEvalZero #define S_PerfCntEXL		0			/* Enable counting while EXL==1 (R/W) */
1653*10465441SEvalZero #define M_PerfCntEXL		(1 << S_PerfCntEXL)
1654*10465441SEvalZero 
1655*10465441SEvalZero #define M_PerfCnt0Fields	0x7ffff800
1656*10465441SEvalZero #define M_PerfCntRFields	0x80000000
1657*10465441SEvalZero 
1658*10465441SEvalZero 
1659*10465441SEvalZero /*
1660*10465441SEvalZero  ************************************************************************
1661*10465441SEvalZero  *               E R R C T L   R E G I S T E R   ( 2 6 )                *
1662*10465441SEvalZero  ************************************************************************
1663*10465441SEvalZero  *
1664*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1665*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1666*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1667*10465441SEvalZero  * |                        Error Control                          | ErrCtl
1668*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1669*10465441SEvalZero  */
1670*10465441SEvalZero 
1671*10465441SEvalZero #define C0_ErrCtl		$26
1672*10465441SEvalZero #define R_C0_ErrCtl		26
1673*10465441SEvalZero #define C0_ECC			$26		/* OBSOLETE - DO NOT USE IN NEW CODE */
1674*10465441SEvalZero #define R_C0_ECC		26		/* OBSOLETE - DO NOT USE IN NEW CODE */
1675*10465441SEvalZero 
1676*10465441SEvalZero #define M_ErrCtl0Fields		0x00000000
1677*10465441SEvalZero #define M_ErrCtlRFields		0x00000000
1678*10465441SEvalZero 
1679*10465441SEvalZero 
1680*10465441SEvalZero /*
1681*10465441SEvalZero  ************************************************************************
1682*10465441SEvalZero  *             C A C H E E R R   R E G I S T E R   ( 2 7 )              * CacheErr
1683*10465441SEvalZero  ************************************************************************
1684*10465441SEvalZero  *
1685*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1686*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1687*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1688*10465441SEvalZero  * |                     Cache Error Control                       | CacheErr
1689*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1690*10465441SEvalZero  */
1691*10465441SEvalZero 
1692*10465441SEvalZero #define C0_CacheErr		$27
1693*10465441SEvalZero #define R_C0_CacheErr		27
1694*10465441SEvalZero #define C0_CACHE_ERR		C0_CacheErr		/* OBSOLETE - DO NOT USE IN NEW CODE */
1695*10465441SEvalZero 
1696*10465441SEvalZero #define M_CacheErr0Fields	0x00000000
1697*10465441SEvalZero #define M_CachErrRFields	0x00000000
1698*10465441SEvalZero 
1699*10465441SEvalZero 
1700*10465441SEvalZero /*
1701*10465441SEvalZero  ************************************************************************
1702*10465441SEvalZero  *                T A G L O   R E G I S T E R   ( 2 8 )                 * TagLo
1703*10465441SEvalZero  ************************************************************************
1704*10465441SEvalZero  *
1705*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1706*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1707*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1708*10465441SEvalZero  * |                            TagLo                              | TagLo
1709*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1710*10465441SEvalZero  */
1711*10465441SEvalZero 
1712*10465441SEvalZero #define C0_TagLo		$28
1713*10465441SEvalZero #define R_C0_TagLo		28
1714*10465441SEvalZero #define C0_TAGLO		C0_TagLo		/* OBSOLETE - DO NOT USE IN NEW CODE */
1715*10465441SEvalZero 
1716*10465441SEvalZero /*
1717*10465441SEvalZero  * Some implementations use separate TagLo registers for the
1718*10465441SEvalZero  * instruction and data caches.  In those cases, the following
1719*10465441SEvalZero  * definitions can be used in relevant code
1720*10465441SEvalZero  */
1721*10465441SEvalZero 
1722*10465441SEvalZero #define C0_ITagLo		$28,0
1723*10465441SEvalZero #define C0_DTagLo		$28,2
1724*10465441SEvalZero 
1725*10465441SEvalZero #define M_TagLo0Fields		0x00000000
1726*10465441SEvalZero #define M_TagLoRFields		0x00000000
1727*10465441SEvalZero 
1728*10465441SEvalZero 
1729*10465441SEvalZero /*
1730*10465441SEvalZero  ************************************************************************
1731*10465441SEvalZero  *        D A T A L O   R E G I S T E R   ( 2 8, SELECT 1 )             * DataLo
1732*10465441SEvalZero  ************************************************************************
1733*10465441SEvalZero  *
1734*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1735*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1736*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1737*10465441SEvalZero  * |                           DataLo                              | DataLo
1738*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1739*10465441SEvalZero  */
1740*10465441SEvalZero 
1741*10465441SEvalZero #define C0_DataLo		$28,1
1742*10465441SEvalZero #define R_C0_DataLo		28
1743*10465441SEvalZero 
1744*10465441SEvalZero /*
1745*10465441SEvalZero  * Some implementations use separate DataLo registers for the
1746*10465441SEvalZero  * instruction and data caches.  In those cases, the following
1747*10465441SEvalZero  * definitions can be used in relevant code
1748*10465441SEvalZero  */
1749*10465441SEvalZero 
1750*10465441SEvalZero #define C0_IDataLo		$28,1
1751*10465441SEvalZero #define C0_DDataLo		$28,3
1752*10465441SEvalZero 
1753*10465441SEvalZero #define M_DataLo0Fields		0x00000000
1754*10465441SEvalZero #define M_DataLoRFields		0xffffffff
1755*10465441SEvalZero 
1756*10465441SEvalZero 
1757*10465441SEvalZero /*
1758*10465441SEvalZero  ************************************************************************
1759*10465441SEvalZero  *                T A G H I   R E G I S T E R   ( 2 9 )                 * TagHi
1760*10465441SEvalZero  ************************************************************************
1761*10465441SEvalZero  *
1762*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1763*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1764*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1765*10465441SEvalZero  * |                            TagHi                              | TagHi
1766*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1767*10465441SEvalZero  */
1768*10465441SEvalZero 
1769*10465441SEvalZero #define C0_TagHi		$29
1770*10465441SEvalZero #define R_C0_TagHi		29
1771*10465441SEvalZero #define C0_TAGHI		C0_TagHi		/* OBSOLETE - DO NOT USE IN NEW CODE */
1772*10465441SEvalZero 
1773*10465441SEvalZero /*
1774*10465441SEvalZero  * Some implementations use separate TagHi registers for the
1775*10465441SEvalZero  * instruction and data caches.  In those cases, the following
1776*10465441SEvalZero  * definitions can be used in relevant code
1777*10465441SEvalZero  */
1778*10465441SEvalZero 
1779*10465441SEvalZero #define C0_ITagHi		$29,0
1780*10465441SEvalZero #define C0_DTagHi		$29,2
1781*10465441SEvalZero 
1782*10465441SEvalZero #define M_TagHi0Fields		0x00000000
1783*10465441SEvalZero #define M_TagHiRFields		0x00000000
1784*10465441SEvalZero 
1785*10465441SEvalZero 
1786*10465441SEvalZero /*
1787*10465441SEvalZero  ************************************************************************
1788*10465441SEvalZero  *        D A T A H I   R E G I S T E R   ( 2 9, SELECT 1 )             * DataHi
1789*10465441SEvalZero  ************************************************************************
1790*10465441SEvalZero  *
1791*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1792*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1793*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1794*10465441SEvalZero  * |                           DataHi                              | DataHi
1795*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1796*10465441SEvalZero  */
1797*10465441SEvalZero 
1798*10465441SEvalZero #define C0_DataHi		$29,1
1799*10465441SEvalZero #define R_C0_DataHi		29
1800*10465441SEvalZero 
1801*10465441SEvalZero /*
1802*10465441SEvalZero  * Some implementations use separate DataHi registers for the
1803*10465441SEvalZero  * instruction and data caches.  In those cases, the following
1804*10465441SEvalZero  * definitions can be used in relevant code
1805*10465441SEvalZero  */
1806*10465441SEvalZero 
1807*10465441SEvalZero #define C0_IDataHi		$29,1
1808*10465441SEvalZero #define C0_DDataHi		$29,3
1809*10465441SEvalZero 
1810*10465441SEvalZero #define M_DataHi0Fields		0x00000000
1811*10465441SEvalZero #define M_DataHiRFields		0xffffffff
1812*10465441SEvalZero 
1813*10465441SEvalZero 
1814*10465441SEvalZero /*
1815*10465441SEvalZero  ************************************************************************
1816*10465441SEvalZero  *            E R R O R E P C   R E G I S T E R   ( 3 0 )               *
1817*10465441SEvalZero  ************************************************************************
1818*10465441SEvalZero  *
1819*10465441SEvalZero  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1820*10465441SEvalZero  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1821*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1822*10465441SEvalZero  * |  //                          Error PC                              | ErrorEPC
1823*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1824*10465441SEvalZero  */
1825*10465441SEvalZero 
1826*10465441SEvalZero #define C0_ErrorEPC		$30
1827*10465441SEvalZero #define R_C0_ErrorEPC		30
1828*10465441SEvalZero #define C0_ERROR_EPC		C0_ErrorEPC		/* OBSOLETE - DO NOT USE IN NEW CODE */
1829*10465441SEvalZero 
1830*10465441SEvalZero #define M_ErrorEPC0Fields	0x00000000
1831*10465441SEvalZero #define M_ErrorEPCRFields	0x00000000
1832*10465441SEvalZero #define M_ErrorEPC0Fields64	UNS64Const(0x0000000000000000)
1833*10465441SEvalZero #define M_ErrorEPCRFields64	UNS64Const(0x0000000000000000)
1834*10465441SEvalZero 
1835*10465441SEvalZero 
1836*10465441SEvalZero /*
1837*10465441SEvalZero  ************************************************************************
1838*10465441SEvalZero  *            D E S A V E   R E G I S T E R   ( 3 1 )                   *
1839*10465441SEvalZero  ************************************************************************
1840*10465441SEvalZero  *
1841*10465441SEvalZero  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1842*10465441SEvalZero  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
1843*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1844*10465441SEvalZero  * |  //                   EJTAG Register Save Value                    | DESAVE
1845*10465441SEvalZero  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1846*10465441SEvalZero  */
1847*10465441SEvalZero 
1848*10465441SEvalZero #define C0_DESAVE		$31
1849*10465441SEvalZero #define R_C0_DESAVE		31
1850*10465441SEvalZero 
1851*10465441SEvalZero #define M_DESAVE0Fields		0x00000000
1852*10465441SEvalZero #define M_DESAVERFields		0x00000000
1853*10465441SEvalZero #define M_DESAVE0Fields64	UNS64Const(0x0000000000000000)
1854*10465441SEvalZero #define M_DESAVERFields64	UNS64Const(0x0000000000000000)
1855*10465441SEvalZero 
1856*10465441SEvalZero 
1857*10465441SEvalZero /*
1858*10465441SEvalZero  *************************************************************************
1859*10465441SEvalZero  *             C P 1   R E G I S T E R   D E F I N I T I O N S           *
1860*10465441SEvalZero  *************************************************************************
1861*10465441SEvalZero  */
1862*10465441SEvalZero 
1863*10465441SEvalZero 
1864*10465441SEvalZero /*
1865*10465441SEvalZero  *************************************************************************
1866*10465441SEvalZero  *                  H A R D W A R E   F P R   N A M E S                  *
1867*10465441SEvalZero  *************************************************************************
1868*10465441SEvalZero  */
1869*10465441SEvalZero 
1870*10465441SEvalZero #define fp0			$f0
1871*10465441SEvalZero #define fp1			$f1
1872*10465441SEvalZero #define fp2			$f2
1873*10465441SEvalZero #define fp3			$f3
1874*10465441SEvalZero #define fp4			$f4
1875*10465441SEvalZero #define fp5			$f5
1876*10465441SEvalZero #define fp6			$f6
1877*10465441SEvalZero #define fp7			$f7
1878*10465441SEvalZero #define fp8			$f8
1879*10465441SEvalZero #define fp9			$f9
1880*10465441SEvalZero #define fp10			$f10
1881*10465441SEvalZero #define fp11			$f11
1882*10465441SEvalZero #define fp12			$f12
1883*10465441SEvalZero #define fp13			$f13
1884*10465441SEvalZero #define fp14			$f14
1885*10465441SEvalZero #define fp15			$f15
1886*10465441SEvalZero #define fp16			$f16
1887*10465441SEvalZero #define fp17			$f17
1888*10465441SEvalZero #define fp18			$f18
1889*10465441SEvalZero #define fp19			$f19
1890*10465441SEvalZero #define fp20			$f20
1891*10465441SEvalZero #define fp21			$f21
1892*10465441SEvalZero #define fp22			$f22
1893*10465441SEvalZero #define fp23			$f23
1894*10465441SEvalZero #define fp24			$f24
1895*10465441SEvalZero #define fp25			$f25
1896*10465441SEvalZero #define fp26			$f26
1897*10465441SEvalZero #define fp27			$f27
1898*10465441SEvalZero #define fp28			$f28
1899*10465441SEvalZero #define fp29			$f29
1900*10465441SEvalZero #define fp30			$f30
1901*10465441SEvalZero #define fp31			$f31
1902*10465441SEvalZero 
1903*10465441SEvalZero /*
1904*10465441SEvalZero  * The following definitions are used to convert an FPR name
1905*10465441SEvalZero  * into the corresponding even or odd name, respectively.
1906*10465441SEvalZero  * This is used in macro substitution in the AVPs.
1907*10465441SEvalZero  */
1908*10465441SEvalZero 
1909*10465441SEvalZero #define fp1_even		$f0
1910*10465441SEvalZero #define fp3_even		$f2
1911*10465441SEvalZero #define fp5_even		$f4
1912*10465441SEvalZero #define fp7_even		$f6
1913*10465441SEvalZero #define fp9_even		$f8
1914*10465441SEvalZero #define fp11_even		$f10
1915*10465441SEvalZero #define fp13_even		$f12
1916*10465441SEvalZero #define fp15_even		$f14
1917*10465441SEvalZero #define fp17_even		$f16
1918*10465441SEvalZero #define fp19_even		$f18
1919*10465441SEvalZero #define fp21_even		$f20
1920*10465441SEvalZero #define fp23_even		$f22
1921*10465441SEvalZero #define fp25_even		$f24
1922*10465441SEvalZero #define fp27_even		$f26
1923*10465441SEvalZero #define fp29_even		$f28
1924*10465441SEvalZero #define fp31_even		$f30
1925*10465441SEvalZero 
1926*10465441SEvalZero #define fp0_odd			$f1
1927*10465441SEvalZero #define fp2_odd			$f3
1928*10465441SEvalZero #define fp4_odd			$f5
1929*10465441SEvalZero #define fp6_odd			$f7
1930*10465441SEvalZero #define fp8_odd			$f9
1931*10465441SEvalZero #define fp10_odd		$f11
1932*10465441SEvalZero #define fp12_odd		$f13
1933*10465441SEvalZero #define fp14_odd		$f15
1934*10465441SEvalZero #define fp16_odd		$f17
1935*10465441SEvalZero #define fp18_odd		$f19
1936*10465441SEvalZero #define fp20_odd		$f21
1937*10465441SEvalZero #define fp22_odd		$f23
1938*10465441SEvalZero #define fp24_odd		$f25
1939*10465441SEvalZero #define fp26_odd		$f27
1940*10465441SEvalZero #define fp28_odd		$f29
1941*10465441SEvalZero #define fp30_odd		$f31
1942*10465441SEvalZero 
1943*10465441SEvalZero 
1944*10465441SEvalZero /*
1945*10465441SEvalZero  *************************************************************************
1946*10465441SEvalZero  *                H A R D W A R E   F P R   I N D I C E S                *
1947*10465441SEvalZero  *************************************************************************
1948*10465441SEvalZero  *
1949*10465441SEvalZero  * These definitions provide the index (number) of the FPR, as opposed
1950*10465441SEvalZero  * to the assembler register name ($n).
1951*10465441SEvalZero  */
1952*10465441SEvalZero 
1953*10465441SEvalZero #define R_fp0			 0
1954*10465441SEvalZero #define R_fp1			 1
1955*10465441SEvalZero #define R_fp2			 2
1956*10465441SEvalZero #define R_fp3			 3
1957*10465441SEvalZero #define R_fp4			 4
1958*10465441SEvalZero #define R_fp5			 5
1959*10465441SEvalZero #define R_fp6			 6
1960*10465441SEvalZero #define R_fp7			 7
1961*10465441SEvalZero #define R_fp8			 8
1962*10465441SEvalZero #define R_fp9			 9
1963*10465441SEvalZero #define R_fp10			10
1964*10465441SEvalZero #define R_fp11			11
1965*10465441SEvalZero #define R_fp12			12
1966*10465441SEvalZero #define R_fp13			13
1967*10465441SEvalZero #define R_fp14			14
1968*10465441SEvalZero #define R_fp15			15
1969*10465441SEvalZero #define R_fp16			16
1970*10465441SEvalZero #define R_fp17			17
1971*10465441SEvalZero #define R_fp18			18
1972*10465441SEvalZero #define R_fp19			19
1973*10465441SEvalZero #define R_fp20			20
1974*10465441SEvalZero #define R_fp21			21
1975*10465441SEvalZero #define R_fp22			22
1976*10465441SEvalZero #define R_fp23			23
1977*10465441SEvalZero #define R_fp24			24
1978*10465441SEvalZero #define R_fp25			25
1979*10465441SEvalZero #define R_fp26			26
1980*10465441SEvalZero #define R_fp27			27
1981*10465441SEvalZero #define R_fp28			28
1982*10465441SEvalZero #define R_fp29			29
1983*10465441SEvalZero #define R_fp30			30
1984*10465441SEvalZero #define R_fp31			31
1985*10465441SEvalZero 
1986*10465441SEvalZero 
1987*10465441SEvalZero /*
1988*10465441SEvalZero  *************************************************************************
1989*10465441SEvalZero  *                  H A R D W A R E   F C R   N A M E S                  *
1990*10465441SEvalZero  *************************************************************************
1991*10465441SEvalZero  */
1992*10465441SEvalZero 
1993*10465441SEvalZero #define fc0			$0
1994*10465441SEvalZero #define fc25			$25
1995*10465441SEvalZero #define fc26			$26
1996*10465441SEvalZero #define fc28			$28
1997*10465441SEvalZero #define fc31			$31
1998*10465441SEvalZero 
1999*10465441SEvalZero 
2000*10465441SEvalZero /*
2001*10465441SEvalZero  *************************************************************************
2002*10465441SEvalZero  *                H A R D W A R E   F C R   I N D I C E S                *
2003*10465441SEvalZero  *************************************************************************
2004*10465441SEvalZero  *
2005*10465441SEvalZero  * These definitions provide the index (number) of the FCR, as opposed
2006*10465441SEvalZero  * to the assembler register name ($n).
2007*10465441SEvalZero  */
2008*10465441SEvalZero 
2009*10465441SEvalZero #define R_fc0			 0
2010*10465441SEvalZero #define R_fc25			25
2011*10465441SEvalZero #define R_fc26			26
2012*10465441SEvalZero #define R_fc28			28
2013*10465441SEvalZero #define R_fc31			31
2014*10465441SEvalZero 
2015*10465441SEvalZero 
2016*10465441SEvalZero /*
2017*10465441SEvalZero  *************************************************************************
2018*10465441SEvalZero  *                  H A R D W A R E   F C C   N A M E S                  *
2019*10465441SEvalZero  *************************************************************************
2020*10465441SEvalZero  */
2021*10465441SEvalZero 
2022*10465441SEvalZero #define cc0			$fcc0
2023*10465441SEvalZero #define cc1			$fcc1
2024*10465441SEvalZero #define cc2			$fcc2
2025*10465441SEvalZero #define cc3			$fcc3
2026*10465441SEvalZero #define cc4			$fcc4
2027*10465441SEvalZero #define cc5			$fcc5
2028*10465441SEvalZero #define cc6			$fcc6
2029*10465441SEvalZero #define cc7			$fcc7
2030*10465441SEvalZero 
2031*10465441SEvalZero 
2032*10465441SEvalZero /*
2033*10465441SEvalZero  *************************************************************************
2034*10465441SEvalZero  *                H A R D W A R E   F C C   I N D I C E S                *
2035*10465441SEvalZero  *************************************************************************
2036*10465441SEvalZero  *
2037*10465441SEvalZero  * These definitions provide the index (number) of the CC, as opposed
2038*10465441SEvalZero  * to the assembler register name ($n).
2039*10465441SEvalZero  */
2040*10465441SEvalZero 
2041*10465441SEvalZero #define R_cc0			0
2042*10465441SEvalZero #define R_cc1			1
2043*10465441SEvalZero #define R_cc2			2
2044*10465441SEvalZero #define R_cc3			3
2045*10465441SEvalZero #define R_cc4			4
2046*10465441SEvalZero #define R_cc5			5
2047*10465441SEvalZero #define R_cc6			6
2048*10465441SEvalZero #define R_cc7			7
2049*10465441SEvalZero 
2050*10465441SEvalZero 
2051*10465441SEvalZero /*
2052*10465441SEvalZero  ************************************************************************
2053*10465441SEvalZero  *             I M P L E M E N T A T I O N   R E G I S T E R            *
2054*10465441SEvalZero  ************************************************************************
2055*10465441SEvalZero  *
2056*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
2057*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
2058*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2059*10465441SEvalZero  * |Reserved for Additional|3|P|D|S| Implementation|   Revision    | FIR
2060*10465441SEvalZero  * |  Configuration Bits   |D|S| | |               |               |
2061*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2062*10465441SEvalZero  */
2063*10465441SEvalZero 
2064*10465441SEvalZero #define C1_FIR			$0
2065*10465441SEvalZero #define R_C1_FIR			0
2066*10465441SEvalZero 
2067*10465441SEvalZero #define S_FIRConfigS		16
2068*10465441SEvalZero #define M_FIRConfigS		(0x1 << S_FIRConfigS)
2069*10465441SEvalZero #define S_FIRConfigD		17
2070*10465441SEvalZero #define M_FIRConfigD		(0x1 << S_FIRConfigD)
2071*10465441SEvalZero #define S_FIRConfigPS		18
2072*10465441SEvalZero #define M_FIRConfigPS   	(0x1 << S_FIRConfigPS)
2073*10465441SEvalZero #define S_FIRConfig3D		19
2074*10465441SEvalZero #define M_FIRConfig3D		(0x1 << S_FIRConfig3D)
2075*10465441SEvalZero #define M_FIRConfigAll		(M_FIRConfigS|M_FIRConfigD|M_FIRConfigPS|M_FIRConfig3D)
2076*10465441SEvalZero 
2077*10465441SEvalZero #define S_FIRImp		8
2078*10465441SEvalZero #define M_FIRImp		(0xff << S_FIRImp)
2079*10465441SEvalZero 
2080*10465441SEvalZero #define S_FIRRev		0
2081*10465441SEvalZero #define M_FIRRev		(0xff << S_FIRRev)
2082*10465441SEvalZero 
2083*10465441SEvalZero #define M_FIR0Fields		0xfff00000
2084*10465441SEvalZero #define M_FIRRFields		0x000fffff
2085*10465441SEvalZero 
2086*10465441SEvalZero /*
2087*10465441SEvalZero  ************************************************************************
2088*10465441SEvalZero  *          C O N D I T I O N   C O D E S   R E G I S T E R             *
2089*10465441SEvalZero  ************************************************************************
2090*10465441SEvalZero  *
2091*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
2092*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
2093*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2094*10465441SEvalZero  * |                      0                        |      CC       | FCCR
2095*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2096*10465441SEvalZero  */
2097*10465441SEvalZero 
2098*10465441SEvalZero #define C1_FCCR			$25
2099*10465441SEvalZero #define R_C1_FCCR		25
2100*10465441SEvalZero 
2101*10465441SEvalZero #define S_FCCRCC		0
2102*10465441SEvalZero #define M_FCCRCC		(0xff << S_FCCRCC)
2103*10465441SEvalZero #define S_FCCRCC7		7
2104*10465441SEvalZero #define M_FCCRCC7		(0x1 << S_FCCRCC7)
2105*10465441SEvalZero #define S_FCCRCC6		6
2106*10465441SEvalZero #define M_FCCRCC6		(0x1 << S_FCCRCC6)
2107*10465441SEvalZero #define S_FCCRCC5		5
2108*10465441SEvalZero #define M_FCCRCC5		(0x1 << S_FCCRCC5)
2109*10465441SEvalZero #define S_FCCRCC4		4
2110*10465441SEvalZero #define M_FCCRCC4		(0x1 << S_FCCRCC4)
2111*10465441SEvalZero #define S_FCCRCC3		3
2112*10465441SEvalZero #define M_FCCRCC3		(0x1 << S_FCCRCC3)
2113*10465441SEvalZero #define S_FCCRCC2		2
2114*10465441SEvalZero #define M_FCCRCC2		(0x1 << S_FCCRCC2)
2115*10465441SEvalZero #define S_FCCRCC1		1
2116*10465441SEvalZero #define M_FCCRCC1		(0x1 << S_FCCRCC1)
2117*10465441SEvalZero #define S_FCCRCC0		0
2118*10465441SEvalZero #define M_FCCRCC0		(0x1 << S_FCCRCC0)
2119*10465441SEvalZero 
2120*10465441SEvalZero #define M_FCCR0Fields		0xffffff00
2121*10465441SEvalZero #define M_FCCRRFields		0x000000ff
2122*10465441SEvalZero 
2123*10465441SEvalZero 
2124*10465441SEvalZero /*
2125*10465441SEvalZero  ************************************************************************
2126*10465441SEvalZero  *                 E X C E P T I O N S   R E G I S T E R                *
2127*10465441SEvalZero  ************************************************************************
2128*10465441SEvalZero  *
2129*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
2130*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
2131*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2132*10465441SEvalZero  * |             0             |   Cause   |    0    |  Flags  | 0 | FEXR
2133*10465441SEvalZero  * |                           |E|V|Z|O|U|I|         |V|Z|O|U|I|   |
2134*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2135*10465441SEvalZero  */
2136*10465441SEvalZero 
2137*10465441SEvalZero #define C1_FEXR			$26
2138*10465441SEvalZero #define R_C1_FEXR		26
2139*10465441SEvalZero 
2140*10465441SEvalZero #define S_FEXRExc		12
2141*10465441SEvalZero #define M_FEXRExc		(0x3f << S_FEXRExc)
2142*10465441SEvalZero #define S_FEXRExcE		17
2143*10465441SEvalZero #define M_FEXRExcE		(0x1 << S_FEXRExcE)
2144*10465441SEvalZero #define S_FEXRExcV		16
2145*10465441SEvalZero #define M_FEXRExcV		(0x1 << S_FEXRExcV)
2146*10465441SEvalZero #define S_FEXRExcZ		15
2147*10465441SEvalZero #define M_FEXRExcZ		(0x1 << S_FEXRExcZ)
2148*10465441SEvalZero #define S_FEXRExcO		14
2149*10465441SEvalZero #define M_FEXRExcO		(0x1 << S_FEXRExcO)
2150*10465441SEvalZero #define S_FEXRExcU		13
2151*10465441SEvalZero #define M_FEXRExcU		(0x1 << S_FEXRExcU)
2152*10465441SEvalZero #define S_FEXRExcI		12
2153*10465441SEvalZero #define M_FEXRExcI		(0x1 << S_FEXRExcI)
2154*10465441SEvalZero 
2155*10465441SEvalZero #define S_FEXRFlg		2
2156*10465441SEvalZero #define M_FEXRFlg		(0x1f << S_FEXRFlg)
2157*10465441SEvalZero #define S_FEXRFlgV		6
2158*10465441SEvalZero #define M_FEXRFlgV		(0x1 << S_FEXRFlgV)
2159*10465441SEvalZero #define S_FEXRFlgZ		5
2160*10465441SEvalZero #define M_FEXRFlgZ		(0x1 << S_FEXRFlgZ)
2161*10465441SEvalZero #define S_FEXRFlgO		4
2162*10465441SEvalZero #define M_FEXRFlgO		(0x1 << S_FEXRFlgO)
2163*10465441SEvalZero #define S_FEXRFlgU		3
2164*10465441SEvalZero #define M_FEXRFlgU		(0x1 << S_FEXRFlgU)
2165*10465441SEvalZero #define S_FEXRFlgI		2
2166*10465441SEvalZero #define M_FEXRFlgI		(0x1 << S_FEXRFlgI)
2167*10465441SEvalZero 
2168*10465441SEvalZero #define M_FEXR0Fields		0xfffc0f83
2169*10465441SEvalZero #define M_FEXRRFields		0x00000000
2170*10465441SEvalZero 
2171*10465441SEvalZero 
2172*10465441SEvalZero /*
2173*10465441SEvalZero  ************************************************************************
2174*10465441SEvalZero  *                    E N A B L E S   R E G I S T E R                   *
2175*10465441SEvalZero  ************************************************************************
2176*10465441SEvalZero  *
2177*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
2178*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
2179*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2180*10465441SEvalZero  * |                   0                   | Enables |   0   |F|RM | FENR
2181*10465441SEvalZero  * |                                       |V|Z|O|U|I|       |S|   |
2182*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2183*10465441SEvalZero  */
2184*10465441SEvalZero 
2185*10465441SEvalZero #define C1_FENR			$28
2186*10465441SEvalZero #define R_C1_FENR		28
2187*10465441SEvalZero 
2188*10465441SEvalZero #define S_FENREna		7
2189*10465441SEvalZero #define M_FENREna		(0x1f << S_FENREna)
2190*10465441SEvalZero #define S_FENREnaV		11
2191*10465441SEvalZero #define M_FENREnaV		(0x1 << S_FENREnaV)
2192*10465441SEvalZero #define S_FENREnaZ		10
2193*10465441SEvalZero #define M_FENREnaZ		(0x1 << S_FENREnaZ)
2194*10465441SEvalZero #define S_FENREnaO		9
2195*10465441SEvalZero #define M_FENREnaO		(0x1 << S_FENREnaO)
2196*10465441SEvalZero #define S_FENREnaU		8
2197*10465441SEvalZero #define M_FENREnaU		(0x1 << S_FENREnaU)
2198*10465441SEvalZero #define S_FENREnaI		7
2199*10465441SEvalZero #define M_FENREnaI		(0x1 << S_FENREnaI)
2200*10465441SEvalZero 
2201*10465441SEvalZero #define S_FENRFS		2
2202*10465441SEvalZero #define M_FENRFS		(0x1 << S_FENRFS)
2203*10465441SEvalZero 
2204*10465441SEvalZero #define S_FENRRM		0
2205*10465441SEvalZero #define M_FENRRM		(0x3 << S_FENRRM)
2206*10465441SEvalZero 
2207*10465441SEvalZero #define M_FENR0Fields		0xfffff078
2208*10465441SEvalZero #define M_FENRRFields		0x00000000
2209*10465441SEvalZero 
2210*10465441SEvalZero 
2211*10465441SEvalZero /*
2212*10465441SEvalZero  ************************************************************************
2213*10465441SEvalZero  *           C O N T R O L  /  S T A T U S   R E G I S T E R            *
2214*10465441SEvalZero  ************************************************************************
2215*10465441SEvalZero  *
2216*10465441SEvalZero  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
2217*10465441SEvalZero  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
2218*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2219*10465441SEvalZero  * |     FCC     |F|C|Imp|  0  |   Cause   | Enables |  Flags  | RM| FCSR
2220*10465441SEvalZero  * |7|6|5|4|3|2|1|S|C|   |     |E|V|Z|O|U|I|V|Z|O|U|I|V|Z|O|U|I|   |
2221*10465441SEvalZero  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2222*10465441SEvalZero  */
2223*10465441SEvalZero 
2224*10465441SEvalZero #define C1_FCSR			$31
2225*10465441SEvalZero #define R_C1_FCSR		31
2226*10465441SEvalZero 
2227*10465441SEvalZero #define S_FCSRFCC7_1		25			/* Floating point condition codes 7..1 (R/W) */
2228*10465441SEvalZero #define M_FCSRFCC7_1		(0x7f << S_FCSRFCC7_1)
2229*10465441SEvalZero #define S_FCSRCC7		31
2230*10465441SEvalZero #define M_FCSRCC7		(0x1 << S_FCSRCC7)
2231*10465441SEvalZero #define S_FCSRCC6		30
2232*10465441SEvalZero #define M_FCSRCC6		(0x1 << S_FCSRCC6)
2233*10465441SEvalZero #define S_FCSRCC5		29
2234*10465441SEvalZero #define M_FCSRCC5		(0x1 << S_FCSRCC5)
2235*10465441SEvalZero #define S_FCSRCC4		28
2236*10465441SEvalZero #define M_FCSRCC4		(0x1 << S_FCSRCC4)
2237*10465441SEvalZero #define S_FCSRCC3		27
2238*10465441SEvalZero #define M_FCSRCC3		(0x1 << S_FCSRCC3)
2239*10465441SEvalZero #define S_FCSRCC2		26
2240*10465441SEvalZero #define M_FCSRCC2		(0x1 << S_FCSRCC2)
2241*10465441SEvalZero #define S_FCSRCC1		25
2242*10465441SEvalZero #define M_FCSRCC1		(0x1 << S_FCSRCC1)
2243*10465441SEvalZero 
2244*10465441SEvalZero #define S_FCSRFS		24			/* Flush denorms to zero (R/W) */
2245*10465441SEvalZero #define M_FCSRFS		(0x1 << S_FCSRFS)
2246*10465441SEvalZero 
2247*10465441SEvalZero #define S_FCSRCC0		23			/* Floating point condition code 0 (R/W) */
2248*10465441SEvalZero #define M_FCSRCC0		(0x1 << S_FCSRCC0)
2249*10465441SEvalZero #define S_FCSRCC		S_FCSRCC0
2250*10465441SEvalZero #define M_FCSRCC		M_FCSRCC0
2251*10465441SEvalZero 
2252*10465441SEvalZero #define S_FCSRImpl		21			/* Implementation-specific control bits (R/W) */
2253*10465441SEvalZero #define M_FCSRImpl		(0x3 << S_FCSRImpl)
2254*10465441SEvalZero 
2255*10465441SEvalZero #define S_FCSRExc		12			/* Exception cause (R/W) */
2256*10465441SEvalZero #define M_FCSRExc		(0x3f << S_FCSRExc)
2257*10465441SEvalZero #define S_FCSRExcE		17
2258*10465441SEvalZero #define M_FCSRExcE		(0x1 << S_FCSRExcE)
2259*10465441SEvalZero #define S_FCSRExcV		16
2260*10465441SEvalZero #define M_FCSRExcV		(0x1 << S_FCSRExcV)
2261*10465441SEvalZero #define S_FCSRExcZ		15
2262*10465441SEvalZero #define M_FCSRExcZ		(0x1 << S_FCSRExcZ)
2263*10465441SEvalZero #define S_FCSRExcO		14
2264*10465441SEvalZero #define M_FCSRExcO		(0x1 << S_FCSRExcO)
2265*10465441SEvalZero #define S_FCSRExcU		13
2266*10465441SEvalZero #define M_FCSRExcU		(0x1 << S_FCSRExcU)
2267*10465441SEvalZero #define S_FCSRExcI		12
2268*10465441SEvalZero #define M_FCSRExcI		(0x1 << S_FCSRExcI)
2269*10465441SEvalZero 
2270*10465441SEvalZero #define S_FCSREna		7			/* Exception enable (R/W) */
2271*10465441SEvalZero #define M_FCSREna		(0x1f << S_FCSREna)
2272*10465441SEvalZero #define S_FCSREnaV		11
2273*10465441SEvalZero #define M_FCSREnaV		(0x1 << S_FCSREnaV)
2274*10465441SEvalZero #define S_FCSREnaZ		10
2275*10465441SEvalZero #define M_FCSREnaZ		(0x1 << S_FCSREnaZ)
2276*10465441SEvalZero #define S_FCSREnaO		9
2277*10465441SEvalZero #define M_FCSREnaO		(0x1 << S_FCSREnaO)
2278*10465441SEvalZero #define S_FCSREnaU		8
2279*10465441SEvalZero #define M_FCSREnaU		(0x1 << S_FCSREnaU)
2280*10465441SEvalZero #define S_FCSREnaI		7
2281*10465441SEvalZero #define M_FCSREnaI		(0x1 << S_FCSREnaI)
2282*10465441SEvalZero 
2283*10465441SEvalZero #define S_FCSRFlg		2			/* Exception flags (R/W) */
2284*10465441SEvalZero #define M_FCSRFlg		(0x1f << S_FCSRFlg)
2285*10465441SEvalZero #define S_FCSRFlgV		6
2286*10465441SEvalZero #define M_FCSRFlgV		(0x1 << S_FCSRFlgV)
2287*10465441SEvalZero #define S_FCSRFlgZ		5
2288*10465441SEvalZero #define M_FCSRFlgZ		(0x1 << S_FCSRFlgZ)
2289*10465441SEvalZero #define S_FCSRFlgO		4
2290*10465441SEvalZero #define M_FCSRFlgO		(0x1 << S_FCSRFlgO)
2291*10465441SEvalZero #define S_FCSRFlgU		3
2292*10465441SEvalZero #define M_FCSRFlgU		(0x1 << S_FCSRFlgU)
2293*10465441SEvalZero #define S_FCSRFlgI		2
2294*10465441SEvalZero #define M_FCSRFlgI		(0x1 << S_FCSRFlgI)
2295*10465441SEvalZero 
2296*10465441SEvalZero #define S_FCSRRM		0			/* Rounding mode (R/W) */
2297*10465441SEvalZero #define M_FCSRRM		(0x3 << S_FCSRRM)
2298*10465441SEvalZero 
2299*10465441SEvalZero #define M_FCSR0Fields		0x001c0000
2300*10465441SEvalZero #define M_FCSRRFields		0x00000000
2301*10465441SEvalZero 
2302*10465441SEvalZero /*
2303*10465441SEvalZero  * Values in the rounding mode field (of both FCSR and FCCR)
2304*10465441SEvalZero  */
2305*10465441SEvalZero #define K_FCSRRM_RN		0
2306*10465441SEvalZero #define K_FCSRRM_RZ		1
2307*10465441SEvalZero #define K_FCSRRM_RP		2
2308*10465441SEvalZero #define K_FCSRRM_RM		3
2309*10465441SEvalZero 
2310*10465441SEvalZero #endif /* _COMMON_MIPS_DEF_H_ */
2311