xref: /aosp_15_r20/external/llvm/lib/Target/Mips/MicroMips32r6InstrFormats.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//=- MicroMips32r6InstrFormats.td - Mips32r6 Instruction Formats -*- tablegen -*-==//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker// This file describes microMIPS32r6 instruction formats.
11*9880d681SAndroid Build Coastguard Worker//
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerclass MMR6Arch<string opstr> {
15*9880d681SAndroid Build Coastguard Worker  string Arch = "micromipsr6";
16*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = opstr;
17*9880d681SAndroid Build Coastguard Worker  string DecoderNamespace = "MicroMipsR6";
18*9880d681SAndroid Build Coastguard Worker}
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker// Class used for microMIPS32r6 and microMIPS64r6 instructions.
21*9880d681SAndroid Build Coastguard Workerclass MicroMipsR6Inst16 : PredicateControl {
22*9880d681SAndroid Build Coastguard Worker  string DecoderNamespace = "MicroMipsR6";
23*9880d681SAndroid Build Coastguard Worker  let InsnPredicates = [HasMicroMips32r6];
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
27*9880d681SAndroid Build Coastguard Worker//
28*9880d681SAndroid Build Coastguard Worker// Disambiguators
29*9880d681SAndroid Build Coastguard Worker//
30*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
31*9880d681SAndroid Build Coastguard Worker//
32*9880d681SAndroid Build Coastguard Worker// Some encodings are ambiguous except by comparing field values.
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerclass MMDecodeDisambiguatedBy<string Name> : DecodeDisambiguates<Name> {
35*9880d681SAndroid Build Coastguard Worker  string DecoderNamespace = "MicroMipsR6_Ambiguous";
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
39*9880d681SAndroid Build Coastguard Worker//
40*9880d681SAndroid Build Coastguard Worker// Encoding Formats
41*9880d681SAndroid Build Coastguard Worker//
42*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerclass BC16_FM_MM16R6 {
45*9880d681SAndroid Build Coastguard Worker  bits<10> offset;
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x33;
50*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = offset;
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerclass BEQZC_BNEZC_FM_MM16R6<bits<6> op> : MicroMipsR6Inst16 {
54*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
55*9880d681SAndroid Build Coastguard Worker  bits<7> offset;
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = op;
60*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rs;
61*9880d681SAndroid Build Coastguard Worker  let Inst{6-0}   = offset;
62*9880d681SAndroid Build Coastguard Worker}
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerclass POOL16C_JALRC_FM_MM16R6<bits<5> op> {
65*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
70*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = rs;
71*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = op;
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerclass POP35_BOVC_FM_MMR6<string instr_asm> : MipsR6Inst, MMR6Arch<instr_asm> {
75*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
76*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
77*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011101;
82*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
83*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
84*9880d681SAndroid Build Coastguard Worker  let Inst{15-0} = offset;
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerclass POP37_BNVC_FM_MMR6<string instr_asm> : MipsR6Inst, MMR6Arch<instr_asm> {
88*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
89*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
90*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011111;
95*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
96*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
97*9880d681SAndroid Build Coastguard Worker  let Inst{15-0} = offset;
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerclass POOL16C_JRCADDIUSP_FM_MM16R6<bits<5> op> {
101*9880d681SAndroid Build Coastguard Worker  bits<5> imm;
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
106*9880d681SAndroid Build Coastguard Worker  let Inst{9-5}   = imm;
107*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = op;
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Workerclass POOL16C_LWM_SWM_FM_MM16R6<bits<4> funct> {
111*9880d681SAndroid Build Coastguard Worker  bits<2> rt;
112*9880d681SAndroid Build Coastguard Worker  bits<4> addr;
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
117*9880d681SAndroid Build Coastguard Worker  let Inst{9-8}   = rt;
118*9880d681SAndroid Build Coastguard Worker  let Inst{7-4}   = addr;
119*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = funct;
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerclass POOL32A_BITSWAP_FM_MMR6<bits<6> funct> : MipsR6Inst {
123*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
124*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
129*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
130*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rd;
131*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = 0b0000;
132*9880d681SAndroid Build Coastguard Worker  let Inst{11-6} = funct;
133*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0b111100;
134*9880d681SAndroid Build Coastguard Worker}
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerclass CACHE_PREF_FM_MMR6<bits<6> opgroup, bits<4> funct> : MipsR6Inst {
137*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
138*9880d681SAndroid Build Coastguard Worker  bits<5> hint;
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = opgroup;
143*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = hint;
144*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = addr{20-16};
145*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
146*9880d681SAndroid Build Coastguard Worker  let Inst{11-0}  = addr{11-0};
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerclass ARITH_FM_MMR6<string instr_asm, bits<10> funct> : MMR6Arch<instr_asm> {
150*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
151*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
152*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
157*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
158*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
159*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
160*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = 0;
161*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = funct;
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerclass ADDI_FM_MMR6<string instr_asm, bits<6> op> : MMR6Arch<instr_asm> {
165*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
166*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
167*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
172*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
173*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
174*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
175*9880d681SAndroid Build Coastguard Worker}
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerclass POOL32C_ST_EVA_FM_MMR6<bits<6> op, bits<3> funct> : MipsR6Inst {
178*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
179*9880d681SAndroid Build Coastguard Worker  bits<5> hint;
180*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
181*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
186*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = hint;
187*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
188*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = 0b1010;
189*9880d681SAndroid Build Coastguard Worker  let Inst{11-9} = funct;
190*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}  = offset;
191*9880d681SAndroid Build Coastguard Worker}
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Workerclass LB32_FM_MMR6 : MipsR6Inst {
194*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
195*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
196*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
197*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000111;
202*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
203*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
204*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerclass LBU32_FM_MMR6 : MipsR6Inst {
208*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
209*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
210*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
211*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000101;
216*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
217*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
218*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerclass POOL32C_LB_LBU_FM_MMR6<bits<3> funct> : MipsR6Inst {
222*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
223*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011000;
228*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
229*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = addr{20-16};
230*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = 0b0110;
231*9880d681SAndroid Build Coastguard Worker  let Inst{11-9} = funct;
232*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}  = addr{8-0};
233*9880d681SAndroid Build Coastguard Worker}
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Workerclass SIGN_EXTEND_FM_MMR6<string instr_asm, bits<10> funct>
236*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm> {
237*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
238*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
243*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
244*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
245*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
246*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111100;
247*9880d681SAndroid Build Coastguard Worker}
248*9880d681SAndroid Build Coastguard Worker
249*9880d681SAndroid Build Coastguard Workerclass PCREL19_FM_MMR6<bits<2> funct> : MipsR6Inst {
250*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
251*9880d681SAndroid Build Coastguard Worker  bits<19> imm;
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011110;
256*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
257*9880d681SAndroid Build Coastguard Worker  let Inst{20-19} = funct;
258*9880d681SAndroid Build Coastguard Worker  let Inst{18-0}  = imm;
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerclass PCREL16_FM_MMR6<bits<5> funct> : MipsR6Inst {
262*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
263*9880d681SAndroid Build Coastguard Worker  bits<16> imm;
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011110;
268*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
269*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = funct;
270*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm;
271*9880d681SAndroid Build Coastguard Worker}
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Workerclass POOL32A_FM_MMR6<bits<10> funct> : MipsR6Inst {
274*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
275*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
276*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
279*9880d681SAndroid Build Coastguard Worker
280*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
281*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
282*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
283*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
284*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = 0;
285*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = funct;
286*9880d681SAndroid Build Coastguard Worker}
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Workerclass POOL32A_PAUSE_FM_MMR6<string instr_asm, bits<5> op> : MMR6Arch<instr_asm> {
289*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
292*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0;
293*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0;
294*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = op;
295*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = 0;
296*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0;
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Workerclass POOL32A_RDPGPR_FM_MMR6<bits<10> funct> {
300*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
301*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
302*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
305*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
306*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rd;
307*9880d681SAndroid Build Coastguard Worker  let Inst{15-6} = funct;
308*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0b111100;
309*9880d681SAndroid Build Coastguard Worker}
310*9880d681SAndroid Build Coastguard Worker
311*9880d681SAndroid Build Coastguard Workerclass POOL32A_RDHWR_FM_MMR6 {
312*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
313*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
314*9880d681SAndroid Build Coastguard Worker  bits<3> sel;
315*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
318*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
319*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
320*9880d681SAndroid Build Coastguard Worker  let Inst{15-14} = 0;
321*9880d681SAndroid Build Coastguard Worker  let Inst{13-11} = sel;
322*9880d681SAndroid Build Coastguard Worker  let Inst{10} = 0;
323*9880d681SAndroid Build Coastguard Worker  let Inst{9-0} = 0b0111000000;
324*9880d681SAndroid Build Coastguard Worker}
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Workerclass POOL32A_SYNC_FM_MMR6 {
327*9880d681SAndroid Build Coastguard Worker  bits<5> stype;
328*9880d681SAndroid Build Coastguard Worker
329*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
332*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0;
333*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = stype;
334*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0b0110101101;
335*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111100;
336*9880d681SAndroid Build Coastguard Worker}
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Workerclass POOL32I_SYNCI_FM_MMR6 {
339*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
340*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
341*9880d681SAndroid Build Coastguard Worker  bits<16> immediate = addr{15-0};
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
344*9880d681SAndroid Build Coastguard Worker
345*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010000;
346*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0b01100;
347*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
348*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = immediate;
349*9880d681SAndroid Build Coastguard Worker}
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Workerclass POOL32A_2R_FM_MMR6<bits<10> funct> : MipsR6Inst {
352*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
353*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
358*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
359*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
360*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
361*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111100;
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Workerclass SPECIAL_2R_FM_MMR6<bits<6> funct> : MipsR6Inst {
365*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
366*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
371*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
372*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0b00000;
373*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rt;
374*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0b00001;
375*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
376*9880d681SAndroid Build Coastguard Worker}
377*9880d681SAndroid Build Coastguard Worker
378*9880d681SAndroid Build Coastguard Workerclass POOL32A_ALIGN_FM_MMR6<bits<6> funct> : MipsR6Inst {
379*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
380*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
381*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
382*9880d681SAndroid Build Coastguard Worker  bits<2> bp;
383*9880d681SAndroid Build Coastguard Worker
384*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
387*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
388*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
389*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
390*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = bp;
391*9880d681SAndroid Build Coastguard Worker  let Inst{8-6}   = 0b000;
392*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
393*9880d681SAndroid Build Coastguard Worker}
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Workerclass AUI_FM_MMR6 : MipsR6Inst {
396*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
397*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
398*9880d681SAndroid Build Coastguard Worker  bits<16> imm;
399*9880d681SAndroid Build Coastguard Worker
400*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000100;
403*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
404*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
405*9880d681SAndroid Build Coastguard Worker  let Inst{15-0} = imm;
406*9880d681SAndroid Build Coastguard Worker}
407*9880d681SAndroid Build Coastguard Worker
408*9880d681SAndroid Build Coastguard Workerclass POOL32A_LSA_FM<bits<6> funct> : MipsR6Inst {
409*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
410*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
411*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
412*9880d681SAndroid Build Coastguard Worker  bits<2> imm2;
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
417*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
418*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
419*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
420*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = imm2;
421*9880d681SAndroid Build Coastguard Worker  let Inst{8-6}   = 0b000;
422*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
423*9880d681SAndroid Build Coastguard Worker}
424*9880d681SAndroid Build Coastguard Worker
425*9880d681SAndroid Build Coastguard Workerclass SB32_SH32_STORE_FM_MMR6<bits<6> op> {
426*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
427*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
428*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
429*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
430*9880d681SAndroid Build Coastguard Worker
431*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
434*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
435*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
436*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
437*9880d681SAndroid Build Coastguard Worker}
438*9880d681SAndroid Build Coastguard Worker
439*9880d681SAndroid Build Coastguard Workerclass POOL32C_STORE_EVA_FM_MMR6<bits<3> funct> {
440*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
441*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
442*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
443*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
446*9880d681SAndroid Build Coastguard Worker
447*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011000;
448*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
449*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
450*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = 0b1010;
451*9880d681SAndroid Build Coastguard Worker  let Inst{11-9}  = funct;
452*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = offset;
453*9880d681SAndroid Build Coastguard Worker}
454*9880d681SAndroid Build Coastguard Worker
455*9880d681SAndroid Build Coastguard Workerclass LOAD_WORD_EVA_FM_MMR6<bits<3> funct> {
456*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
457*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
458*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
459*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
460*9880d681SAndroid Build Coastguard Worker
461*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011000;
464*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
465*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
466*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = 0b0110;
467*9880d681SAndroid Build Coastguard Worker  let Inst{11-9}  = funct;
468*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = offset;
469*9880d681SAndroid Build Coastguard Worker}
470*9880d681SAndroid Build Coastguard Worker
471*9880d681SAndroid Build Coastguard Workerclass LOAD_WORD_FM_MMR6 {
472*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
473*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
474*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
475*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
476*9880d681SAndroid Build Coastguard Worker
477*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b111111;
480*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
481*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
482*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
483*9880d681SAndroid Build Coastguard Worker}
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Workerclass LOAD_UPPER_IMM_FM_MMR6 {
486*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
487*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
488*9880d681SAndroid Build Coastguard Worker
489*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000100;
492*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
493*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0;
494*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
495*9880d681SAndroid Build Coastguard Worker}
496*9880d681SAndroid Build Coastguard Worker
497*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_1R_RT_OFF16_FM_MMR6<string instr_asm, bits<6> funct>
498*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
499*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
500*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
501*9880d681SAndroid Build Coastguard Worker
502*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
503*9880d681SAndroid Build Coastguard Worker
504*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = funct;
505*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
506*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0b00000;
507*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
508*9880d681SAndroid Build Coastguard Worker}
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_1R_BOTH_OFF16_FM_MMR6<string instr_asm, bits<6> funct>
511*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
512*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
513*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = funct;
518*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
519*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
520*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
521*9880d681SAndroid Build Coastguard Worker}
522*9880d681SAndroid Build Coastguard Worker
523*9880d681SAndroid Build Coastguard Workerclass POOL32A_JALRC_FM_MMR6<string instr_asm, bits<10> funct>
524*9880d681SAndroid Build Coastguard Worker    : MipsR6Inst, MMR6Arch<instr_asm> {
525*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
526*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
529*9880d681SAndroid Build Coastguard Worker
530*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
531*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
532*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
533*9880d681SAndroid Build Coastguard Worker  let Inst{15-6} = funct;
534*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0b111100;
535*9880d681SAndroid Build Coastguard Worker}
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Workerclass POOL32A_EXT_INS_FM_MMR6<string instr_asm, bits<6> funct>
538*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
539*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
540*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
541*9880d681SAndroid Build Coastguard Worker  bits<5> size;
542*9880d681SAndroid Build Coastguard Worker  bits<5> pos;
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} = 0;
547*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
548*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
549*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = size;
550*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = pos;
551*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
552*9880d681SAndroid Build Coastguard Worker}
553*9880d681SAndroid Build Coastguard Worker
554*9880d681SAndroid Build Coastguard Workerclass POOL32A_ERET_FM_MMR6<string instr_asm, bits<10> funct>
555*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm> {
556*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
557*9880d681SAndroid Build Coastguard Worker
558*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
559*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = 0x00;
560*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
561*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
562*9880d681SAndroid Build Coastguard Worker}
563*9880d681SAndroid Build Coastguard Worker
564*9880d681SAndroid Build Coastguard Workerclass ERETNC_FM_MMR6<string instr_asm> : MMR6Arch<instr_asm> {
565*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
566*9880d681SAndroid Build Coastguard Worker
567*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
568*9880d681SAndroid Build Coastguard Worker  let Inst{25-17} = 0x00;
569*9880d681SAndroid Build Coastguard Worker  let Inst{16-16} = 0x01;
570*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0x3cd;
571*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
572*9880d681SAndroid Build Coastguard Worker}
573*9880d681SAndroid Build Coastguard Worker
574*9880d681SAndroid Build Coastguard Workerclass BREAK_MMR6_ENC<string instr_asm> : MMR6Arch<instr_asm> {
575*9880d681SAndroid Build Coastguard Worker  bits<10> code_1;
576*9880d681SAndroid Build Coastguard Worker  bits<10> code_2;
577*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
578*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
579*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = code_1;
580*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = code_2;
581*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x07;
582*9880d681SAndroid Build Coastguard Worker}
583*9880d681SAndroid Build Coastguard Worker
584*9880d681SAndroid Build Coastguard Workerclass BARRIER_MMR6_ENC<string instr_asm, bits<5> op> : MMR6Arch<instr_asm> {
585*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
586*9880d681SAndroid Build Coastguard Worker
587*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
588*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x0;
589*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0x0;
590*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = op;
591*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0x0;
592*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x0;
593*9880d681SAndroid Build Coastguard Worker}
594*9880d681SAndroid Build Coastguard Worker
595*9880d681SAndroid Build Coastguard Workerclass POOL32A_EIDI_MMR6_ENC<string instr_asm, bits<10> funct>
596*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm> {
597*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
598*9880d681SAndroid Build Coastguard Worker  bits<5> rt; // Actually rs but we're sharing code with the standard encodings which call it rt
599*9880d681SAndroid Build Coastguard Worker
600*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
601*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x00;
602*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
603*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
604*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
605*9880d681SAndroid Build Coastguard Worker}
606*9880d681SAndroid Build Coastguard Worker
607*9880d681SAndroid Build Coastguard Workerclass SHIFT_MMR6_ENC<string instr_asm, bits<10> funct, bit rotate> : MMR6Arch<instr_asm> {
608*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
609*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
610*9880d681SAndroid Build Coastguard Worker  bits<5> shamt;
611*9880d681SAndroid Build Coastguard Worker
612*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
613*9880d681SAndroid Build Coastguard Worker
614*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
615*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
616*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
617*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = shamt;
618*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = rotate;
619*9880d681SAndroid Build Coastguard Worker  let Inst{9-0}   = funct;
620*9880d681SAndroid Build Coastguard Worker}
621*9880d681SAndroid Build Coastguard Worker
622*9880d681SAndroid Build Coastguard Workerclass SW32_FM_MMR6<string instr_asm, bits<6> op> : MMR6Arch<instr_asm> {
623*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
624*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
625*9880d681SAndroid Build Coastguard Worker
626*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
629*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
630*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = addr{20-16};
631*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = addr{15-0};
632*9880d681SAndroid Build Coastguard Worker}
633*9880d681SAndroid Build Coastguard Worker
634*9880d681SAndroid Build Coastguard Workerclass POOL32C_SWE_FM_MMR6<string instr_asm, bits<6> op, bits<4> fmt,
635*9880d681SAndroid Build Coastguard Worker    bits<3> funct> : MMR6Arch<instr_asm> {
636*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
637*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
638*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
639*9880d681SAndroid Build Coastguard Worker  bits<9> offset = addr{8-0};
640*9880d681SAndroid Build Coastguard Worker
641*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
642*9880d681SAndroid Build Coastguard Worker
643*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
644*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
645*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
646*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = fmt;
647*9880d681SAndroid Build Coastguard Worker  let Inst{11-9} = funct;
648*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}  = offset;
649*9880d681SAndroid Build Coastguard Worker}
650*9880d681SAndroid Build Coastguard Worker
651*9880d681SAndroid Build Coastguard Workerclass POOL32F_ARITH_FM_MMR6<string instr_asm, bits<2> fmt, bits<8> funct>
652*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
653*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
654*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
655*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
656*9880d681SAndroid Build Coastguard Worker
657*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
658*9880d681SAndroid Build Coastguard Worker
659*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
660*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
661*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
662*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
663*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = 0;
664*9880d681SAndroid Build Coastguard Worker  let Inst{9-8}   = fmt;
665*9880d681SAndroid Build Coastguard Worker  let Inst{7-0}   = funct;
666*9880d681SAndroid Build Coastguard Worker}
667*9880d681SAndroid Build Coastguard Worker
668*9880d681SAndroid Build Coastguard Workerclass POOL32F_ARITHF_FM_MMR6<string instr_asm, bits<2> fmt, bits<9> funct>
669*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
670*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
671*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
672*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
673*9880d681SAndroid Build Coastguard Worker
674*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
675*9880d681SAndroid Build Coastguard Worker
676*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
677*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
678*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
679*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
680*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = fmt;
681*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
682*9880d681SAndroid Build Coastguard Worker}
683*9880d681SAndroid Build Coastguard Worker
684*9880d681SAndroid Build Coastguard Workerclass POOL32F_MOV_NEG_FM_MMR6<string instr_asm, bits<2> fmt, bits<7> funct>
685*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
686*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
687*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
688*9880d681SAndroid Build Coastguard Worker
689*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
690*9880d681SAndroid Build Coastguard Worker
691*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
692*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
693*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
694*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = 0;
695*9880d681SAndroid Build Coastguard Worker  let Inst{14-13} = fmt;
696*9880d681SAndroid Build Coastguard Worker  let Inst{12-6}  = funct;
697*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111011;
698*9880d681SAndroid Build Coastguard Worker}
699*9880d681SAndroid Build Coastguard Worker
700*9880d681SAndroid Build Coastguard Workerclass POOL32F_MINMAX_FM<string instr_asm, bits<2> fmt, bits<9> funct>
701*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
702*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
703*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
704*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
705*9880d681SAndroid Build Coastguard Worker
706*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
707*9880d681SAndroid Build Coastguard Worker
708*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
709*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
710*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
711*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
712*9880d681SAndroid Build Coastguard Worker  let Inst{10-9} = fmt;
713*9880d681SAndroid Build Coastguard Worker  let Inst{8-0} = funct;
714*9880d681SAndroid Build Coastguard Worker}
715*9880d681SAndroid Build Coastguard Worker
716*9880d681SAndroid Build Coastguard Workerclass POOL32F_CMP_FM<string instr_asm, bits<6> format, FIELD_CMP_COND Cond>
717*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
718*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
719*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
720*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
721*9880d681SAndroid Build Coastguard Worker
722*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
723*9880d681SAndroid Build Coastguard Worker
724*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
725*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
726*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
727*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
728*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = Cond.Value;
729*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = format;
730*9880d681SAndroid Build Coastguard Worker}
731*9880d681SAndroid Build Coastguard Worker
732*9880d681SAndroid Build Coastguard Workerclass POOL32F_CVT_LW_FM<string instr_asm, bit fmt, bits<8> funct>
733*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
734*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
735*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
736*9880d681SAndroid Build Coastguard Worker
737*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
738*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
739*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
740*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
741*9880d681SAndroid Build Coastguard Worker  let Inst{15} = 0;
742*9880d681SAndroid Build Coastguard Worker  let Inst{14} = fmt;
743*9880d681SAndroid Build Coastguard Worker  let Inst{13-6} = funct;
744*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0b111011;
745*9880d681SAndroid Build Coastguard Worker}
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Workerclass POOL32F_CVT_DS_FM<string instr_asm, bits<2> fmt, bits<7> funct>
748*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
749*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
750*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
751*9880d681SAndroid Build Coastguard Worker
752*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
753*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
754*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
755*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
756*9880d681SAndroid Build Coastguard Worker  let Inst{15} = 0;
757*9880d681SAndroid Build Coastguard Worker  let Inst{14-13} = fmt;
758*9880d681SAndroid Build Coastguard Worker  let Inst{12-6} = funct;
759*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0b111011;
760*9880d681SAndroid Build Coastguard Worker}
761*9880d681SAndroid Build Coastguard Worker
762*9880d681SAndroid Build Coastguard Workerclass POOL32F_ABS_FM_MMR6<string instr_asm, bits<2> fmt, bits<7> funct>
763*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
764*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
765*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
766*9880d681SAndroid Build Coastguard Worker
767*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
768*9880d681SAndroid Build Coastguard Worker
769*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
770*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
771*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
772*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = 0;
773*9880d681SAndroid Build Coastguard Worker  let Inst{14-13} = fmt;
774*9880d681SAndroid Build Coastguard Worker  let Inst{12-6}  = funct;
775*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111011;
776*9880d681SAndroid Build Coastguard Worker}
777*9880d681SAndroid Build Coastguard Worker
778*9880d681SAndroid Build Coastguard Workerclass POOL32F_MATH_FM_MMR6<string instr_asm, bits<1> fmt, bits<8> funct>
779*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
780*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
781*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
782*9880d681SAndroid Build Coastguard Worker
783*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
784*9880d681SAndroid Build Coastguard Worker
785*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
786*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
787*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
788*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = 0;
789*9880d681SAndroid Build Coastguard Worker  let Inst{14}    = fmt;
790*9880d681SAndroid Build Coastguard Worker  let Inst{13-6}  = funct;
791*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111011;
792*9880d681SAndroid Build Coastguard Worker}
793*9880d681SAndroid Build Coastguard Worker
794*9880d681SAndroid Build Coastguard Workerclass POOL16A_ADDU16_FM_MMR6 : MicroMipsR6Inst16 {
795*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
796*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
797*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
798*9880d681SAndroid Build Coastguard Worker
799*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
800*9880d681SAndroid Build Coastguard Worker
801*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0b000001;
802*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rs;
803*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rt;
804*9880d681SAndroid Build Coastguard Worker  let Inst{3-1}   = rd;
805*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = 0;
806*9880d681SAndroid Build Coastguard Worker}
807*9880d681SAndroid Build Coastguard Worker
808*9880d681SAndroid Build Coastguard Workerclass POOL16C_AND16_FM_MMR6 : MicroMipsR6Inst16 {
809*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
810*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
811*9880d681SAndroid Build Coastguard Worker
812*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
813*9880d681SAndroid Build Coastguard Worker
814*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0b010001;
815*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rt;
816*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rs;
817*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = 0b0001;
818*9880d681SAndroid Build Coastguard Worker}
819*9880d681SAndroid Build Coastguard Worker
820*9880d681SAndroid Build Coastguard Workerclass POOL16C_NOT16_FM_MMR6 : MicroMipsR6Inst16 {
821*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
822*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
823*9880d681SAndroid Build Coastguard Worker
824*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
825*9880d681SAndroid Build Coastguard Worker
826*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0x11;
827*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rt;
828*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rs;
829*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = 0b0000;
830*9880d681SAndroid Build Coastguard Worker}
831*9880d681SAndroid Build Coastguard Worker
832*9880d681SAndroid Build Coastguard Workerclass POOL16C_OR16_XOR16_FM_MMR6<bits<4> op> : MicroMipsR6Inst16 {
833*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
834*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
835*9880d681SAndroid Build Coastguard Worker
836*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
837*9880d681SAndroid Build Coastguard Worker
838*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0b010001;
839*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rt;
840*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rs;
841*9880d681SAndroid Build Coastguard Worker  let Inst{3-0}   = op;
842*9880d681SAndroid Build Coastguard Worker}
843*9880d681SAndroid Build Coastguard Worker
844*9880d681SAndroid Build Coastguard Workerclass POOL16C_BREAKPOINT_FM_MMR6<bits<6> op> {
845*9880d681SAndroid Build Coastguard Worker  bits<4> code_;
846*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
847*9880d681SAndroid Build Coastguard Worker
848*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0b010001;
849*9880d681SAndroid Build Coastguard Worker  let Inst{9-6}   = code_;
850*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = op;
851*9880d681SAndroid Build Coastguard Worker}
852*9880d681SAndroid Build Coastguard Worker
853*9880d681SAndroid Build Coastguard Workerclass POOL16A_SUBU16_FM_MMR6 {
854*9880d681SAndroid Build Coastguard Worker  bits<3> rs;
855*9880d681SAndroid Build Coastguard Worker  bits<3> rt;
856*9880d681SAndroid Build Coastguard Worker  bits<3> rd;
857*9880d681SAndroid Build Coastguard Worker
858*9880d681SAndroid Build Coastguard Worker  bits<16> Inst;
859*9880d681SAndroid Build Coastguard Worker
860*9880d681SAndroid Build Coastguard Worker  let Inst{15-10} = 0b000001;
861*9880d681SAndroid Build Coastguard Worker  let Inst{9-7}   = rs;
862*9880d681SAndroid Build Coastguard Worker  let Inst{6-4}   = rt;
863*9880d681SAndroid Build Coastguard Worker  let Inst{3-1}   = rd;
864*9880d681SAndroid Build Coastguard Worker  let Inst{0}     = 0b1;
865*9880d681SAndroid Build Coastguard Worker}
866*9880d681SAndroid Build Coastguard Worker
867*9880d681SAndroid Build Coastguard Workerclass POOL32A_WRPGPR_WSBH_FM_MMR6<bits<10> funct> : MipsR6Inst {
868*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
869*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
870*9880d681SAndroid Build Coastguard Worker
871*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
872*9880d681SAndroid Build Coastguard Worker
873*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x00;
874*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
875*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
876*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
877*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3c;
878*9880d681SAndroid Build Coastguard Worker}
879*9880d681SAndroid Build Coastguard Worker
880*9880d681SAndroid Build Coastguard Workerclass POOL32F_RECIP_ROUND_FM_MMR6<string instr_asm, bits<1> fmt, bits<8> funct>
881*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
882*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
883*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
884*9880d681SAndroid Build Coastguard Worker
885*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
886*9880d681SAndroid Build Coastguard Worker
887*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
888*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
889*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
890*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = 0;
891*9880d681SAndroid Build Coastguard Worker  let Inst{14}    = fmt;
892*9880d681SAndroid Build Coastguard Worker  let Inst{13-6}  = funct;
893*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111011;
894*9880d681SAndroid Build Coastguard Worker}
895*9880d681SAndroid Build Coastguard Worker
896*9880d681SAndroid Build Coastguard Workerclass POOL32F_RINT_FM_MMR6<string instr_asm, bits<2> fmt>
897*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
898*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
899*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
900*9880d681SAndroid Build Coastguard Worker
901*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
902*9880d681SAndroid Build Coastguard Worker
903*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
904*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fs;
905*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fd;
906*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = 0;
907*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = fmt;
908*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = 0b000100000;
909*9880d681SAndroid Build Coastguard Worker}
910*9880d681SAndroid Build Coastguard Worker
911*9880d681SAndroid Build Coastguard Workerclass POOL32F_SEL_FM_MMR6<string instr_asm, bits<2> fmt, bits<9> funct>
912*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
913*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
914*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
915*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
916*9880d681SAndroid Build Coastguard Worker
917*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
918*9880d681SAndroid Build Coastguard Worker
919*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
920*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
921*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
922*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fd;
923*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = fmt;
924*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
925*9880d681SAndroid Build Coastguard Worker}
926*9880d681SAndroid Build Coastguard Worker
927*9880d681SAndroid Build Coastguard Workerclass POOL32F_CLASS_FM_MMR6<string instr_asm, bits<2> fmt, bits<9> funct>
928*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
929*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
930*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
931*9880d681SAndroid Build Coastguard Worker
932*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
933*9880d681SAndroid Build Coastguard Worker
934*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
935*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fs;
936*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fd;
937*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = 0b00000;
938*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = fmt;
939*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
940*9880d681SAndroid Build Coastguard Worker}
941*9880d681SAndroid Build Coastguard Worker
942*9880d681SAndroid Build Coastguard Workerclass POOL32A_TLBINV_FM_MMR6<string instr_asm, bits<10> funct>
943*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
944*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
945*9880d681SAndroid Build Coastguard Worker
946*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
947*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = 0x0;
948*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
949*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111100;
950*9880d681SAndroid Build Coastguard Worker}
951*9880d681SAndroid Build Coastguard Worker
952*9880d681SAndroid Build Coastguard Workerclass POOL32A_MFTC0_FM_MMR6<string instr_asm, bits<5> funct, bits<6> opcode>
953*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
954*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
955*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
956*9880d681SAndroid Build Coastguard Worker  bits<3> sel;
957*9880d681SAndroid Build Coastguard Worker
958*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
959*9880d681SAndroid Build Coastguard Worker
960*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
961*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
962*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
963*9880d681SAndroid Build Coastguard Worker  let Inst{15-14} = 0;
964*9880d681SAndroid Build Coastguard Worker  let Inst{13-11} = sel;
965*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = funct;
966*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = opcode;
967*9880d681SAndroid Build Coastguard Worker}
968*9880d681SAndroid Build Coastguard Worker
969*9880d681SAndroid Build Coastguard Workerclass POOL32F_MFTC1_FM_MMR6<string instr_asm, bits<8> funct>
970*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm> {
971*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
972*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
973*9880d681SAndroid Build Coastguard Worker
974*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
975*9880d681SAndroid Build Coastguard Worker
976*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010101;
977*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
978*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = fs;
979*9880d681SAndroid Build Coastguard Worker  let Inst{15-14} = 0;
980*9880d681SAndroid Build Coastguard Worker  let Inst{13-6}  = funct;
981*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111011;
982*9880d681SAndroid Build Coastguard Worker}
983*9880d681SAndroid Build Coastguard Worker
984*9880d681SAndroid Build Coastguard Workerclass POOL32A_MFTC2_FM_MMR6<string instr_asm, bits<10> funct>
985*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
986*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
987*9880d681SAndroid Build Coastguard Worker  bits<5> impl;
988*9880d681SAndroid Build Coastguard Worker
989*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
990*9880d681SAndroid Build Coastguard Worker
991*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
992*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
993*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = impl;
994*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
995*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111100;
996*9880d681SAndroid Build Coastguard Worker}
997*9880d681SAndroid Build Coastguard Worker
998*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_2R_OFF16_FM_MMR6<string opstr, bits<6> funct>
999*9880d681SAndroid Build Coastguard Worker    : MipsR6Inst, MMR6Arch<opstr> {
1000*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
1001*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
1002*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
1003*9880d681SAndroid Build Coastguard Worker
1004*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1005*9880d681SAndroid Build Coastguard Worker
1006*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = funct;
1007*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
1008*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
1009*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
1010*9880d681SAndroid Build Coastguard Worker}
1011*9880d681SAndroid Build Coastguard Worker
1012*9880d681SAndroid Build Coastguard Workerclass POOL32A_DVPEVP_FM_MMR6<string instr_asm, bits<10> funct>
1013*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
1014*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
1015*9880d681SAndroid Build Coastguard Worker
1016*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1017*9880d681SAndroid Build Coastguard Worker
1018*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000000;
1019*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0b00000;
1020*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
1021*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = funct;
1022*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111100;
1023*9880d681SAndroid Build Coastguard Worker}
1024*9880d681SAndroid Build Coastguard Worker
1025*9880d681SAndroid Build Coastguard Workerclass POOL32B_LWP_SWP_FM_MMR6<bits<4> funct> : MipsR6Inst {
1026*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
1027*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
1028*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
1029*9880d681SAndroid Build Coastguard Worker  bits<12> offset = addr{11-0};
1030*9880d681SAndroid Build Coastguard Worker
1031*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1032*9880d681SAndroid Build Coastguard Worker
1033*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x8;
1034*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rd;
1035*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
1036*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
1037*9880d681SAndroid Build Coastguard Worker  let Inst{11-0}  = offset;
1038*9880d681SAndroid Build Coastguard Worker}
1039*9880d681SAndroid Build Coastguard Worker
1040*9880d681SAndroid Build Coastguard Workerclass CMP_BRANCH_OFF21_FM_MMR6<string opstr, bits<6> funct> : MipsR6Inst {
1041*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
1042*9880d681SAndroid Build Coastguard Worker  bits<21> offset;
1043*9880d681SAndroid Build Coastguard Worker
1044*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1045*9880d681SAndroid Build Coastguard Worker
1046*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = funct;
1047*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
1048*9880d681SAndroid Build Coastguard Worker  let Inst{20-0} = offset;
1049*9880d681SAndroid Build Coastguard Worker}
1050*9880d681SAndroid Build Coastguard Worker
1051*9880d681SAndroid Build Coastguard Workerclass POOL32I_BRANCH_COP_1_2_FM_MMR6<string instr_asm, bits<5> funct>
1052*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm> {
1053*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
1054*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
1055*9880d681SAndroid Build Coastguard Worker
1056*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1057*9880d681SAndroid Build Coastguard Worker
1058*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010000;
1059*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = funct;
1060*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
1061*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
1062*9880d681SAndroid Build Coastguard Worker}
1063*9880d681SAndroid Build Coastguard Worker
1064*9880d681SAndroid Build Coastguard Workerclass LDWC1_SDWC1_FM_MMR6<string instr_asm, bits<6> funct>
1065*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm> {
1066*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
1067*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
1068*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
1069*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
1070*9880d681SAndroid Build Coastguard Worker
1071*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1072*9880d681SAndroid Build Coastguard Worker
1073*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = funct;
1074*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = ft;
1075*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
1076*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
1077*9880d681SAndroid Build Coastguard Worker}
1078*9880d681SAndroid Build Coastguard Worker
1079*9880d681SAndroid Build Coastguard Workerclass POOL32B_LDWC2_SDWC2_FM_MMR6<string instr_asm, bits<4> funct>
1080*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
1081*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
1082*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
1083*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
1084*9880d681SAndroid Build Coastguard Worker  bits<11> offset = addr{10-0};
1085*9880d681SAndroid Build Coastguard Worker
1086*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
1087*9880d681SAndroid Build Coastguard Worker
1088*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b001000;
1089*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
1090*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
1091*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
1092*9880d681SAndroid Build Coastguard Worker  let Inst{11}    = 0;
1093*9880d681SAndroid Build Coastguard Worker  let Inst{10-0}  = offset;
1094*9880d681SAndroid Build Coastguard Worker}
1095