xref: /aosp_15_r20/external/llvm/lib/Target/Mips/MicroMipsInstrFormats.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
2*9880d681SAndroid Build Coastguard Worker// MicroMIPS Base Classes
3*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker//
6*9880d681SAndroid Build Coastguard Worker// Base class for MicroMips instructions.
7*9880d681SAndroid Build Coastguard Worker// This class does not depend on the instruction size.
8*9880d681SAndroid Build Coastguard Worker//
9*9880d681SAndroid Build Coastguard Workerclass MicroMipsInstBase<dag outs, dag ins, string asmstr, list<dag> pattern,
10*9880d681SAndroid Build Coastguard Worker                        InstrItinClass itin, Format f> : Instruction
11*9880d681SAndroid Build Coastguard Worker{
12*9880d681SAndroid Build Coastguard Worker  let Namespace = "Mips";
13*9880d681SAndroid Build Coastguard Worker  let DecoderNamespace = "MicroMips";
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker  let OutOperandList = outs;
16*9880d681SAndroid Build Coastguard Worker  let InOperandList  = ins;
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker  let AsmString   = asmstr;
19*9880d681SAndroid Build Coastguard Worker  let Pattern     = pattern;
20*9880d681SAndroid Build Coastguard Worker  let Itinerary   = itin;
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker  let Predicates = [InMicroMips];
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker  Format Form = f;
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker//
28*9880d681SAndroid Build Coastguard Worker// Base class for MicroMIPS 16-bit instructions.
29*9880d681SAndroid Build Coastguard Worker//
30*9880d681SAndroid Build Coastguard Workerclass MicroMipsInst16<dag outs, dag ins, string asmstr, list<dag> pattern,
31*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, Format f> :
32*9880d681SAndroid Build Coastguard Worker  MicroMipsInstBase<outs, ins, asmstr, pattern, itin, f>
33*9880d681SAndroid Build Coastguard Worker{
34*9880d681SAndroid Build Coastguard Worker  let Size = 2;
35*9880d681SAndroid Build Coastguard Worker  field bits<16> Inst;
36*9880d681SAndroid Build Coastguard Worker  field bits<16> SoftFail = 0;
37*9880d681SAndroid Build Coastguard Worker  bits<6> Opcode = 0x0;
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
41*9880d681SAndroid Build Coastguard Worker// MicroMIPS 16-bit Instruction Formats
42*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerclass ARITH_FM_MM16<bit funct> {
45*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
46*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
47*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x01;
52*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rd;
53*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rt;
54*9880d681SAndroid Build Coastguard Worker  let Inst{3-1}   = rs;
55*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = funct;
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerclass ANDI_FM_MM16<bits<6> funct> {
59*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
60*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
61*9880d681SAndroid Build Coastguard Worker  bits<4> imm;
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = funct;
66*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rd;
67*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rs;
68*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = imm;
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerclass LOGIC_FM_MM16<bits<4> funct> {
72*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
73*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
78*9880d681SAndroid Build Coastguard Worker  let Inst{9-6}   = funct;
79*9880d681SAndroid Build Coastguard Worker  let Inst{5-3}   = rt;
80*9880d681SAndroid Build Coastguard Worker  let Inst{2-0}   = rs;
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Workerclass SHIFT_FM_MM16<bits<1> funct> {
84*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
85*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
86*9880d681SAndroid Build Coastguard Worker  bits<3> shamt;
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x09;
91*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rd;
92*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rt;
93*9880d681SAndroid Build Coastguard Worker  let Inst{3-1}   = shamt;
94*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = funct;
95*9880d681SAndroid Build Coastguard Worker}
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Workerclass ADDIUR2_FM_MM16 {
98*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
99*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
100*9880d681SAndroid Build Coastguard Worker  bits<3> imm;
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x1b;
105*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rd;
106*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rs;
107*9880d681SAndroid Build Coastguard Worker  let Inst{3-1}   = imm;
108*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = 0;
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerclass LOAD_STORE_FM_MM16<bits<6> op> {
112*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
113*9880d681SAndroid Build Coastguard Worker  bits<7> addr;
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = op;
118*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rt;
119*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = addr{6-4};
120*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = addr{3-0};
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerclass LOAD_STORE_SP_FM_MM16<bits<6> op> {
124*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
125*9880d681SAndroid Build Coastguard Worker  bits<5> offset;
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = op;
130*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = rt;
131*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = offset;
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerclass LOAD_GP_FM_MM16<bits<6> op> {
135*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
136*9880d681SAndroid Build Coastguard Worker  bits<7> offset;
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = op;
141*9880d681SAndroid Build Coastguard Worker  let Inst{9-7} = rt;
142*9880d681SAndroid Build Coastguard Worker  let Inst{6-0} = offset;
143*9880d681SAndroid Build Coastguard Worker}
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerclass ADDIUS5_FM_MM16 {
146*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
147*9880d681SAndroid Build Coastguard Worker  bits<4> imm;
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x13;
152*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = rd;
153*9880d681SAndroid Build Coastguard Worker  let Inst{4-1}   = imm;
154*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = 0;
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Workerclass ADDIUSP_FM_MM16 {
158*9880d681SAndroid Build Coastguard Worker  bits<9> imm;
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x13;
163*9880d681SAndroid Build Coastguard Worker  let Inst{9-1}   = imm;
164*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = 1;
165*9880d681SAndroid Build Coastguard Worker}
166*9880d681SAndroid Build Coastguard Worker
167*9880d681SAndroid Build Coastguard Workerclass MOVE_FM_MM16<bits<6> funct> {
168*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
169*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = funct;
174*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = rd;
175*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = rs;
176*9880d681SAndroid Build Coastguard Worker}
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Workerclass LI_FM_MM16 {
179*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
180*9880d681SAndroid Build Coastguard Worker  bits<7> imm;
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x3b;
185*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rd;
186*9880d681SAndroid Build Coastguard Worker  let Inst{6-0}   = imm;
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerclass JALR_FM_MM16<bits<5> op> {
190*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
195*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = op;
196*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = rs;
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Workerclass MFHILO_FM_MM16<bits<5> funct> {
200*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
205*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = funct;
206*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = rd;
207*9880d681SAndroid Build Coastguard Worker}
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Workerclass JRADDIUSP_FM_MM16<bits<5> op> {
210*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
211*9880d681SAndroid Build Coastguard Worker  bits<5> imm;
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
216*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = op;
217*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = imm;
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerclass ADDIUR1SP_FM_MM16 {
221*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
222*9880d681SAndroid Build Coastguard Worker  bits<6> imm;
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x1b;
227*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rd;
228*9880d681SAndroid Build Coastguard Worker  let Inst{6-1}   = imm;
229*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = 1;
230*9880d681SAndroid Build Coastguard Worker}
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Workerclass BRKSDBBP16_FM_MM<bits<6> op> {
233*9880d681SAndroid Build Coastguard Worker  bits<4> code_;
234*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
237*9880d681SAndroid Build Coastguard Worker  let Inst{9-4}   = op;
238*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = code_;
239*9880d681SAndroid Build Coastguard Worker}
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Workerclass BEQNEZ_FM_MM16<bits<6> op> {
242*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
243*9880d681SAndroid Build Coastguard Worker  bits<7> offset;
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = op;
248*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rs;
249*9880d681SAndroid Build Coastguard Worker  let Inst{6-0}   = offset;
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerclass B16_FM {
253*9880d681SAndroid Build Coastguard Worker  bits<10> offset;
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x33;
258*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = offset;
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerclass MOVEP_FM_MM16 {
262*9880d681SAndroid Build Coastguard Worker  bits<3> dst_regs;
263*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
264*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x21;
269*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = dst_regs;
270*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rt;
271*9880d681SAndroid Build Coastguard Worker  let Inst{3-1}   = rs;
272*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = 0;
273*9880d681SAndroid Build Coastguard Worker}
274*9880d681SAndroid Build Coastguard Worker
275*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
276*9880d681SAndroid Build Coastguard Worker// MicroMIPS 32-bit Instruction Formats
277*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Workerclass MMArch {
280*9880d681SAndroid Build Coastguard Worker  string Arch = "micromips";
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Workerclass ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
284*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
285*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
286*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
291*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
292*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
293*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
294*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = 0;
295*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = funct;
296*9880d681SAndroid Build Coastguard Worker}
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Workerclass ADDI_FM_MM<bits<6> op> : MMArch {
299*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
300*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
301*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
306*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
307*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
308*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
309*9880d681SAndroid Build Coastguard Worker}
310*9880d681SAndroid Build Coastguard Worker
311*9880d681SAndroid Build Coastguard Workerclass SLTI_FM_MM<bits<6> op> : MMArch {
312*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
313*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
314*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
317*9880d681SAndroid Build Coastguard Worker
318*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
319*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
320*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
321*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
322*9880d681SAndroid Build Coastguard Worker}
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Workerclass LUI_FM_MM : MMArch {
325*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
326*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
327*9880d681SAndroid Build Coastguard Worker
328*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
331*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0xd;
332*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
333*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
334*9880d681SAndroid Build Coastguard Worker}
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Workerclass MULT_FM_MM<bits<10> funct> : MMArch {
337*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
338*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
343*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
344*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
345*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
346*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
347*9880d681SAndroid Build Coastguard Worker}
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Workerclass SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
350*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
351*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
352*9880d681SAndroid Build Coastguard Worker  bits<5> shamt;
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
357*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
358*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
359*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = shamt;
360*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = rotate;
361*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = funct;
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Workerclass SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
365*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
366*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
367*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
372*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
373*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
374*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
375*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = rotate;
376*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = funct;
377*9880d681SAndroid Build Coastguard Worker}
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Workerclass LW_FM_MM<bits<6> op> : MMArch {
380*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
381*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
382*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
383*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
384*9880d681SAndroid Build Coastguard Worker
385*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
386*9880d681SAndroid Build Coastguard Worker
387*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
388*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
389*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
390*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
391*9880d681SAndroid Build Coastguard Worker}
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Workerclass POOL32C_LHUE_FM_MM<bits<6> op, bits<4> fmt, bits<3> funct> : MMArch {
394*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
395*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
396*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
397*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
398*9880d681SAndroid Build Coastguard Worker
399*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
402*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
403*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
404*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = fmt;
405*9880d681SAndroid Build Coastguard Worker  let Inst{11-9} = funct;
406*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}  = offset;
407*9880d681SAndroid Build Coastguard Worker}
408*9880d681SAndroid Build Coastguard Worker
409*9880d681SAndroid Build Coastguard Workerclass LWL_FM_MM<bits<4> funct> {
410*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
411*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
412*9880d681SAndroid Build Coastguard Worker
413*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
414*9880d681SAndroid Build Coastguard Worker
415*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x18;
416*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
417*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = addr{20-16};
418*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
419*9880d681SAndroid Build Coastguard Worker  let Inst{11-0}  = addr{11-0};
420*9880d681SAndroid Build Coastguard Worker}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerclass POOL32C_STEVA_LDEVA_FM_MM<bits<4> type, bits<3> funct> {
423*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
424*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
425*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
426*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
429*9880d681SAndroid Build Coastguard Worker
430*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x18;
431*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
432*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
433*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = type;
434*9880d681SAndroid Build Coastguard Worker  let Inst{11-9} = funct;
435*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}  = offset;
436*9880d681SAndroid Build Coastguard Worker}
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Workerclass CMov_F_I_FM_MM<bits<7> func> : MMArch {
439*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
440*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
441*9880d681SAndroid Build Coastguard Worker  bits<3> fcc;
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
446*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
447*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
448*9880d681SAndroid Build Coastguard Worker  let Inst{15-13} = fcc;
449*9880d681SAndroid Build Coastguard Worker  let Inst{12-6}  = func;
450*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3b;
451*9880d681SAndroid Build Coastguard Worker}
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Workerclass MTLO_FM_MM<bits<10> funct> : MMArch {
454*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
455*9880d681SAndroid Build Coastguard Worker
456*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
457*9880d681SAndroid Build Coastguard Worker
458*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
459*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x00;
460*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
461*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
462*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
463*9880d681SAndroid Build Coastguard Worker}
464*9880d681SAndroid Build Coastguard Worker
465*9880d681SAndroid Build Coastguard Workerclass MFLO_FM_MM<bits<10> funct> : MMArch {
466*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
467*9880d681SAndroid Build Coastguard Worker
468*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
469*9880d681SAndroid Build Coastguard Worker
470*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
471*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x00;
472*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rd;
473*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
474*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
475*9880d681SAndroid Build Coastguard Worker}
476*9880d681SAndroid Build Coastguard Worker
477*9880d681SAndroid Build Coastguard Workerclass CLO_FM_MM<bits<10> funct> : MMArch {
478*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
479*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
480*9880d681SAndroid Build Coastguard Worker
481*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
484*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
485*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
486*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
487*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
488*9880d681SAndroid Build Coastguard Worker}
489*9880d681SAndroid Build Coastguard Worker
490*9880d681SAndroid Build Coastguard Workerclass SEB_FM_MM<bits<10> funct> : MMArch {
491*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
492*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
493*9880d681SAndroid Build Coastguard Worker
494*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
495*9880d681SAndroid Build Coastguard Worker
496*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
497*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
498*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
499*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
500*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
501*9880d681SAndroid Build Coastguard Worker}
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Workerclass EXT_FM_MM<bits<6> funct> : MMArch {
504*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
505*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
506*9880d681SAndroid Build Coastguard Worker  bits<5> pos;
507*9880d681SAndroid Build Coastguard Worker  bits<5> size;
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
510*9880d681SAndroid Build Coastguard Worker
511*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
512*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
513*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
514*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = size;
515*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = pos;
516*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
517*9880d681SAndroid Build Coastguard Worker}
518*9880d681SAndroid Build Coastguard Worker
519*9880d681SAndroid Build Coastguard Workerclass J_FM_MM<bits<6> op> : MMArch {
520*9880d681SAndroid Build Coastguard Worker  bits<26> target;
521*9880d681SAndroid Build Coastguard Worker
522*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
523*9880d681SAndroid Build Coastguard Worker
524*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
525*9880d681SAndroid Build Coastguard Worker  let Inst{25-0}  = target;
526*9880d681SAndroid Build Coastguard Worker}
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Workerclass JR_FM_MM<bits<8> funct> : MMArch {
529*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
530*9880d681SAndroid Build Coastguard Worker
531*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Worker  let Inst{31-21} = 0x00;
534*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
535*9880d681SAndroid Build Coastguard Worker  let Inst{15-14} = 0x0;
536*9880d681SAndroid Build Coastguard Worker  let Inst{13-6}  = funct;
537*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
538*9880d681SAndroid Build Coastguard Worker}
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Workerclass JALR_FM_MM<bits<10> funct> {
541*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
542*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
543*9880d681SAndroid Build Coastguard Worker
544*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
547*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
548*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
549*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
550*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
551*9880d681SAndroid Build Coastguard Worker}
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerclass BEQ_FM_MM<bits<6> op> : MMArch {
554*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
555*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
556*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
557*9880d681SAndroid Build Coastguard Worker
558*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
559*9880d681SAndroid Build Coastguard Worker
560*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
561*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
562*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
563*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
564*9880d681SAndroid Build Coastguard Worker}
565*9880d681SAndroid Build Coastguard Worker
566*9880d681SAndroid Build Coastguard Workerclass BGEZ_FM_MM<bits<5> funct> : MMArch {
567*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
568*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
569*9880d681SAndroid Build Coastguard Worker
570*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
571*9880d681SAndroid Build Coastguard Worker
572*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
573*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = funct;
574*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
575*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
576*9880d681SAndroid Build Coastguard Worker}
577*9880d681SAndroid Build Coastguard Worker
578*9880d681SAndroid Build Coastguard Workerclass BGEZAL_FM_MM<bits<5> funct> : MMArch {
579*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
580*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
581*9880d681SAndroid Build Coastguard Worker
582*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
583*9880d681SAndroid Build Coastguard Worker
584*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
585*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = funct;
586*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
587*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
588*9880d681SAndroid Build Coastguard Worker}
589*9880d681SAndroid Build Coastguard Worker
590*9880d681SAndroid Build Coastguard Workerclass SYNC_FM_MM : MMArch {
591*9880d681SAndroid Build Coastguard Worker  bits<5> stype;
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
594*9880d681SAndroid Build Coastguard Worker
595*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
596*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x0;
597*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = stype;
598*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0x1ad;
599*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
600*9880d681SAndroid Build Coastguard Worker}
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerclass BRK_FM_MM : MMArch {
603*9880d681SAndroid Build Coastguard Worker  bits<10> code_1;
604*9880d681SAndroid Build Coastguard Worker  bits<10> code_2;
605*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
606*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
607*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = code_1;
608*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = code_2;
609*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x07;
610*9880d681SAndroid Build Coastguard Worker}
611*9880d681SAndroid Build Coastguard Worker
612*9880d681SAndroid Build Coastguard Workerclass SYS_FM_MM : MMArch {
613*9880d681SAndroid Build Coastguard Worker  bits<10> code_;
614*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
615*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
616*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = code_;
617*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0x22d;
618*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
619*9880d681SAndroid Build Coastguard Worker}
620*9880d681SAndroid Build Coastguard Worker
621*9880d681SAndroid Build Coastguard Workerclass WAIT_FM_MM {
622*9880d681SAndroid Build Coastguard Worker  bits<10> code_;
623*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
624*9880d681SAndroid Build Coastguard Worker
625*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
626*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = code_;
627*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0x24d;
628*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
629*9880d681SAndroid Build Coastguard Worker}
630*9880d681SAndroid Build Coastguard Worker
631*9880d681SAndroid Build Coastguard Workerclass ER_FM_MM<bits<10> funct> : MMArch {
632*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
633*9880d681SAndroid Build Coastguard Worker
634*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
635*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = 0x00;
636*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
637*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
638*9880d681SAndroid Build Coastguard Worker}
639*9880d681SAndroid Build Coastguard Worker
640*9880d681SAndroid Build Coastguard Workerclass EI_FM_MM<bits<10> funct> : MMArch {
641*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
642*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
643*9880d681SAndroid Build Coastguard Worker
644*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
645*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x00;
646*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
647*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
648*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
649*9880d681SAndroid Build Coastguard Worker}
650*9880d681SAndroid Build Coastguard Worker
651*9880d681SAndroid Build Coastguard Workerclass TEQ_FM_MM<bits<6> funct> : MMArch {
652*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
653*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
654*9880d681SAndroid Build Coastguard Worker  bits<4> code_;
655*9880d681SAndroid Build Coastguard Worker
656*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
657*9880d681SAndroid Build Coastguard Worker
658*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
659*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
660*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
661*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = code_;
662*9880d681SAndroid Build Coastguard Worker  let Inst{11-6}  = funct;
663*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
664*9880d681SAndroid Build Coastguard Worker}
665*9880d681SAndroid Build Coastguard Worker
666*9880d681SAndroid Build Coastguard Workerclass TEQI_FM_MM<bits<5> funct> : MMArch {
667*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
668*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
669*9880d681SAndroid Build Coastguard Worker
670*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
671*9880d681SAndroid Build Coastguard Worker
672*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
673*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = funct;
674*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
675*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
676*9880d681SAndroid Build Coastguard Worker}
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Workerclass LL_FM_MM<bits<4> funct> : MMArch {
679*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
680*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
681*9880d681SAndroid Build Coastguard Worker
682*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
683*9880d681SAndroid Build Coastguard Worker
684*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x18;
685*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
686*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = addr{20-16};
687*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
688*9880d681SAndroid Build Coastguard Worker  let Inst{11-0}  = addr{11-0};
689*9880d681SAndroid Build Coastguard Worker}
690*9880d681SAndroid Build Coastguard Worker
691*9880d681SAndroid Build Coastguard Workerclass LLE_FM_MM<bits<4> funct> {
692*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
693*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
694*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
695*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
696*9880d681SAndroid Build Coastguard Worker
697*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
698*9880d681SAndroid Build Coastguard Worker
699*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x18;
700*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
701*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
702*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
703*9880d681SAndroid Build Coastguard Worker  let Inst{11-9} = 0x6;
704*9880d681SAndroid Build Coastguard Worker  let Inst{8-0} = offset;
705*9880d681SAndroid Build Coastguard Worker}
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Workerclass ADDS_FM_MM<bits<2> fmt, bits<8> funct> : MMArch {
708*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
709*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
710*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
711*9880d681SAndroid Build Coastguard Worker
712*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
713*9880d681SAndroid Build Coastguard Worker
714*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
715*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
716*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
717*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
718*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = 0;
719*9880d681SAndroid Build Coastguard Worker  let Inst{9-8}   = fmt;
720*9880d681SAndroid Build Coastguard Worker  let Inst{7-0}   = funct;
721*9880d681SAndroid Build Coastguard Worker
722*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [];
723*9880d681SAndroid Build Coastguard Worker}
724*9880d681SAndroid Build Coastguard Worker
725*9880d681SAndroid Build Coastguard Workerclass LWXC1_FM_MM<bits<9> funct> : MMArch {
726*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
727*9880d681SAndroid Build Coastguard Worker  bits<5> base;
728*9880d681SAndroid Build Coastguard Worker  bits<5> index;
729*9880d681SAndroid Build Coastguard Worker
730*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
731*9880d681SAndroid Build Coastguard Worker
732*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
733*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = index;
734*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
735*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
736*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = 0x0;
737*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
738*9880d681SAndroid Build Coastguard Worker}
739*9880d681SAndroid Build Coastguard Worker
740*9880d681SAndroid Build Coastguard Workerclass SWXC1_FM_MM<bits<9> funct> : MMArch {
741*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
742*9880d681SAndroid Build Coastguard Worker  bits<5> base;
743*9880d681SAndroid Build Coastguard Worker  bits<5> index;
744*9880d681SAndroid Build Coastguard Worker
745*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
748*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = index;
749*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
750*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
751*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = 0x0;
752*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
753*9880d681SAndroid Build Coastguard Worker}
754*9880d681SAndroid Build Coastguard Worker
755*9880d681SAndroid Build Coastguard Workerclass CEQS_FM_MM<bits<2> fmt> : MMArch {
756*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
757*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
758*9880d681SAndroid Build Coastguard Worker  bits<4> cond;
759*9880d681SAndroid Build Coastguard Worker
760*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
761*9880d681SAndroid Build Coastguard Worker
762*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
763*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
764*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
765*9880d681SAndroid Build Coastguard Worker  let Inst{15-13} = 0x0;  // cc
766*9880d681SAndroid Build Coastguard Worker  let Inst{12}    = 0;
767*9880d681SAndroid Build Coastguard Worker  let Inst{11-10} = fmt;
768*9880d681SAndroid Build Coastguard Worker  let Inst{9-6}   = cond;
769*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
770*9880d681SAndroid Build Coastguard Worker}
771*9880d681SAndroid Build Coastguard Worker
772*9880d681SAndroid Build Coastguard Workerclass BC1F_FM_MM<bits<5> tf> : MMArch {
773*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
774*9880d681SAndroid Build Coastguard Worker
775*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
776*9880d681SAndroid Build Coastguard Worker
777*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
778*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = tf;
779*9880d681SAndroid Build Coastguard Worker  let Inst{20-18} = 0x0; // cc
780*9880d681SAndroid Build Coastguard Worker  let Inst{17-16} = 0x0;
781*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
782*9880d681SAndroid Build Coastguard Worker}
783*9880d681SAndroid Build Coastguard Worker
784*9880d681SAndroid Build Coastguard Workerclass ROUND_W_FM_MM<bits<1> fmt, bits<8> funct> : MMArch {
785*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
786*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
787*9880d681SAndroid Build Coastguard Worker
788*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
789*9880d681SAndroid Build Coastguard Worker
790*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
791*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fd;
792*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
793*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = 0;
794*9880d681SAndroid Build Coastguard Worker  let Inst{14}    = fmt;
795*9880d681SAndroid Build Coastguard Worker  let Inst{13-6}  = funct;
796*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3b;
797*9880d681SAndroid Build Coastguard Worker}
798*9880d681SAndroid Build Coastguard Worker
799*9880d681SAndroid Build Coastguard Workerclass ABS_FM_MM<bits<2> fmt, bits<7> funct> : MMArch {
800*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
801*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
802*9880d681SAndroid Build Coastguard Worker
803*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
804*9880d681SAndroid Build Coastguard Worker
805*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
806*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fd;
807*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
808*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = 0;
809*9880d681SAndroid Build Coastguard Worker  let Inst{14-13} = fmt;
810*9880d681SAndroid Build Coastguard Worker  let Inst{12-6}  = funct;
811*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3b;
812*9880d681SAndroid Build Coastguard Worker}
813*9880d681SAndroid Build Coastguard Worker
814*9880d681SAndroid Build Coastguard Workerclass CMov_F_F_FM_MM<bits<9> func, bits<2> fmt> : MMArch {
815*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
816*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
817*9880d681SAndroid Build Coastguard Worker
818*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
819*9880d681SAndroid Build Coastguard Worker
820*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
821*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fd;
822*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
823*9880d681SAndroid Build Coastguard Worker  let Inst{15-13} = 0x0; //cc
824*9880d681SAndroid Build Coastguard Worker  let Inst{12-11} = 0x0;
825*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = fmt;
826*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = func;
827*9880d681SAndroid Build Coastguard Worker}
828*9880d681SAndroid Build Coastguard Worker
829*9880d681SAndroid Build Coastguard Workerclass CMov_I_F_FM_MM<bits<8> funct, bits<2> fmt> : MMArch {
830*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
831*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
832*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
833*9880d681SAndroid Build Coastguard Worker
834*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
835*9880d681SAndroid Build Coastguard Worker
836*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
837*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
838*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
839*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
840*9880d681SAndroid Build Coastguard Worker  let Inst{9-8}   = fmt;
841*9880d681SAndroid Build Coastguard Worker  let Inst{7-0}   = funct;
842*9880d681SAndroid Build Coastguard Worker}
843*9880d681SAndroid Build Coastguard Worker
844*9880d681SAndroid Build Coastguard Workerclass MFC1_FM_MM<bits<8> funct> : MMArch {
845*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
846*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
847*9880d681SAndroid Build Coastguard Worker
848*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
849*9880d681SAndroid Build Coastguard Worker
850*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
851*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
852*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
853*9880d681SAndroid Build Coastguard Worker  let Inst{15-14} = 0x0;
854*9880d681SAndroid Build Coastguard Worker  let Inst{13-6}  = funct;
855*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3b;
856*9880d681SAndroid Build Coastguard Worker}
857*9880d681SAndroid Build Coastguard Worker
858*9880d681SAndroid Build Coastguard Workerclass MADDS_FM_MM<bits<6> funct>: MMArch {
859*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
860*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
861*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
862*9880d681SAndroid Build Coastguard Worker  bits<5> fr;
863*9880d681SAndroid Build Coastguard Worker
864*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
865*9880d681SAndroid Build Coastguard Worker
866*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x15;
867*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
868*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
869*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
870*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = fr;
871*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
872*9880d681SAndroid Build Coastguard Worker}
873*9880d681SAndroid Build Coastguard Worker
874*9880d681SAndroid Build Coastguard Workerclass COMPACT_BRANCH_FM_MM<bits<5> funct> {
875*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
876*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
877*9880d681SAndroid Build Coastguard Worker
878*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
879*9880d681SAndroid Build Coastguard Worker
880*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
881*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = funct;
882*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
883*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
884*9880d681SAndroid Build Coastguard Worker}
885*9880d681SAndroid Build Coastguard Worker
886*9880d681SAndroid Build Coastguard Workerclass COP0_TLB_FM_MM<bits<10> op> : MMArch {
887*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
888*9880d681SAndroid Build Coastguard Worker
889*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
890*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = 0x0;
891*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = op;
892*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
893*9880d681SAndroid Build Coastguard Worker}
894*9880d681SAndroid Build Coastguard Worker
895*9880d681SAndroid Build Coastguard Workerclass SDBBP_FM_MM : MMArch {
896*9880d681SAndroid Build Coastguard Worker  bits<10> code_;
897*9880d681SAndroid Build Coastguard Worker
898*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
899*9880d681SAndroid Build Coastguard Worker
900*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
901*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = code_;
902*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0x36d;
903*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
904*9880d681SAndroid Build Coastguard Worker}
905*9880d681SAndroid Build Coastguard Worker
906*9880d681SAndroid Build Coastguard Workerclass RDHWR_FM_MM : MMArch {
907*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
908*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
909*9880d681SAndroid Build Coastguard Worker
910*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
911*9880d681SAndroid Build Coastguard Worker
912*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
913*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
914*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rd;
915*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0x1ac;
916*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
917*9880d681SAndroid Build Coastguard Worker}
918*9880d681SAndroid Build Coastguard Worker
919*9880d681SAndroid Build Coastguard Workerclass LWXS_FM_MM<bits<10> funct> {
920*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
921*9880d681SAndroid Build Coastguard Worker  bits<5> base;
922*9880d681SAndroid Build Coastguard Worker  bits<5> index;
923*9880d681SAndroid Build Coastguard Worker
924*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
925*9880d681SAndroid Build Coastguard Worker
926*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
927*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = index;
928*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
929*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
930*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = 0;
931*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = funct;
932*9880d681SAndroid Build Coastguard Worker}
933*9880d681SAndroid Build Coastguard Worker
934*9880d681SAndroid Build Coastguard Workerclass LWM_FM_MM<bits<4> funct> : MMArch {
935*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
936*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
937*9880d681SAndroid Build Coastguard Worker
938*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
939*9880d681SAndroid Build Coastguard Worker
940*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x8;
941*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
942*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = addr{20-16};
943*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
944*9880d681SAndroid Build Coastguard Worker  let Inst{11-0}  = addr{11-0};
945*9880d681SAndroid Build Coastguard Worker}
946*9880d681SAndroid Build Coastguard Worker
947*9880d681SAndroid Build Coastguard Workerclass LWM_FM_MM16<bits<4> funct> : MMArch, PredicateControl {
948*9880d681SAndroid Build Coastguard Worker  bits<2> rt;
949*9880d681SAndroid Build Coastguard Worker  bits<4> addr;
950*9880d681SAndroid Build Coastguard Worker
951*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
952*9880d681SAndroid Build Coastguard Worker
953*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
954*9880d681SAndroid Build Coastguard Worker  let Inst{9-6}   = funct;
955*9880d681SAndroid Build Coastguard Worker  let Inst{5-4}   = rt;
956*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = addr;
957*9880d681SAndroid Build Coastguard Worker}
958*9880d681SAndroid Build Coastguard Worker
959*9880d681SAndroid Build Coastguard Workerclass CACHE_PREF_FM_MM<bits<6> op, bits<4> funct> : MMArch {
960*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
961*9880d681SAndroid Build Coastguard Worker  bits<5> hint;
962*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
963*9880d681SAndroid Build Coastguard Worker  bits<12> offset = addr{11-0};
964*9880d681SAndroid Build Coastguard Worker
965*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
966*9880d681SAndroid Build Coastguard Worker
967*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
968*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = hint;
969*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
970*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
971*9880d681SAndroid Build Coastguard Worker  let Inst{11-0}  = offset;
972*9880d681SAndroid Build Coastguard Worker}
973*9880d681SAndroid Build Coastguard Worker
974*9880d681SAndroid Build Coastguard Workerclass CACHE_PREFE_FM_MM<bits<6> op, bits<3> funct> : MMArch {
975*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
976*9880d681SAndroid Build Coastguard Worker  bits<5> hint;
977*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
978*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
979*9880d681SAndroid Build Coastguard Worker
980*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
981*9880d681SAndroid Build Coastguard Worker
982*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
983*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = hint;
984*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
985*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = 0xA;
986*9880d681SAndroid Build Coastguard Worker  let Inst{11-9} = funct;
987*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}  = offset;
988*9880d681SAndroid Build Coastguard Worker}
989*9880d681SAndroid Build Coastguard Worker
990*9880d681SAndroid Build Coastguard Workerclass POOL32F_PREFX_FM_MM<bits<6> op, bits<9> funct> : MMArch {
991*9880d681SAndroid Build Coastguard Worker  bits<5> index;
992*9880d681SAndroid Build Coastguard Worker  bits<5> base;
993*9880d681SAndroid Build Coastguard Worker  bits<5> hint;
994*9880d681SAndroid Build Coastguard Worker
995*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
996*9880d681SAndroid Build Coastguard Worker
997*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
998*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = index;
999*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
1000*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = hint;
1001*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = 0x0;
1002*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
1003*9880d681SAndroid Build Coastguard Worker}
1004*9880d681SAndroid Build Coastguard Worker
1005*9880d681SAndroid Build Coastguard Workerclass BARRIER_FM_MM<bits<5> op> : MMArch {
1006*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1007*9880d681SAndroid Build Coastguard Worker
1008*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
1009*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x0;
1010*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0x0;
1011*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = op;
1012*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0x0;
1013*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x0;
1014*9880d681SAndroid Build Coastguard Worker}
1015*9880d681SAndroid Build Coastguard Worker
1016*9880d681SAndroid Build Coastguard Workerclass ADDIUPC_FM_MM {
1017*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
1018*9880d681SAndroid Build Coastguard Worker  bits<23> imm;
1019*9880d681SAndroid Build Coastguard Worker
1020*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1021*9880d681SAndroid Build Coastguard Worker
1022*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1e;
1023*9880d681SAndroid Build Coastguard Worker  let Inst{25-23} = rs;
1024*9880d681SAndroid Build Coastguard Worker  let Inst{22-0} = imm;
1025*9880d681SAndroid Build Coastguard Worker}
1026