MipsInstrFormats.td revision 47b33528d1b4298bf8cc5dcca8b531dfd0e704bb
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===-- MipsInstrFormats.td - Mips Instruction Formats -----*- tablegen -*-===// 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The LLVM Compiler Infrastructure 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// License. See LICENSE.TXT for details. 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===// 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===// 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Describe MIPS instructions format 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// CPU INSTRUCTION FORMATS 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// opcode - operation code. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// rs - src reg. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// rt - dst reg (on a 2 regs instr) or src reg (on a 3 reg instr). 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// rd - dst reg, only used on 3 regs instr. 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// shamt - only used on shift instructions, contains the shift amount. 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// funct - combined with opcode field give us an operation code. 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//===----------------------------------------------------------------------===// 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Format specifies the encoding used by the instruction. This is part of the 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ad-hoc solution used to emit machine instruction encodings by our machine 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// code emitter. 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Format<bits<4> val> { 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bits<4> Value = val; 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def Pseudo : Format<0>; 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def FrmR : Format<1>; 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liudef FrmI : Format<2>; 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def FrmJ : Format<3>; 35f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liudef FrmFR : Format<4>; 36f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liudef FrmFI : Format<5>; 3706f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)def FrmOther : Format<6>; // Instruction w/ a custom format 3806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 3906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)class MMRel; 4006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 4110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochdef Std2MicroMips : InstrMapping { 421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) let FilterClass = "MMRel"; 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // Instructions with the same BaseOpcode and isNVStore values form a row. 44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch let RowFields = ["BaseOpcode"]; 45d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Instructions with the same predicate sense form a column. 469e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) let ColFields = ["Arch"]; 47f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu // The key column is the unpredicated instructions. 48f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu let KeyCol = ["se"]; 49f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu // Value columns are PredSense=true and PredSense=false 50f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu let ValueCols = [["se"], ["micromips"]]; 51f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu} 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class StdArch { 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) string Arch = "se"; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Generic Mips Format 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MipsInst<dag outs, dag ins, string asmstr, list<dag> pattern, 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InstrItinClass itin, Format f>: Instruction 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) field bits<32> Inst; 627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci Format Form = f; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Namespace = "Mips"; 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let Size = 4; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bits<6> Opcode = 0; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Top 6 bits are the 'opcode' field 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let Inst{31-26} = Opcode; 727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let OutOperandList = outs; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let InOperandList = ins; 757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let AsmString = asmstr; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let Pattern = pattern; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let Itinerary = itin; 797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Attributes specific to Mips instructions... 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // 837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<4> FormBits = Form.Value; 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // TSFlags layout should be kept in sync with MipsInstrInfo.h. 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let TSFlags{3-0} = FormBits; 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let DecoderNamespace = "Mips"; 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci field bits<32> SoftFail = 0; 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// Mips32/64 Instruction Format 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class InstSE<dag outs, dag ins, string asmstr, list<dag> pattern, 957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InstrItinClass itin, Format f, string opstr = ""> : 967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci MipsInst<outs, ins, asmstr, pattern, itin, f> { 977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Predicates = [HasStdEnc]; 987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci string BaseOpcode = opstr; 997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci string Arch; 1007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Mips Pseudo Instructions Format 1037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass MipsPseudo<dag outs, dag ins, list<dag> pattern, 1047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InstrItinClass itin = IIPseudo> : 1057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci MipsInst<outs, ins, "", pattern, itin, Pseudo> { 1067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let isCodeGenOnly = 1; 1077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let isPseudo = 1; 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Mips32/64 Pseudo Instruction Format 1117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass PseudoSE<dag outs, dag ins, list<dag> pattern, 1127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InstrItinClass itin = IIPseudo>: 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci MipsPseudo<outs, ins, pattern, itin> { 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Predicates = [HasStdEnc]; 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Pseudo-instructions for alternate assembly syntax (never used by codegen). 1187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// These are aliases that require C++ handling to convert to the target 1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// instruction, while InstAliases can be handled directly by tblgen. 1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass MipsAsmPseudoInst<dag outs, dag ins, string asmstr>: 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci MipsInst<outs, ins, asmstr, [], IIPseudo, Pseudo> { 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let isPseudo = 1; 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Pattern = []; 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Format R instruction class in Mips : <|opcode|rs|rt|rd|shamt|funct|> 1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass FR<bits<6> op, bits<6> _funct, dag outs, dag ins, string asmstr, 1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci list<dag> pattern, InstrItinClass itin>: 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InstSE<outs, ins, asmstr, pattern, itin, FrmR> 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rd; 1347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rs; 1357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rt; 1367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> shamt; 1377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<6> funct; 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Opcode = op; 1407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let funct = _funct; 1417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{25-21} = rs; 1437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{20-16} = rt; 1447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{15-11} = rd; 1457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{10-6} = shamt; 1467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{5-0} = funct; 1477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Format I instruction class in Mips : <|opcode|rs|rt|immediate|> 1517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass FI<bits<6> op, dag outs, dag ins, string asmstr, list<dag> pattern, 1547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InstrItinClass itin>: InstSE<outs, ins, asmstr, pattern, itin, FrmI> 1557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rt; 1577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rs; 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<16> imm16; 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Opcode = op; 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{25-21} = rs; 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{20-16} = rt; 1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{15-0} = imm16; 1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass BranchBase<bits<6> op, dag outs, dag ins, string asmstr, 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci list<dag> pattern, InstrItinClass itin>: 1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci InstSE<outs, ins, asmstr, pattern, itin, FrmI> 1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rs; 1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rt; 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<16> imm16; 1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Opcode = op; 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{25-21} = rs; 1787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{20-16} = rt; 1797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{15-0} = imm16; 1807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Format J instruction class in Mips : <|opcode|address|> 1847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass FJ<bits<6> op> 1877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<26> target; 1897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<32> Inst; 1917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{31-26} = op; 1937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{25-0} = target; 1947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// MFC instruction class in Mips : <|op|mf|rt|rd|0000000|sel|> 1987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci//===----------------------------------------------------------------------===// 1997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass MFC3OP_FM<bits<6> op, bits<5> mfmt> 2007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 2017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rt; 2027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<5> rd; 2037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<3> sel; 2047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bits<32> Inst; 2067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{31-26} = op; 2087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{25-21} = mfmt; 2097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{20-16} = rt; 2107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{15-11} = rd; 2117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{10-3} = 0; 2127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{2-0} = sel; 2137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 2147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ADD_FM<bits<6> op, bits<6> funct> : StdArch { 216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rd; 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rt; 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) let Inst{31-26} = op; 22309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{25-21} = rs; 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-11} = rd; 226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{10-6} = 0; 227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{5-0} = funct; 228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 23010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass ADDI_FM<bits<6> op> : StdArch { 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 2325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> rt; 2335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<16> imm16; 23476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 235d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bits<32> Inst; 236926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 237926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = op; 238926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 239926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-0} = imm16; 241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class SRA_FM<bits<6> funct, bit rotate> : StdArch { 244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rd; 245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rt; 246926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> shamt; 247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 248926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 249926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 250926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 0; 251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-22} = 0; 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{21} = rotate; 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-11} = rd; 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{10-6} = shamt; 256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{5-0} = funct; 257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class SRLV_FM<bits<6> funct, bit rotate> : StdArch { 260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rd; 261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rt; 262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 0; 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-11} = rd; 270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{10-7} = 0; 271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{6} = rotate; 272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{5-0} = funct; 273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class BEQ_FM<bits<6> op> { 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rt; 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<16> offset; 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = op; 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-0} = offset; 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class BGEZ_FM<bits<6> op, bits<5> funct> { 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 29053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bits<16> offset; 29153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 29253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bits<32> Inst; 29353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 29453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) let Inst{31-26} = op; 29553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) let Inst{25-21} = rs; 29653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) let Inst{20-16} = funct; 29753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) let Inst{15-0} = offset; 29853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 29953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 30053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class SLTI_FM<bits<6> op> : StdArch { 301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rt; 302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<16> imm16; 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = op; 308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-0} = imm16; 311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 3121e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 313bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)class MFLO_FM<bits<6> funct> : StdArch { 314bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) bits<5> rd; 3151e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 3161e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) bits<32> Inst; 3171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 3181e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) let Inst{31-26} = 0; 3191e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) let Inst{25-16} = 0; 3201e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) let Inst{15-11} = rd; 3211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) let Inst{10-6} = 0; 3221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) let Inst{5-0} = funct; 323926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 324926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 325926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class MTLO_FM<bits<6> funct> : StdArch { 326926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 327926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 329926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 330926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 0; 331926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 332926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-6} = 0; 333926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{5-0} = funct; 334926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 335926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 336926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class SEB_FM<bits<5> funct, bits<6> funct2> : StdArch { 337926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rd; 338926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rt; 339926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 340926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 341926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 342926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 0x1f; 343926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = 0; 344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 345926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-11} = rd; 346926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{10-6} = funct; 347926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{5-0} = funct2; 348d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 349d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 350d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CLO_FM<bits<6> funct> : StdArch { 351d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bits<5> rd; 352d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bits<5> rs; 353d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bits<5> rt; 354d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 355d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bits<32> Inst; 356d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 357d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) let Inst{31-26} = 0x1c; 358d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) let Inst{25-21} = rs; 359d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) let Inst{20-16} = rt; 360d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) let Inst{15-11} = rd; 361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{10-6} = 0; 362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{5-0} = funct; 3635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) let rt = rd; 3645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 3655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 3665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class LUI_FM { 3675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> rt; 3685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<16> imm16; 369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 0xf; 373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = 0; 3747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{20-16} = rt; 3757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{15-0} = imm16; 376d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class JALR_FM { 379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rd; 380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> rs; 381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<32> Inst; 383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 0; 385926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 386926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = 0; 3877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{15-11} = rd; 3887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{10-6} = 0; 389d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) let Inst{5-0} = 9; 39053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 39153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 39253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class BGEZAL_FM<bits<5> funct> { 39353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bits<5> rs; 3941e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) bits<16> offset; 395a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 396d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bits<32> Inst; 397926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 398926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 1; 399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 400926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = funct; 401926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-0} = offset; 402926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 403926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class SYNC_FM { 405926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bits<5> stype; 406926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<32> Inst; 408d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 409926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{31-26} = 0; 4107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{10-6} = stype; 411926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{5-0} = 0xf; 412d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 413926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 414926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class MULT_FM<bits<6> op, bits<6> funct> : StdArch { 4155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> rs; 4165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> rt; 4175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<32> Inst; 4195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 42010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = op; 421926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{25-21} = rs; 422926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{20-16} = rt; 423926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) let Inst{15-6} = 0; 42451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5-0} = funct; 42551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 42651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 42751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class EXT_FM<bits<6> funct> : StdArch { 42851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rt; 42951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rs; 43051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> pos; 43109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<5> size; 43251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 43351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 43451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 43551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 0x1f; 43651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25-21} = rs; 43751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{20-16} = rt; 43810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{15-11} = size; 43951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{10-6} = pos; 44051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5-0} = funct; 4415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 44251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 44351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class RDHWR_FM { 44451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rt; 44551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rd; 44651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 44751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 44851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 44951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 0x1f; 45051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25-21} = 0; 45151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{20-16} = rt; 45251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{15-11} = rd; 45351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{10-6} = 0; 45451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5-0} = 0x3b; 45551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 45651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 45751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class TEQ_FM<bits<6> funct> { 45851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rs; 45951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rt; 46051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<10> code_; 46151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 46251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 46351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 46451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 0; 46551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25-21} = rs; 46651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{20-16} = rt; 46751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{15-6} = code_; 46851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5-0} = funct; 46951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 47051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 47151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class TEQI_FM<bits<5> funct> { 47251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rs; 47351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<16> imm16; 47451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 47551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 47651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 47751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 1; 47851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25-21} = rs; 47951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{20-16} = funct; 48051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{15-0} = imm16; 48151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 48251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 48351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// System calls format <op|code_|funct> 48451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 48551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 48651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class SYS_FM<bits<6> funct> 48751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 48851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<20> code_; 48951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 49051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 0x0; 49151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25-6} = code_; 49251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5-0} = funct; 49351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 49451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 49551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 49651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// Break instruction format <op|code_1|funct> 49751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 49851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 49951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class BRK_FM<bits<6> funct> 50051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 50151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<10> code_1; 50251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<10> code_2; 50351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 50451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 0x0; 50551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25-16} = code_1; 50651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{15-6} = code_2; 50751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5-0} = funct; 50851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 50951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 51051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 51151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// Exception return format <Cop0|1|0|funct> 51251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 51351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 51451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class ER_FM<bits<6> funct> 51551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 51651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 51751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 0x10; 51851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25} = 1; 51951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{24-6} = 0; 52051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5-0} = funct; 52151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 52251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 52351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 52451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 52551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// Enable/disable interrupt instruction format <Cop0|MFMC0|rt|12|0|sc|0|0> 52651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 52751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 52851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class EI_FM<bits<1> sc> 52951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 53051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<32> Inst; 53151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> rt; 53251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{31-26} = 0x10; 53351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{25-21} = 0xb; 53451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{20-16} = rt; 53551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{15-11} = 0xc; 53651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{10-6} = 0; 53751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{5} = sc; 53851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{4-0} = 0; 53951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 54051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 54151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 54251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// 54351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// FLOATING POINT INSTRUCTION FORMATS 54451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// 54551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// opcode - operation code. 54651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// fs - src reg. 54751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// ft - dst reg (on a 2 regs instr) or src reg (on a 3 reg instr). 54851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// fd - dst reg, only used on 3 regs instr. 54951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// fmt - double or single precision. 55051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// funct - combined with opcode field give us an operation code. 55151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// 55251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 55351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 55451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 55551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// Format FI instruction class in Mips : <|opcode|base|ft|immediate|> 55651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)//===----------------------------------------------------------------------===// 55751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 55851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)class FFI<bits<6> op, dag outs, dag ins, string asmstr, list<dag> pattern>: 55951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) InstSE<outs, ins, asmstr, pattern, NoItinerary, FrmFI> 56051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 56151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bits<5> ft; 5625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> base; 5635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<16> imm16; 5645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 5655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) let Opcode = op; 5665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 5675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) let Inst{25-21} = base; 56851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{20-16} = ft; 56951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) let Inst{15-0} = imm16; 57051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 57109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class ADDS_FM<bits<6> funct, bits<5> fmt> { 57309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<5> fd; 57409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<5> fs; 57509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<5> ft; 57609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<32> Inst; 57809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{31-26} = 0x11; 58009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{25-21} = fmt; 58109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{20-16} = ft; 58209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{15-11} = fs; 58309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{10-6} = fd; 5845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) let Inst{5-0} = funct; 5855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 58676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 587d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class ABSS_FM<bits<6> funct, bits<5> fmt> { 58809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<5> fd; 58909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<5> fs; 59009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 59109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<32> Inst; 59209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 59309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{31-26} = 0x11; 59409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{25-21} = fmt; 59509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{20-16} = 0; 59609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{15-11} = fs; 59709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{10-6} = fd; 59809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{5-0} = funct; 59909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 60009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 6015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class MFC1_FM<bits<5> funct> { 6025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> rt; 6035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> fs; 6045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 60509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<32> Inst; 60609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 6077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci let Inst{31-26} = 0x11; 608d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) let Inst{25-21} = funct; 60909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{20-16} = rt; 61009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{15-11} = fs; 61109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) let Inst{10-0} = 0; 61209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 61309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 61409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class LW_FM<bits<6> op> : StdArch { 61509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<5> rt; 61609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bits<21> addr; 61709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 61810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<32> Inst; 61910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 62010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = op; 62110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{25-21} = addr{20-16}; 62210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{20-16} = rt; 62310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{15-0} = addr{15-0}; 62410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 62510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 62610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass MADDS_FM<bits<3> funct, bits<3> fmt> { 62710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> fd; 62810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> fr; 62910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> fs; 63010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> ft; 63110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 63210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<32> Inst; 63310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 63410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = 0x13; 63510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{25-21} = fr; 63610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{20-16} = ft; 63710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{15-11} = fs; 63810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{10-6} = fd; 63910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{5-3} = funct; 64010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{2-0} = fmt; 64110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 6425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 64310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass LWXC1_FM<bits<6> funct> { 64410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> fd; 64510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> base; 64610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> index; 64710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 64810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<32> Inst; 64910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 65010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = 0x13; 65110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{25-21} = base; 65210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{20-16} = index; 65310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{15-11} = 0; 65410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{10-6} = fd; 65510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{5-0} = funct; 65610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 65710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 65810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass SWXC1_FM<bits<6> funct> { 65910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> fs; 66010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> base; 66110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> index; 66210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 66310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<32> Inst; 66410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 66510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = 0x13; 66610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{25-21} = base; 66710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{20-16} = index; 66810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{15-11} = fs; 66910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{10-6} = 0; 67010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{5-0} = funct; 67110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 67210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 67310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass BC1F_FM<bit nd, bit tf> { 67410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<3> fcc; 67510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<16> offset; 67610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 67710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<32> Inst; 67810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 67910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = 0x11; 68010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{25-21} = 0x8; 68110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{20-18} = fcc; 68210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{17} = nd; 68310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{16} = tf; 68410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{15-0} = offset; 68510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 68610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 68710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass CEQS_FM<bits<5> fmt> { 68810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> fs; 68910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> ft; 69010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<4> cond; 69110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 69210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<32> Inst; 69310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 69410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = 0x11; 69510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{25-21} = fmt; 69610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{20-16} = ft; 69710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{15-11} = fs; 69810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{10-8} = 0; // cc 69910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{7-4} = 0x3; 70010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{3-0} = cond; 70110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 70210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 70310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass C_COND_FM<bits<5> fmt, bits<4> c> : CEQS_FM<fmt> { 70410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let cond = c; 70510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 70610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 70710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass CMov_I_F_FM<bits<6> funct, bits<5> fmt> { 70810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch bits<5> fd; 7095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> fs; 7105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<5> rt; 7115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 7125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) bits<32> Inst; 71310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 71410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{31-26} = 0x11; 71510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch let Inst{25-21} = fmt; 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) let Inst{20-16} = rt; 717 let Inst{15-11} = fs; 718 let Inst{10-6} = fd; 719 let Inst{5-0} = funct; 720} 721 722class CMov_F_I_FM<bit tf> : StdArch { 723 bits<5> rd; 724 bits<5> rs; 725 bits<3> fcc; 726 727 bits<32> Inst; 728 729 let Inst{31-26} = 0; 730 let Inst{25-21} = rs; 731 let Inst{20-18} = fcc; 732 let Inst{17} = 0; 733 let Inst{16} = tf; 734 let Inst{15-11} = rd; 735 let Inst{10-6} = 0; 736 let Inst{5-0} = 1; 737} 738 739class CMov_F_F_FM<bits<5> fmt, bit tf> { 740 bits<5> fd; 741 bits<5> fs; 742 bits<3> fcc; 743 744 bits<32> Inst; 745 746 let Inst{31-26} = 0x11; 747 let Inst{25-21} = fmt; 748 let Inst{20-18} = fcc; 749 let Inst{17} = 0; 750 let Inst{16} = tf; 751 let Inst{15-11} = fs; 752 let Inst{10-6} = fd; 753 let Inst{5-0} = 0x11; 754} 755