xref: /aosp_15_r20/external/llvm/lib/Target/Mips/MipsInstrFormats.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- MipsInstrFormats.td - Mips 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//===----------------------------------------------------------------------===//
11*9880d681SAndroid Build Coastguard Worker//  Describe MIPS instructions format
12*9880d681SAndroid Build Coastguard Worker//
13*9880d681SAndroid Build Coastguard Worker//  CPU INSTRUCTION FORMATS
14*9880d681SAndroid Build Coastguard Worker//
15*9880d681SAndroid Build Coastguard Worker//  opcode  - operation code.
16*9880d681SAndroid Build Coastguard Worker//  rs      - src reg.
17*9880d681SAndroid Build Coastguard Worker//  rt      - dst reg (on a 2 regs instr) or src reg (on a 3 reg instr).
18*9880d681SAndroid Build Coastguard Worker//  rd      - dst reg, only used on 3 regs instr.
19*9880d681SAndroid Build Coastguard Worker//  shamt   - only used on shift instructions, contains the shift amount.
20*9880d681SAndroid Build Coastguard Worker//  funct   - combined with opcode field give us an operation code.
21*9880d681SAndroid Build Coastguard Worker//
22*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker// Format specifies the encoding used by the instruction.  This is part of the
25*9880d681SAndroid Build Coastguard Worker// ad-hoc solution used to emit machine instruction encodings by our machine
26*9880d681SAndroid Build Coastguard Worker// code emitter.
27*9880d681SAndroid Build Coastguard Workerclass Format<bits<4> val> {
28*9880d681SAndroid Build Coastguard Worker  bits<4> Value = val;
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdef Pseudo    : Format<0>;
32*9880d681SAndroid Build Coastguard Workerdef FrmR      : Format<1>;
33*9880d681SAndroid Build Coastguard Workerdef FrmI      : Format<2>;
34*9880d681SAndroid Build Coastguard Workerdef FrmJ      : Format<3>;
35*9880d681SAndroid Build Coastguard Workerdef FrmFR     : Format<4>;
36*9880d681SAndroid Build Coastguard Workerdef FrmFI     : Format<5>;
37*9880d681SAndroid Build Coastguard Workerdef FrmOther  : Format<6>; // Instruction w/ a custom format
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerclass MMRel;
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdef Std2MicroMips : InstrMapping {
42*9880d681SAndroid Build Coastguard Worker  let FilterClass = "MMRel";
43*9880d681SAndroid Build Coastguard Worker  // Instructions with the same BaseOpcode and isNVStore values form a row.
44*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode"];
45*9880d681SAndroid Build Coastguard Worker  // Instructions with the same predicate sense form a column.
46*9880d681SAndroid Build Coastguard Worker  let ColFields = ["Arch"];
47*9880d681SAndroid Build Coastguard Worker  // The key column is the unpredicated instructions.
48*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["se"];
49*9880d681SAndroid Build Coastguard Worker  // Value columns are PredSense=true and PredSense=false
50*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["se"], ["micromips"]];
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerclass StdMMR6Rel;
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdef Std2MicroMipsR6 : InstrMapping {
56*9880d681SAndroid Build Coastguard Worker  let FilterClass = "StdMMR6Rel";
57*9880d681SAndroid Build Coastguard Worker  // Instructions with the same BaseOpcode and isNVStore values form a row.
58*9880d681SAndroid Build Coastguard Worker  let RowFields = ["BaseOpcode"];
59*9880d681SAndroid Build Coastguard Worker  // Instructions with the same predicate sense form a column.
60*9880d681SAndroid Build Coastguard Worker  let ColFields = ["Arch"];
61*9880d681SAndroid Build Coastguard Worker  // The key column is the unpredicated instructions.
62*9880d681SAndroid Build Coastguard Worker  let KeyCol = ["se"];
63*9880d681SAndroid Build Coastguard Worker  // Value columns are PredSense=true and PredSense=false
64*9880d681SAndroid Build Coastguard Worker  let ValueCols = [["se"], ["micromipsr6"]];
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerclass StdArch {
68*9880d681SAndroid Build Coastguard Worker  string Arch = "se";
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker// Generic Mips Format
72*9880d681SAndroid Build Coastguard Workerclass MipsInst<dag outs, dag ins, string asmstr, list<dag> pattern,
73*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, Format f>: Instruction
74*9880d681SAndroid Build Coastguard Worker{
75*9880d681SAndroid Build Coastguard Worker  field bits<32> Inst;
76*9880d681SAndroid Build Coastguard Worker  Format Form = f;
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker  let Namespace = "Mips";
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker  let Size = 4;
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker  bits<6> Opcode = 0;
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker  // Top 6 bits are the 'opcode' field
85*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = Opcode;
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker  let OutOperandList = outs;
88*9880d681SAndroid Build Coastguard Worker  let InOperandList  = ins;
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker  let AsmString   = asmstr;
91*9880d681SAndroid Build Coastguard Worker  let Pattern     = pattern;
92*9880d681SAndroid Build Coastguard Worker  let Itinerary   = itin;
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker  //
95*9880d681SAndroid Build Coastguard Worker  // Attributes specific to Mips instructions...
96*9880d681SAndroid Build Coastguard Worker  //
97*9880d681SAndroid Build Coastguard Worker  bits<4> FormBits     = Form.Value;
98*9880d681SAndroid Build Coastguard Worker  bit isCTI            = 0; // Any form of Control Transfer Instruction.
99*9880d681SAndroid Build Coastguard Worker                            // Required for MIPSR6
100*9880d681SAndroid Build Coastguard Worker  bit hasForbiddenSlot = 0; // Instruction has a forbidden slot.
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker  // TSFlags layout should be kept in sync with MipsInstrInfo.h.
103*9880d681SAndroid Build Coastguard Worker  let TSFlags{3-0}   = FormBits;
104*9880d681SAndroid Build Coastguard Worker  let TSFlags{4}     = isCTI;
105*9880d681SAndroid Build Coastguard Worker  let TSFlags{5}     = hasForbiddenSlot;
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker  let DecoderNamespace = "Mips";
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker  field bits<32> SoftFail = 0;
110*9880d681SAndroid Build Coastguard Worker}
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker// Mips32/64 Instruction Format
113*9880d681SAndroid Build Coastguard Workerclass InstSE<dag outs, dag ins, string asmstr, list<dag> pattern,
114*9880d681SAndroid Build Coastguard Worker             InstrItinClass itin, Format f, string opstr = ""> :
115*9880d681SAndroid Build Coastguard Worker  MipsInst<outs, ins, asmstr, pattern, itin, f>, PredicateControl {
116*9880d681SAndroid Build Coastguard Worker  let EncodingPredicates = [HasStdEnc];
117*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = opstr;
118*9880d681SAndroid Build Coastguard Worker  string Arch;
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker// Mips Pseudo Instructions Format
122*9880d681SAndroid Build Coastguard Workerclass MipsPseudo<dag outs, dag ins, list<dag> pattern,
123*9880d681SAndroid Build Coastguard Worker                 InstrItinClass itin = IIPseudo> :
124*9880d681SAndroid Build Coastguard Worker  MipsInst<outs, ins, "", pattern, itin, Pseudo> {
125*9880d681SAndroid Build Coastguard Worker  let isCodeGenOnly = 1;
126*9880d681SAndroid Build Coastguard Worker  let isPseudo = 1;
127*9880d681SAndroid Build Coastguard Worker}
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker// Mips32/64 Pseudo Instruction Format
130*9880d681SAndroid Build Coastguard Workerclass PseudoSE<dag outs, dag ins, list<dag> pattern,
131*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin = IIPseudo> :
132*9880d681SAndroid Build Coastguard Worker  MipsPseudo<outs, ins, pattern, itin>, PredicateControl {
133*9880d681SAndroid Build Coastguard Worker  let EncodingPredicates = [HasStdEnc];
134*9880d681SAndroid Build Coastguard Worker}
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker// Pseudo-instructions for alternate assembly syntax (never used by codegen).
137*9880d681SAndroid Build Coastguard Worker// These are aliases that require C++ handling to convert to the target
138*9880d681SAndroid Build Coastguard Worker// instruction, while InstAliases can be handled directly by tblgen.
139*9880d681SAndroid Build Coastguard Workerclass MipsAsmPseudoInst<dag outs, dag ins, string asmstr>:
140*9880d681SAndroid Build Coastguard Worker  MipsInst<outs, ins, asmstr, [], IIPseudo, Pseudo>, PredicateControl {
141*9880d681SAndroid Build Coastguard Worker  let isPseudo = 1;
142*9880d681SAndroid Build Coastguard Worker  let Pattern = [];
143*9880d681SAndroid Build Coastguard Worker}
144*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
145*9880d681SAndroid Build Coastguard Worker// Format R instruction class in Mips : <|opcode|rs|rt|rd|shamt|funct|>
146*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workerclass FR<bits<6> op, bits<6> _funct, dag outs, dag ins, string asmstr,
149*9880d681SAndroid Build Coastguard Worker         list<dag> pattern, InstrItinClass itin>:
150*9880d681SAndroid Build Coastguard Worker  InstSE<outs, ins, asmstr, pattern, itin, FrmR>
151*9880d681SAndroid Build Coastguard Worker{
152*9880d681SAndroid Build Coastguard Worker  bits<5>  rd;
153*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
154*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
155*9880d681SAndroid Build Coastguard Worker  bits<5>  shamt;
156*9880d681SAndroid Build Coastguard Worker  bits<6>  funct;
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker  let Opcode = op;
159*9880d681SAndroid Build Coastguard Worker  let funct  = _funct;
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
162*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
163*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
164*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = shamt;
165*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
166*9880d681SAndroid Build Coastguard Worker}
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
169*9880d681SAndroid Build Coastguard Worker// Format I instruction class in Mips : <|opcode|rs|rt|immediate|>
170*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Workerclass FI<bits<6> op, dag outs, dag ins, string asmstr, list<dag> pattern,
173*9880d681SAndroid Build Coastguard Worker         InstrItinClass itin>: InstSE<outs, ins, asmstr, pattern, itin, FrmI>
174*9880d681SAndroid Build Coastguard Worker{
175*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
176*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
177*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker  let Opcode = op;
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
182*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
183*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerclass BranchBase<bits<6> op, dag outs, dag ins, string asmstr,
187*9880d681SAndroid Build Coastguard Worker                  list<dag> pattern, InstrItinClass itin>:
188*9880d681SAndroid Build Coastguard Worker  InstSE<outs, ins, asmstr, pattern, itin, FrmI>
189*9880d681SAndroid Build Coastguard Worker{
190*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
191*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
192*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker  let Opcode = op;
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
197*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
198*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
199*9880d681SAndroid Build Coastguard Worker}
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
202*9880d681SAndroid Build Coastguard Worker// Format J instruction class in Mips : <|opcode|address|>
203*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerclass FJ<bits<6> op> : StdArch
206*9880d681SAndroid Build Coastguard Worker{
207*9880d681SAndroid Build Coastguard Worker  bits<26> target;
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
212*9880d681SAndroid Build Coastguard Worker  let Inst{25-0}  = target;
213*9880d681SAndroid Build Coastguard Worker}
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
216*9880d681SAndroid Build Coastguard Worker// MFC instruction class in Mips : <|op|mf|rt|rd|0000000|sel|>
217*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
218*9880d681SAndroid Build Coastguard Workerclass MFC3OP_FM<bits<6> op, bits<5> mfmt>
219*9880d681SAndroid Build Coastguard Worker{
220*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
221*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
222*9880d681SAndroid Build Coastguard Worker  bits<3> sel;
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
227*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = mfmt;
228*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
229*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
230*9880d681SAndroid Build Coastguard Worker  let Inst{10-3}  = 0;
231*9880d681SAndroid Build Coastguard Worker  let Inst{2-0}   = sel;
232*9880d681SAndroid Build Coastguard Worker}
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerclass MFC2OP_FM<bits<6> op, bits<5> mfmt> : StdArch {
235*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
236*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
241*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = mfmt;
242*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
243*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
244*9880d681SAndroid Build Coastguard Worker}
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Workerclass ADD_FM<bits<6> op, bits<6> funct> : StdArch {
247*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
248*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
249*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
254*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
255*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
256*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
257*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
258*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerclass ADDI_FM<bits<6> op> : StdArch {
262*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
263*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
264*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
269*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
270*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
271*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Workerclass SRA_FM<bits<6> funct, bit rotate> : StdArch {
275*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
276*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
277*9880d681SAndroid Build Coastguard Worker  bits<5> shamt;
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
280*9880d681SAndroid Build Coastguard Worker
281*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
282*9880d681SAndroid Build Coastguard Worker  let Inst{25-22} = 0;
283*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = rotate;
284*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
285*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
286*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = shamt;
287*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerclass SRLV_FM<bits<6> funct, bit rotate> : StdArch {
291*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
292*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
293*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
298*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
299*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
300*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
301*9880d681SAndroid Build Coastguard Worker  let Inst{10-7}  = 0;
302*9880d681SAndroid Build Coastguard Worker  let Inst{6}     = rotate;
303*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
304*9880d681SAndroid Build Coastguard Worker}
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Workerclass BEQ_FM<bits<6> op> : StdArch {
307*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
308*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
309*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
310*9880d681SAndroid Build Coastguard Worker
311*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
314*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
315*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
316*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
317*9880d681SAndroid Build Coastguard Worker}
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Workerclass BGEZ_FM<bits<6> op, bits<5> funct> : StdArch {
320*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
321*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
326*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
327*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = funct;
328*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
329*9880d681SAndroid Build Coastguard Worker}
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Workerclass BBIT_FM<bits<6> op> : StdArch {
332*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
333*9880d681SAndroid Build Coastguard Worker  bits<5>  p;
334*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
339*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
340*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = p;
341*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerclass SLTI_FM<bits<6> op> : StdArch {
345*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
346*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
347*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
352*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
353*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
354*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
355*9880d681SAndroid Build Coastguard Worker}
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard Workerclass MFLO_FM<bits<6> funct> : StdArch {
358*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
359*9880d681SAndroid Build Coastguard Worker
360*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
363*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = 0;
364*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
365*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
366*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
367*9880d681SAndroid Build Coastguard Worker}
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Workerclass MTLO_FM<bits<6> funct> : StdArch {
370*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
373*9880d681SAndroid Build Coastguard Worker
374*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
375*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
376*9880d681SAndroid Build Coastguard Worker  let Inst{20-6}  = 0;
377*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerclass SEB_FM<bits<5> funct, bits<6> funct2> : StdArch {
381*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
382*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
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} = 0x1f;
387*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0;
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-6}  = funct;
391*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct2;
392*9880d681SAndroid Build Coastguard Worker}
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Workerclass CLO_FM<bits<6> funct> : StdArch {
395*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
396*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
397*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
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} = 0x1c;
402*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
403*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
404*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
405*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
406*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
407*9880d681SAndroid Build Coastguard Worker  let rt = rd;
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerclass LUI_FM : StdArch {
411*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
412*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
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} = 0xf;
417*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0;
418*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
419*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
420*9880d681SAndroid Build Coastguard Worker}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerclass JALR_FM {
423*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
424*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
429*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
430*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0;
431*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
432*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
433*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 9;
434*9880d681SAndroid Build Coastguard Worker}
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Workerclass BGEZAL_FM<bits<5> funct> : StdArch {
437*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
438*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
439*9880d681SAndroid Build Coastguard Worker
440*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
441*9880d681SAndroid Build Coastguard Worker
442*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 1;
443*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
444*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = funct;
445*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
446*9880d681SAndroid Build Coastguard Worker}
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Workerclass SYNC_FM : StdArch {
449*9880d681SAndroid Build Coastguard Worker  bits<5> stype;
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
454*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = stype;
455*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0xf;
456*9880d681SAndroid Build Coastguard Worker}
457*9880d681SAndroid Build Coastguard Worker
458*9880d681SAndroid Build Coastguard Workerclass SYNCI_FM : StdArch {
459*9880d681SAndroid Build Coastguard Worker  // Produced by the mem_simm16 address as reg << 16 | imm (see getMemEncoding).
460*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
461*9880d681SAndroid Build Coastguard Worker  bits<5> rs = addr{20-16};
462*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
463*9880d681SAndroid Build Coastguard Worker
464*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b000001;
467*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
468*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0b11111;
469*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Workerclass MULT_FM<bits<6> op, bits<6> funct> : StdArch {
473*9880d681SAndroid Build Coastguard Worker  bits<5>  rs;
474*9880d681SAndroid Build Coastguard Worker  bits<5>  rt;
475*9880d681SAndroid Build Coastguard Worker
476*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
479*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
480*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
481*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = 0;
482*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
483*9880d681SAndroid Build Coastguard Worker}
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Workerclass EXT_FM<bits<6> funct> : StdArch {
486*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
487*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
488*9880d681SAndroid Build Coastguard Worker  bits<5> pos;
489*9880d681SAndroid Build Coastguard Worker  bits<5> size;
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
492*9880d681SAndroid Build Coastguard Worker
493*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1f;
494*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
495*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
496*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = size;
497*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = pos;
498*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
499*9880d681SAndroid Build Coastguard Worker}
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Workerclass RDHWR_FM : StdArch {
502*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
503*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
504*9880d681SAndroid Build Coastguard Worker
505*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
506*9880d681SAndroid Build Coastguard Worker
507*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1f;
508*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0;
509*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
510*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
511*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
512*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x3b;
513*9880d681SAndroid Build Coastguard Worker}
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Workerclass TEQ_FM<bits<6> funct> : StdArch {
516*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
517*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
518*9880d681SAndroid Build Coastguard Worker  bits<10> code_;
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
521*9880d681SAndroid Build Coastguard Worker
522*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
523*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
524*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
525*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = code_;
526*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Workerclass TEQI_FM<bits<5> funct> : StdArch {
530*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
531*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
534*9880d681SAndroid Build Coastguard Worker
535*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 1;
536*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
537*9880d681SAndroid Build Coastguard Worker  let Inst{20-16}   = funct;
538*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
539*9880d681SAndroid Build Coastguard Worker}
540*9880d681SAndroid Build Coastguard Worker
541*9880d681SAndroid Build Coastguard Workerclass WAIT_FM : StdArch {
542*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
543*9880d681SAndroid Build Coastguard Worker
544*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
545*9880d681SAndroid Build Coastguard Worker  let Inst{25}    = 1;
546*9880d681SAndroid Build Coastguard Worker  let Inst{24-6}  = 0;
547*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0x20;
548*9880d681SAndroid Build Coastguard Worker}
549*9880d681SAndroid Build Coastguard Worker
550*9880d681SAndroid Build Coastguard Workerclass EXTS_FM<bits<6> funct> : StdArch {
551*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
552*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
553*9880d681SAndroid Build Coastguard Worker  bits<5> pos;
554*9880d681SAndroid Build Coastguard Worker  bits<5> lenm1;
555*9880d681SAndroid Build Coastguard Worker
556*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
557*9880d681SAndroid Build Coastguard Worker
558*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1c;
559*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
560*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
561*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = lenm1;
562*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = pos;
563*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
564*9880d681SAndroid Build Coastguard Worker}
565*9880d681SAndroid Build Coastguard Worker
566*9880d681SAndroid Build Coastguard Workerclass MTMR_FM<bits<6> funct> : StdArch {
567*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
568*9880d681SAndroid Build Coastguard Worker
569*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
570*9880d681SAndroid Build Coastguard Worker
571*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1c;
572*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
573*9880d681SAndroid Build Coastguard Worker  let Inst{20-6}  = 0;
574*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
575*9880d681SAndroid Build Coastguard Worker}
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard Workerclass POP_FM<bits<6> funct> : StdArch {
578*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
579*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
580*9880d681SAndroid Build Coastguard Worker
581*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1c;
584*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
585*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0;
586*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
587*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
588*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
589*9880d681SAndroid Build Coastguard Worker}
590*9880d681SAndroid Build Coastguard Worker
591*9880d681SAndroid Build Coastguard Workerclass SEQ_FM<bits<6> funct> : StdArch {
592*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
593*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
594*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
595*9880d681SAndroid Build Coastguard Worker
596*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
597*9880d681SAndroid Build Coastguard Worker
598*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1c;
599*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
600*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
601*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
602*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
603*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
604*9880d681SAndroid Build Coastguard Worker}
605*9880d681SAndroid Build Coastguard Worker
606*9880d681SAndroid Build Coastguard Workerclass SEQI_FM<bits<6> funct> : StdArch {
607*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
608*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
609*9880d681SAndroid Build Coastguard Worker  bits<10> imm10;
610*9880d681SAndroid Build Coastguard Worker
611*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x1c;
614*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
615*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
616*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = imm10;
617*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
618*9880d681SAndroid Build Coastguard Worker}
619*9880d681SAndroid Build Coastguard Worker
620*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
621*9880d681SAndroid Build Coastguard Worker//  System calls format <op|code_|funct>
622*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
623*9880d681SAndroid Build Coastguard Worker
624*9880d681SAndroid Build Coastguard Workerclass SYS_FM<bits<6> funct> : StdArch
625*9880d681SAndroid Build Coastguard Worker{
626*9880d681SAndroid Build Coastguard Worker  bits<20> code_;
627*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
628*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
629*9880d681SAndroid Build Coastguard Worker  let Inst{25-6} = code_;
630*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}  = funct;
631*9880d681SAndroid Build Coastguard Worker}
632*9880d681SAndroid Build Coastguard Worker
633*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
634*9880d681SAndroid Build Coastguard Worker//  Break instruction format <op|code_1|funct>
635*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
636*9880d681SAndroid Build Coastguard Worker
637*9880d681SAndroid Build Coastguard Workerclass BRK_FM<bits<6> funct> : StdArch
638*9880d681SAndroid Build Coastguard Worker{
639*9880d681SAndroid Build Coastguard Worker  bits<10> code_1;
640*9880d681SAndroid Build Coastguard Worker  bits<10> code_2;
641*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
642*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x0;
643*9880d681SAndroid Build Coastguard Worker  let Inst{25-16} = code_1;
644*9880d681SAndroid Build Coastguard Worker  let Inst{15-6}  = code_2;
645*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
646*9880d681SAndroid Build Coastguard Worker}
647*9880d681SAndroid Build Coastguard Worker
648*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
649*9880d681SAndroid Build Coastguard Worker//  Exception return format <Cop0|1|0|funct>
650*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
651*9880d681SAndroid Build Coastguard Worker
652*9880d681SAndroid Build Coastguard Workerclass ER_FM<bits<6> funct, bit LLBit> : StdArch
653*9880d681SAndroid Build Coastguard Worker{
654*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
655*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
656*9880d681SAndroid Build Coastguard Worker  let Inst{25}    = 1;
657*9880d681SAndroid Build Coastguard Worker  let Inst{24-7}  = 0;
658*9880d681SAndroid Build Coastguard Worker  let Inst{6} = LLBit;
659*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
660*9880d681SAndroid Build Coastguard Worker}
661*9880d681SAndroid Build Coastguard Worker
662*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
663*9880d681SAndroid Build Coastguard Worker//  Enable/disable interrupt instruction format <Cop0|MFMC0|rt|12|0|sc|0|0>
664*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
665*9880d681SAndroid Build Coastguard Worker
666*9880d681SAndroid Build Coastguard Workerclass EI_FM<bits<1> sc> : StdArch
667*9880d681SAndroid Build Coastguard Worker{
668*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
669*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
670*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10;
671*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0xb;
672*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
673*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = 0xc;
674*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
675*9880d681SAndroid Build Coastguard Worker  let Inst{5}     = sc;
676*9880d681SAndroid Build Coastguard Worker  let Inst{4-0}   = 0;
677*9880d681SAndroid Build Coastguard Worker}
678*9880d681SAndroid Build Coastguard Worker
679*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
680*9880d681SAndroid Build Coastguard Worker//
681*9880d681SAndroid Build Coastguard Worker//  FLOATING POINT INSTRUCTION FORMATS
682*9880d681SAndroid Build Coastguard Worker//
683*9880d681SAndroid Build Coastguard Worker//  opcode  - operation code.
684*9880d681SAndroid Build Coastguard Worker//  fs      - src reg.
685*9880d681SAndroid Build Coastguard Worker//  ft      - dst reg (on a 2 regs instr) or src reg (on a 3 reg instr).
686*9880d681SAndroid Build Coastguard Worker//  fd      - dst reg, only used on 3 regs instr.
687*9880d681SAndroid Build Coastguard Worker//  fmt     - double or single precision.
688*9880d681SAndroid Build Coastguard Worker//  funct   - combined with opcode field give us an operation code.
689*9880d681SAndroid Build Coastguard Worker//
690*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
691*9880d681SAndroid Build Coastguard Worker
692*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
693*9880d681SAndroid Build Coastguard Worker// Format FI instruction class in Mips : <|opcode|base|ft|immediate|>
694*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
695*9880d681SAndroid Build Coastguard Worker
696*9880d681SAndroid Build Coastguard Workerclass FFI<bits<6> op, dag outs, dag ins, string asmstr, list<dag> pattern>:
697*9880d681SAndroid Build Coastguard Worker  InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmFI>
698*9880d681SAndroid Build Coastguard Worker{
699*9880d681SAndroid Build Coastguard Worker  bits<5>  ft;
700*9880d681SAndroid Build Coastguard Worker  bits<5>  base;
701*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
702*9880d681SAndroid Build Coastguard Worker
703*9880d681SAndroid Build Coastguard Worker  let Opcode = op;
704*9880d681SAndroid Build Coastguard Worker
705*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = base;
706*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = ft;
707*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
708*9880d681SAndroid Build Coastguard Worker}
709*9880d681SAndroid Build Coastguard Worker
710*9880d681SAndroid Build Coastguard Workerclass ADDS_FM<bits<6> funct, bits<5> fmt> : StdArch {
711*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
712*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
713*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
714*9880d681SAndroid Build Coastguard Worker
715*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
716*9880d681SAndroid Build Coastguard Worker
717*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x11;
718*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fmt;
719*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = ft;
720*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
721*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = fd;
722*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
723*9880d681SAndroid Build Coastguard Worker}
724*9880d681SAndroid Build Coastguard Worker
725*9880d681SAndroid Build Coastguard Workerclass ABSS_FM<bits<6> funct, bits<5> fmt> : StdArch {
726*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
727*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
728*9880d681SAndroid Build Coastguard Worker
729*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
730*9880d681SAndroid Build Coastguard Worker
731*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x11;
732*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fmt;
733*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0;
734*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
735*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = fd;
736*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
737*9880d681SAndroid Build Coastguard Worker}
738*9880d681SAndroid Build Coastguard Worker
739*9880d681SAndroid Build Coastguard Workerclass MFC1_FM<bits<5> funct> : StdArch {
740*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
741*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
742*9880d681SAndroid Build Coastguard Worker
743*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
744*9880d681SAndroid Build Coastguard Worker
745*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x11;
746*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = funct;
747*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
748*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
749*9880d681SAndroid Build Coastguard Worker  let Inst{10-0}  = 0;
750*9880d681SAndroid Build Coastguard Worker}
751*9880d681SAndroid Build Coastguard Worker
752*9880d681SAndroid Build Coastguard Workerclass LW_FM<bits<6> op> : StdArch {
753*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
754*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
755*9880d681SAndroid Build Coastguard Worker
756*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
757*9880d681SAndroid Build Coastguard Worker
758*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
759*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = addr{20-16};
760*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
761*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = addr{15-0};
762*9880d681SAndroid Build Coastguard Worker}
763*9880d681SAndroid Build Coastguard Worker
764*9880d681SAndroid Build Coastguard Workerclass MADDS_FM<bits<3> funct, bits<3> fmt> : StdArch {
765*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
766*9880d681SAndroid Build Coastguard Worker  bits<5> fr;
767*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
768*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
769*9880d681SAndroid Build Coastguard Worker
770*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
771*9880d681SAndroid Build Coastguard Worker
772*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x13;
773*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fr;
774*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = ft;
775*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
776*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = fd;
777*9880d681SAndroid Build Coastguard Worker  let Inst{5-3}   = funct;
778*9880d681SAndroid Build Coastguard Worker  let Inst{2-0}   = fmt;
779*9880d681SAndroid Build Coastguard Worker}
780*9880d681SAndroid Build Coastguard Worker
781*9880d681SAndroid Build Coastguard Workerclass LWXC1_FM<bits<6> funct> : StdArch {
782*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
783*9880d681SAndroid Build Coastguard Worker  bits<5> base;
784*9880d681SAndroid Build Coastguard Worker  bits<5> index;
785*9880d681SAndroid Build Coastguard Worker
786*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
787*9880d681SAndroid Build Coastguard Worker
788*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x13;
789*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = base;
790*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = index;
791*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = 0;
792*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = fd;
793*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
794*9880d681SAndroid Build Coastguard Worker}
795*9880d681SAndroid Build Coastguard Worker
796*9880d681SAndroid Build Coastguard Workerclass SWXC1_FM<bits<6> funct> : StdArch {
797*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
798*9880d681SAndroid Build Coastguard Worker  bits<5> base;
799*9880d681SAndroid Build Coastguard Worker  bits<5> index;
800*9880d681SAndroid Build Coastguard Worker
801*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
802*9880d681SAndroid Build Coastguard Worker
803*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x13;
804*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = base;
805*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = index;
806*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
807*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = 0;
808*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
809*9880d681SAndroid Build Coastguard Worker}
810*9880d681SAndroid Build Coastguard Worker
811*9880d681SAndroid Build Coastguard Workerclass BC1F_FM<bit nd, bit tf> : StdArch {
812*9880d681SAndroid Build Coastguard Worker  bits<3>  fcc;
813*9880d681SAndroid Build Coastguard Worker  bits<16> offset;
814*9880d681SAndroid Build Coastguard Worker
815*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
816*9880d681SAndroid Build Coastguard Worker
817*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x11;
818*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0x8;
819*9880d681SAndroid Build Coastguard Worker  let Inst{20-18} = fcc;
820*9880d681SAndroid Build Coastguard Worker  let Inst{17} = nd;
821*9880d681SAndroid Build Coastguard Worker  let Inst{16} = tf;
822*9880d681SAndroid Build Coastguard Worker  let Inst{15-0} = offset;
823*9880d681SAndroid Build Coastguard Worker}
824*9880d681SAndroid Build Coastguard Worker
825*9880d681SAndroid Build Coastguard Workerclass CEQS_FM<bits<5> fmt> : StdArch {
826*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
827*9880d681SAndroid Build Coastguard Worker  bits<5> ft;
828*9880d681SAndroid Build Coastguard Worker  bits<4> cond;
829*9880d681SAndroid Build Coastguard Worker
830*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
831*9880d681SAndroid Build Coastguard Worker
832*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x11;
833*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fmt;
834*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = ft;
835*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
836*9880d681SAndroid Build Coastguard Worker  let Inst{10-8} = 0; // cc
837*9880d681SAndroid Build Coastguard Worker  let Inst{7-4} = 0x3;
838*9880d681SAndroid Build Coastguard Worker  let Inst{3-0} = cond;
839*9880d681SAndroid Build Coastguard Worker}
840*9880d681SAndroid Build Coastguard Worker
841*9880d681SAndroid Build Coastguard Workerclass C_COND_FM<bits<5> fmt, bits<4> c> : CEQS_FM<fmt> {
842*9880d681SAndroid Build Coastguard Worker  let cond = c;
843*9880d681SAndroid Build Coastguard Worker}
844*9880d681SAndroid Build Coastguard Worker
845*9880d681SAndroid Build Coastguard Workerclass CMov_I_F_FM<bits<6> funct, bits<5> fmt> : StdArch {
846*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
847*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
848*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
849*9880d681SAndroid Build Coastguard Worker
850*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
851*9880d681SAndroid Build Coastguard Worker
852*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x11;
853*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fmt;
854*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
855*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
856*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = fd;
857*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = funct;
858*9880d681SAndroid Build Coastguard Worker}
859*9880d681SAndroid Build Coastguard Worker
860*9880d681SAndroid Build Coastguard Workerclass CMov_F_I_FM<bit tf> : StdArch {
861*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
862*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
863*9880d681SAndroid Build Coastguard Worker  bits<3> fcc;
864*9880d681SAndroid Build Coastguard Worker
865*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
866*9880d681SAndroid Build Coastguard Worker
867*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0;
868*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
869*9880d681SAndroid Build Coastguard Worker  let Inst{20-18} = fcc;
870*9880d681SAndroid Build Coastguard Worker  let Inst{17} = 0;
871*9880d681SAndroid Build Coastguard Worker  let Inst{16} = tf;
872*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
873*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = 0;
874*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 1;
875*9880d681SAndroid Build Coastguard Worker}
876*9880d681SAndroid Build Coastguard Worker
877*9880d681SAndroid Build Coastguard Workerclass CMov_F_F_FM<bits<5> fmt, bit tf> : StdArch {
878*9880d681SAndroid Build Coastguard Worker  bits<5> fd;
879*9880d681SAndroid Build Coastguard Worker  bits<5> fs;
880*9880d681SAndroid Build Coastguard Worker  bits<3> fcc;
881*9880d681SAndroid Build Coastguard Worker
882*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
883*9880d681SAndroid Build Coastguard Worker
884*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x11;
885*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = fmt;
886*9880d681SAndroid Build Coastguard Worker  let Inst{20-18} = fcc;
887*9880d681SAndroid Build Coastguard Worker  let Inst{17} = 0;
888*9880d681SAndroid Build Coastguard Worker  let Inst{16} = tf;
889*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = fs;
890*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = fd;
891*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0x11;
892*9880d681SAndroid Build Coastguard Worker}
893*9880d681SAndroid Build Coastguard Worker
894*9880d681SAndroid Build Coastguard Workerclass BARRIER_FM<bits<5> op> : StdArch {
895*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
896*9880d681SAndroid Build Coastguard Worker
897*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0; // SPECIAL
898*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = 0;
899*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0; // rt = 0
900*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = 0; // rd = 0
901*9880d681SAndroid Build Coastguard Worker  let Inst{10-6} = op; // Operation
902*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0;   // SLL
903*9880d681SAndroid Build Coastguard Worker}
904*9880d681SAndroid Build Coastguard Worker
905*9880d681SAndroid Build Coastguard Workerclass SDBBP_FM : StdArch {
906*9880d681SAndroid Build Coastguard Worker  bits<20> code_;
907*9880d681SAndroid Build Coastguard Worker
908*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
909*9880d681SAndroid Build Coastguard Worker
910*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011100; // SPECIAL2
911*9880d681SAndroid Build Coastguard Worker  let Inst{25-6} = code_;
912*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0b111111;   // SDBBP
913*9880d681SAndroid Build Coastguard Worker}
914*9880d681SAndroid Build Coastguard Worker
915*9880d681SAndroid Build Coastguard Workerclass JR_HB_FM<bits<6> op> : StdArch{
916*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
917*9880d681SAndroid Build Coastguard Worker
918*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
919*9880d681SAndroid Build Coastguard Worker
920*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0; // SPECIAL
921*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
922*9880d681SAndroid Build Coastguard Worker  let Inst{20-11} = 0;
923*9880d681SAndroid Build Coastguard Worker  let Inst{10} = 1;
924*9880d681SAndroid Build Coastguard Worker  let Inst{9-6} = 0;
925*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = op;
926*9880d681SAndroid Build Coastguard Worker}
927*9880d681SAndroid Build Coastguard Worker
928*9880d681SAndroid Build Coastguard Workerclass JALR_HB_FM<bits<6> op> : StdArch {
929*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
930*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
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} = 0; // SPECIAL
935*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
936*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = 0;
937*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
938*9880d681SAndroid Build Coastguard Worker  let Inst{10} = 1;
939*9880d681SAndroid Build Coastguard Worker  let Inst{9-6} = 0;
940*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = op;
941*9880d681SAndroid Build Coastguard Worker}
942*9880d681SAndroid Build Coastguard Worker
943*9880d681SAndroid Build Coastguard Workerclass COP0_TLB_FM<bits<6> op> : StdArch {
944*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
945*9880d681SAndroid Build Coastguard Worker
946*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0x10; // COP0
947*9880d681SAndroid Build Coastguard Worker  let Inst{25} = 1;       // CO
948*9880d681SAndroid Build Coastguard Worker  let Inst{24-6} = 0;
949*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = op;     // Operation
950*9880d681SAndroid Build Coastguard Worker}
951*9880d681SAndroid Build Coastguard Worker
952*9880d681SAndroid Build Coastguard Workerclass CACHEOP_FM<bits<6> op> : StdArch {
953*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
954*9880d681SAndroid Build Coastguard Worker  bits<5> hint;
955*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
956*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
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} = op;
961*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = base;
962*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = hint;
963*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
964*9880d681SAndroid Build Coastguard Worker}
965