MipsInstrFormats.td revision b2c68ddaaba55c417679d3ed466ebd403d991cec
14da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===-- MipsInstrFormats.td - Mips Instruction Formats -----*- tablegen -*-===//
24da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//
34da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//                     The LLVM Compiler Infrastructure
44da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//
54da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// This file is distributed under the University of Illinois Open Source
64da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// License. See LICENSE.TXT for details.
74da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//
84da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
94da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
104da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
114da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  Describe MIPS instructions format
124da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//
134da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  CPU INSTRUCTION FORMATS
144da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//
154da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  opcode  - operation code.
164da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  rs      - src reg.
174da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  rt      - dst reg (on a 2 regs instr) or src reg (on a 3 reg instr).
184da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  rd      - dst reg, only used on 3 regs instr.
194da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  shamt   - only used on shift instructions, contains the shift amount.
204da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//  funct   - combined with opcode field give us an operation code.
214da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//
224da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
234da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
244da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Format specifies the encoding used by the instruction.  This is part of the
254da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// ad-hoc solution used to emit machine instruction encodings by our machine
264da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// code emitter.
274da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass Format<bits<4> val> {
284da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<4> Value = val;
294da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
304da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
314da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekdef Pseudo    : Format<0>;
324da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekdef FrmR      : Format<1>;
334da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekdef FrmI      : Format<2>;
344da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekdef FrmJ      : Format<3>;
354da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekdef FrmFR     : Format<4>;
364da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekdef FrmFI     : Format<5>;
374da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekdef FrmOther  : Format<6>; // Instruction w/ a custom format
384da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
394da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Generic Mips Format
404da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass MipsInst<dag outs, dag ins, string asmstr, list<dag> pattern,
414da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek               InstrItinClass itin, Format f>: Instruction
424da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek{
434da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  field bits<32> Inst;
444da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  Format Form = f;
454da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
464da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Namespace = "Mips";
474da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
48e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Size = 4;
494da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
504da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<6> Opcode = 0;
514da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
52e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  // Top 6 bits are the 'opcode' field
534da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{31-26} = Opcode;
544da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
554da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let OutOperandList = outs;
564da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let InOperandList  = ins;
574da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
584da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let AsmString   = asmstr;
594da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Pattern     = pattern;
604da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Itinerary   = itin;
614da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
624da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  //
634da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  // Attributes specific to Mips instructions...
644da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  //
654da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<4> FormBits = Form.Value;
664da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
674da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  // TSFlags layout should be kept in sync with MipsInstrInfo.h.
684da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let TSFlags{3-0}   = FormBits;
694da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
704da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let DecoderNamespace = "Mips";
714da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
724da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  field bits<32> SoftFail = 0;
734da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
744da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
754da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Mips32/64 Instruction Format
764da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass InstSE<dag outs, dag ins, string asmstr, list<dag> pattern,
774da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek             InstrItinClass itin, Format f>:
784da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  MipsInst<outs, ins, asmstr, pattern, itin, f> {
794da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Predicates = [HasStdEnc];
804da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
814da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
824da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Mips Pseudo Instructions Format
83e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass MipsPseudo<dag outs, dag ins, string asmstr, list<dag> pattern>:
84e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  MipsInst<outs, ins, asmstr, pattern, IIPseudo, Pseudo> {
854da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let isCodeGenOnly = 1;
864da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let isPseudo = 1;
874da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
884da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
894da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Mips32/64 Pseudo Instruction Format
904da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass PseudoSE<dag outs, dag ins, string asmstr, list<dag> pattern>:
914da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  MipsPseudo<outs, ins, asmstr, pattern> {
924da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Predicates = [HasStdEnc];
934da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
944da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
954da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Pseudo-instructions for alternate assembly syntax (never used by codegen).
96e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper// These are aliases that require C++ handling to convert to the target
97e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper// instruction, while InstAliases can be handled directly by tblgen.
984da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass MipsAsmPseudoInst<dag outs, dag ins, string asmstr>:
994da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  MipsInst<outs, ins, asmstr, [], IIPseudo, Pseudo> {
1004da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let isPseudo = 1;
1014da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Pattern = [];
1024da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
1034da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
1044da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Format R instruction class in Mips : <|opcode|rs|rt|rd|shamt|funct|>
1054da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
1064da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
1079f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimekclass FR<bits<6> op, bits<6> _funct, dag outs, dag ins, string asmstr,
1089f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek         list<dag> pattern, InstrItinClass itin>:
1094da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  InstSE<outs, ins, asmstr, pattern, itin, FrmR>
1104da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek{
1114da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  rd;
1124da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  rs;
1134da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  rt;
114e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  shamt;
115e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<6>  funct;
116e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
1174da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Opcode = op;
1184da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let funct  = _funct;
1194da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
1204da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{25-21} = rs;
1214da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{20-16} = rt;
1224da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-11} = rd;
1234da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{10-6}  = shamt;
1244da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{5-0}   = funct;
1254da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
1264da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
1274da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
1284da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Format I instruction class in Mips : <|opcode|rs|rt|immediate|>
1294da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
1304da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
1314da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass FI<bits<6> op, dag outs, dag ins, string asmstr, list<dag> pattern,
1324da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek         InstrItinClass itin>: InstSE<outs, ins, asmstr, pattern, itin, FrmI>
133715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek{
134715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek  bits<5>  rt;
135715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek  bits<5>  rs;
136715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek  bits<16> imm16;
137715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek
138715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek  let Opcode = op;
139715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek
140715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek  let Inst{25-21} = rs;
141715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek  let Inst{20-16} = rt;
142715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek  let Inst{15-0}  = imm16;
143715c9568ee5d75f25dab98229c87bcec880daf5dManuel Klimek}
1444da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
1454da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass BranchBase<bits<6> op, dag outs, dag ins, string asmstr,
1464da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek                  list<dag> pattern, InstrItinClass itin>:
1474da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  InstSE<outs, ins, asmstr, pattern, itin, FrmI>
1484da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek{
1494da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  rs;
1504da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  rt;
1514da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<16> imm16;
1524da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
1534da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Opcode = op;
154e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
155e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = rs;
1564da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{20-16} = rt;
1574da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-0}  = imm16;
1584da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
1594da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
1604da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
1614da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Format J instruction class in Mips : <|opcode|address|>
1624da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
163e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
164e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass FJ<bits<6> op, dag outs, dag ins, string asmstr, list<dag> pattern,
165e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper         InstrItinClass itin>: InstSE<outs, ins, asmstr, pattern, itin, FrmJ>
166e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper{
167e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<26> addr;
168e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
169e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Opcode = op;
170e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
171e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-0} = addr;
172e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper}
173e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
174e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper //===----------------------------------------------------------------------===//
175e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper// MFC instruction class in Mips : <|op|mf|rt|rd|0000000|sel|>
176e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//===----------------------------------------------------------------------===//
177e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass MFC3OP<bits<6> op, bits<5> _mfmt, dag outs, dag ins, string asmstr>:
178e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  InstSE<outs, ins, asmstr, [], NoItinerary, FrmFR>
179e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper{
180e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> mfmt;
181e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> rt;
182e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> rd;
183e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<3> sel;
184e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
185e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Opcode = op;
186e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let mfmt = _mfmt;
187e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
188e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = mfmt;
189e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = rt;
190e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{15-11} = rd;
191e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{10-3}  = 0;
192e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{2-0}   = sel;
193e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper}
194e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
195e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//===----------------------------------------------------------------------===//
196e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//
197e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//  FLOATING POINT INSTRUCTION FORMATS
198e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//
199e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//  opcode  - operation code.
200e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//  fs      - src reg.
201e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//  ft      - dst reg (on a 2 regs instr) or src reg (on a 3 reg instr).
202e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//  fd      - dst reg, only used on 3 regs instr.
203e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//  fmt     - double or single precision.
204e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//  funct   - combined with opcode field give us an operation code.
205e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//
206e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//===----------------------------------------------------------------------===//
207e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
208e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//===----------------------------------------------------------------------===//
209e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper// Format FR instruction class in Mips : <|opcode|fmt|ft|fs|fd|funct|>
210e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//===----------------------------------------------------------------------===//
211e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
212e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass FFR<bits<6> op, bits<6> _funct, bits<5> _fmt, dag outs, dag ins,
213e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper          string asmstr, list<dag> pattern> :
214e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmFR>
215e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper{
216e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  fd;
217e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  fs;
218e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  ft;
219e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  fmt;
220e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<6>  funct;
221e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
222e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Opcode = op;
223e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let funct  = _funct;
224e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let fmt    = _fmt;
225e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
226e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = fmt;
227e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = ft;
228e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{15-11} = fs;
229e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{10-6}  = fd;
230e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{5-0}   = funct;
231e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper}
232e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
233e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//===----------------------------------------------------------------------===//
234e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper// Format FI instruction class in Mips : <|opcode|base|ft|immediate|>
235e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper//===----------------------------------------------------------------------===//
236e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
237e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass FFI<bits<6> op, dag outs, dag ins, string asmstr, list<dag> pattern>:
238e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmFI>
239e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper{
240e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  ft;
241e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  base;
242e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<16> imm16;
243e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
244e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Opcode = op;
245e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
246e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = base;
247e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = ft;
2484da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-0}  = imm16;
2494da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
2504da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
2514da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
2524da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Compare instruction class in Mips : <|010001|fmt|ft|fs|0000011|condcode|>
2534da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek//===----------------------------------------------------------------------===//
2544da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
2554da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass FCC<bits<5> _fmt, dag outs, dag ins, string asmstr, list<dag> pattern> :
2564da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmOther>
2574da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek{
2584da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  fs;
259e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  ft;
260e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<4>  cc;
261e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  fmt;
262e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
263e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Opcode = 0x11;
264e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let fmt    = _fmt;
265e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
266e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = fmt;
267e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = ft;
268e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{15-11} = fs;
269e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{10-6}  = 0;
270e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{5-4}   = 0b11;
271e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{3-0}   = cc;
272e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper}
273e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
274e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
275e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass FCMOV<bits<1> _tf, dag outs, dag ins, string asmstr,
276e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper            list<dag> pattern> :
277e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmOther>
278e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper{
279e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  rd;
280e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5>  rs;
281e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<3>  cc;
282e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<1>  tf;
283e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
284e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Opcode = 0;
285e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let tf = _tf;
286e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
287e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = rs;
2884da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{20-18} = cc;
2894da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{17} = 0;
2904da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{16} = tf;
2914da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-11} = rd;
2924da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{10-6}  = 0;
293e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{5-0}   = 1;
2944da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
2954da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
2964da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass FFCMOV<bits<5> _fmt, bits<1> _tf, dag outs, dag ins, string asmstr,
2974da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek             list<dag> pattern> :
2984da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmOther>
2994da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek{
3004da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  fd;
3014da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  fs;
302e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<3>  cc;
3034da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  fmt;
3044da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<1>  tf;
3054da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3064da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Opcode = 17;
3074da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let fmt = _fmt;
3084da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let tf = _tf;
3094da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
310e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = fmt;
3114da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{20-18} = cc;
3124da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{17} = 0;
3134da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{16} = tf;
3144da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-11} = fs;
3154da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{10-6}  = fd;
316e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{5-0}   = 17;
3174da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
3184da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3194da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// Floating point madd/msub/nmadd/nmsub.
3204da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass FFMADDSUB<bits<3> funct, bits<3> fmt, dag outs, dag ins, string asmstr,
3214da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek                list<dag> pattern>
3224da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  : InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmOther> {
3234da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5> fd;
3244da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5> fr;
325e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> fs;
3264da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5> ft;
3274da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3284da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Opcode = 0x13;
3294da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{25-21} = fr;
3304da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{20-16} = ft;
3314da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-11} = fs;
3324da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{10-6} = fd;
3334da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{5-3} = funct;
334e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{2-0} = fmt;
335e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper}
3364da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3374da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek// FP indexed load/store instructions.
3384da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass FFMemIdx<bits<6> funct, dag outs, dag ins, string asmstr,
3394da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek               list<dag> pattern> :
3404da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmOther>
3414da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek{
3424da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  base;
3434da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  index;
3444da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  fs;
3454da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5>  fd;
3464da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
347e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Opcode = 0x13;
348e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
3494da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{25-21} = base;
3504da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{20-16} = index;
3514da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-11} = fs;
3529f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek  let Inst{10-6} = fd;
3534da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{5-0} = funct;
3544da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
3559f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek
356e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass ADDS_FM<bits<6> funct, bits<5> fmt> {
357e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> fd;
3589f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek  bits<5> fs;
3599f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek  bits<5> ft;
3609f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek
3619f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek  bits<32> Inst;
3629f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek
3639f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek  let Inst{31-26} = 0x11;
3649f17408d50c1d76c5eab435e4ceb924cc10757abManuel Klimek  let Inst{25-21} = fmt;
365e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = ft;
366e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{15-11} = fs;
367e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{10-6}  = fd;
368e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{5-0}   = funct;
369e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper}
370e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
371e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasperclass ABSS_FM<bits<6> funct, bits<5> fmt> {
372e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> fd;
373e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> fs;
374e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
375e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<32> Inst;
376e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
377e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{31-26} = 0x11;
378e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = fmt;
379e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = 0;
380e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{15-11} = fs;
381e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{10-6}  = fd;
382e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{5-0}   = funct;
3834da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
3844da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3854da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass MFC1_FM<bits<5> funct> {
3864da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5> rt;
3874da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5> fs;
3884da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3894da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<32> Inst;
3904da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3914da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{31-26} = 0x11;
3924da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{25-21} = funct;
393e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = rt;
394e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{15-11} = fs;
3954da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{10-0}  = 0;
3964da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
3974da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
3984da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass LW_FM<bits<6> op> {
399e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> rt;
4004da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<21> addr;
4014da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
4024da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<32> Inst;
403e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
404e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{31-26} = op;
4054da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{25-21} = addr{20-16};
4064da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{20-16} = rt;
4074da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  let Inst{15-0}  = addr{15-0};
4084da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek}
4094da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek
4104da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimekclass MADDS_FM<bits<3> funct, bits<3> fmt> {
4114da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5> fd;
4124da216637fa1ad4bdfd31bc265edb57ca35c2c12Manuel Klimek  bits<5> fr;
413e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> fs;
414e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<5> ft;
415e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
416e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  bits<32> Inst;
417e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper
418e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{31-26} = 0x13;
419e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{25-21} = fr;
420e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{20-16} = ft;
421e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{15-11} = fs;
422e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{10-6}  = fd;
423e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{5-3}   = funct;
424e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper  let Inst{2-0}   = fmt;
425e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper}
426e0e6b9e79a0c4edae92abd3928263875c78e23aaDaniel Jasper