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