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