1*9880d681SAndroid Build Coastguard Worker//===- MipsDSPInstrFormats.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 Workerclass DspMMRel; 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdef Dsp2MicroMips : InstrMapping { 13*9880d681SAndroid Build Coastguard Worker let FilterClass = "DspMMRel"; 14*9880d681SAndroid Build Coastguard Worker // Instructions with the same BaseOpcode and isNVStore values form a row. 15*9880d681SAndroid Build Coastguard Worker let RowFields = ["BaseOpcode"]; 16*9880d681SAndroid Build Coastguard Worker // Instructions with the same predicate sense form a column. 17*9880d681SAndroid Build Coastguard Worker let ColFields = ["Arch"]; 18*9880d681SAndroid Build Coastguard Worker // The key column is the unpredicated instructions. 19*9880d681SAndroid Build Coastguard Worker let KeyCol = ["dsp"]; 20*9880d681SAndroid Build Coastguard Worker // Value columns are PredSense=true and PredSense=false 21*9880d681SAndroid Build Coastguard Worker let ValueCols = [["dsp"], ["mmdsp"]]; 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdef HasDSP : Predicate<"Subtarget->hasDSP()">, 25*9880d681SAndroid Build Coastguard Worker AssemblerPredicate<"FeatureDSP">; 26*9880d681SAndroid Build Coastguard Workerdef HasDSPR2 : Predicate<"Subtarget->hasDSPR2()">, 27*9880d681SAndroid Build Coastguard Worker AssemblerPredicate<"FeatureDSPR2">; 28*9880d681SAndroid Build Coastguard Workerdef HasDSPR3 : Predicate<"Subtarget->hasDSPR3()">, 29*9880d681SAndroid Build Coastguard Worker AssemblerPredicate<"FeatureDSPR3">; 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerclass ISA_DSPR2 { 32*9880d681SAndroid Build Coastguard Worker list<Predicate> InsnPredicates = [HasDSPR2]; 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerclass ISA_DSPR3 { 36*9880d681SAndroid Build Coastguard Worker list<Predicate> InsnPredicates = [HasDSPR3]; 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker// Fields. 40*9880d681SAndroid Build Coastguard Workerclass Field6<bits<6> val> { 41*9880d681SAndroid Build Coastguard Worker bits<6> V = val; 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdef SPECIAL3_OPCODE : Field6<0b011111>; 45*9880d681SAndroid Build Coastguard Workerdef REGIMM_OPCODE : Field6<0b000001>; 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerclass DSPInst<string opstr = ""> 48*9880d681SAndroid Build Coastguard Worker : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>, PredicateControl { 49*9880d681SAndroid Build Coastguard Worker let InsnPredicates = [HasDSP]; 50*9880d681SAndroid Build Coastguard Worker string BaseOpcode = opstr; 51*9880d681SAndroid Build Coastguard Worker string Arch = "dsp"; 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerclass PseudoDSP<dag outs, dag ins, list<dag> pattern, 55*9880d681SAndroid Build Coastguard Worker InstrItinClass itin = IIPseudo> 56*9880d681SAndroid Build Coastguard Worker : MipsPseudo<outs, ins, pattern, itin>, PredicateControl { 57*9880d681SAndroid Build Coastguard Worker let InsnPredicates = [HasDSP]; 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerclass DSPInstAlias<string Asm, dag Result, bit Emit = 0b1> 61*9880d681SAndroid Build Coastguard Worker : InstAlias<Asm, Result, Emit>, PredicateControl { 62*9880d681SAndroid Build Coastguard Worker let InsnPredicates = [HasDSP]; 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker// ADDU.QB sub-class format. 66*9880d681SAndroid Build Coastguard Workerclass ADDU_QB_FMT<bits<5> op> : DSPInst { 67*9880d681SAndroid Build Coastguard Worker bits<5> rd; 68*9880d681SAndroid Build Coastguard Worker bits<5> rs; 69*9880d681SAndroid Build Coastguard Worker bits<5> rt; 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 74*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 75*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 76*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 77*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010000; 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerclass RADDU_W_QB_FMT<bits<5> op> : DSPInst { 81*9880d681SAndroid Build Coastguard Worker bits<5> rd; 82*9880d681SAndroid Build Coastguard Worker bits<5> rs; 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 87*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = 0; 88*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 89*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 90*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010000; 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker// CMPU.EQ.QB sub-class format. 94*9880d681SAndroid Build Coastguard Workerclass CMP_EQ_QB_R2_FMT<bits<5> op> : DSPInst { 95*9880d681SAndroid Build Coastguard Worker bits<5> rs; 96*9880d681SAndroid Build Coastguard Worker bits<5> rt; 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 101*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 102*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = 0; 103*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 104*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010001; 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Workerclass CMP_EQ_QB_R3_FMT<bits<5> op> : DSPInst { 108*9880d681SAndroid Build Coastguard Worker bits<5> rs; 109*9880d681SAndroid Build Coastguard Worker bits<5> rt; 110*9880d681SAndroid Build Coastguard Worker bits<5> rd; 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 115*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 116*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 117*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 118*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010001; 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerclass PRECR_SRA_PH_W_FMT<bits<5> op> : DSPInst { 122*9880d681SAndroid Build Coastguard Worker bits<5> rs; 123*9880d681SAndroid Build Coastguard Worker bits<5> rt; 124*9880d681SAndroid Build Coastguard Worker bits<5> sa; 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 129*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 130*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = sa; 131*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 132*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010001; 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker// ABSQ_S.PH sub-class format. 136*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_PH_R2_FMT<bits<5> op> : DSPInst { 137*9880d681SAndroid Build Coastguard Worker bits<5> rd; 138*9880d681SAndroid Build Coastguard Worker bits<5> rt; 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0; 143*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 144*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 145*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 146*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010010; 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Workerclass REPL_FMT<bits<5> op> : DSPInst { 151*9880d681SAndroid Build Coastguard Worker bits<5> rd; 152*9880d681SAndroid Build Coastguard Worker bits<10> imm; 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Worker let Inst{25-16} = imm; 157*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 158*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 159*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010010; 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker// SHLL.QB sub-class format. 163*9880d681SAndroid Build Coastguard Workerclass SHLL_QB_FMT<bits<5> op> : DSPInst { 164*9880d681SAndroid Build Coastguard Worker bits<5> rd; 165*9880d681SAndroid Build Coastguard Worker bits<5> rt; 166*9880d681SAndroid Build Coastguard Worker bits<5> rs_sa; 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs_sa; 171*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 172*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 173*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 174*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b010011; 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker// LX sub-class format. 178*9880d681SAndroid Build Coastguard Workerclass LX_FMT<bits<5> op> : DSPInst { 179*9880d681SAndroid Build Coastguard Worker bits<5> rd; 180*9880d681SAndroid Build Coastguard Worker bits<5> base; 181*9880d681SAndroid Build Coastguard Worker bits<5> index; 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 184*9880d681SAndroid Build Coastguard Worker 185*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = base; 186*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = index; 187*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 188*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 189*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b001010; 190*9880d681SAndroid Build Coastguard Worker} 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Worker// ADDUH.QB sub-class format. 193*9880d681SAndroid Build Coastguard Workerclass ADDUH_QB_FMT<bits<5> op> : DSPInst { 194*9880d681SAndroid Build Coastguard Worker bits<5> rd; 195*9880d681SAndroid Build Coastguard Worker bits<5> rs; 196*9880d681SAndroid Build Coastguard Worker bits<5> rt; 197*9880d681SAndroid Build Coastguard Worker 198*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 201*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 202*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 203*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 204*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b011000; 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker// APPEND sub-class format. 208*9880d681SAndroid Build Coastguard Workerclass APPEND_FMT<bits<5> op> : DSPInst { 209*9880d681SAndroid Build Coastguard Worker bits<5> rt; 210*9880d681SAndroid Build Coastguard Worker bits<5> rs; 211*9880d681SAndroid Build Coastguard Worker bits<5> sa; 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 216*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 217*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = sa; 218*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 219*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b110001; 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker// DPA.W.PH sub-class format. 223*9880d681SAndroid Build Coastguard Workerclass DPA_W_PH_FMT<bits<5> op> : DSPInst { 224*9880d681SAndroid Build Coastguard Worker bits<2> ac; 225*9880d681SAndroid Build Coastguard Worker bits<5> rs; 226*9880d681SAndroid Build Coastguard Worker bits<5> rt; 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 231*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 232*9880d681SAndroid Build Coastguard Worker let Inst{15-13} = 0; 233*9880d681SAndroid Build Coastguard Worker let Inst{12-11} = ac; 234*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 235*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b110000; 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker// MULT sub-class format. 239*9880d681SAndroid Build Coastguard Workerclass MULT_FMT<bits<6> opcode, bits<6> funct> : DSPInst { 240*9880d681SAndroid Build Coastguard Worker bits<2> ac; 241*9880d681SAndroid Build Coastguard Worker bits<5> rs; 242*9880d681SAndroid Build Coastguard Worker bits<5> rt; 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker let Opcode = opcode; 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 247*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 248*9880d681SAndroid Build Coastguard Worker let Inst{15-13} = 0; 249*9880d681SAndroid Build Coastguard Worker let Inst{12-11} = ac; 250*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = 0; 251*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 252*9880d681SAndroid Build Coastguard Worker} 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Worker// MFHI sub-class format. 255*9880d681SAndroid Build Coastguard Workerclass MFHI_FMT<bits<6> funct> : DSPInst { 256*9880d681SAndroid Build Coastguard Worker bits<5> rd; 257*9880d681SAndroid Build Coastguard Worker bits<2> ac; 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 260*9880d681SAndroid Build Coastguard Worker let Inst{25-23} = 0; 261*9880d681SAndroid Build Coastguard Worker let Inst{22-21} = ac; 262*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = 0; 263*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 264*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = 0; 265*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Worker// MTHI sub-class format. 269*9880d681SAndroid Build Coastguard Workerclass MTHI_FMT<bits<6> funct> : DSPInst { 270*9880d681SAndroid Build Coastguard Worker bits<5> rs; 271*9880d681SAndroid Build Coastguard Worker bits<2> ac; 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0; 274*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 275*9880d681SAndroid Build Coastguard Worker let Inst{20-13} = 0; 276*9880d681SAndroid Build Coastguard Worker let Inst{12-11} = ac; 277*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = 0; 278*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = funct; 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Worker// EXTR.W sub-class format (type 1). 282*9880d681SAndroid Build Coastguard Workerclass EXTR_W_TY1_FMT<bits<5> op> : DSPInst { 283*9880d681SAndroid Build Coastguard Worker bits<5> rt; 284*9880d681SAndroid Build Coastguard Worker bits<2> ac; 285*9880d681SAndroid Build Coastguard Worker bits<5> shift_rs; 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = shift_rs; 290*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 291*9880d681SAndroid Build Coastguard Worker let Inst{15-13} = 0; 292*9880d681SAndroid Build Coastguard Worker let Inst{12-11} = ac; 293*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 294*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111000; 295*9880d681SAndroid Build Coastguard Worker} 296*9880d681SAndroid Build Coastguard Worker 297*9880d681SAndroid Build Coastguard Worker// SHILO sub-class format. 298*9880d681SAndroid Build Coastguard Workerclass SHILO_R1_FMT<bits<5> op> : DSPInst { 299*9880d681SAndroid Build Coastguard Worker bits<2> ac; 300*9880d681SAndroid Build Coastguard Worker bits<6> shift; 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Worker let Inst{25-20} = shift; 305*9880d681SAndroid Build Coastguard Worker let Inst{19-13} = 0; 306*9880d681SAndroid Build Coastguard Worker let Inst{12-11} = ac; 307*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 308*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111000; 309*9880d681SAndroid Build Coastguard Worker} 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Workerclass SHILO_R2_FMT<bits<5> op> : DSPInst { 312*9880d681SAndroid Build Coastguard Worker bits<2> ac; 313*9880d681SAndroid Build Coastguard Worker bits<5> rs; 314*9880d681SAndroid Build Coastguard Worker 315*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 316*9880d681SAndroid Build Coastguard Worker 317*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 318*9880d681SAndroid Build Coastguard Worker let Inst{20-13} = 0; 319*9880d681SAndroid Build Coastguard Worker let Inst{12-11} = ac; 320*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 321*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111000; 322*9880d681SAndroid Build Coastguard Worker} 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Workerclass RDDSP_FMT<bits<5> op> : DSPInst { 325*9880d681SAndroid Build Coastguard Worker bits<5> rd; 326*9880d681SAndroid Build Coastguard Worker bits<10> mask; 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 329*9880d681SAndroid Build Coastguard Worker 330*9880d681SAndroid Build Coastguard Worker let Inst{25-16} = mask; 331*9880d681SAndroid Build Coastguard Worker let Inst{15-11} = rd; 332*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 333*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111000; 334*9880d681SAndroid Build Coastguard Worker} 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Workerclass WRDSP_FMT<bits<5> op> : DSPInst { 337*9880d681SAndroid Build Coastguard Worker bits<5> rs; 338*9880d681SAndroid Build Coastguard Worker bits<10> mask; 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 343*9880d681SAndroid Build Coastguard Worker let Inst{20-11} = mask; 344*9880d681SAndroid Build Coastguard Worker let Inst{10-6} = op; 345*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = 0b111000; 346*9880d681SAndroid Build Coastguard Worker} 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Workerclass BPOSGE32_FMT<bits<5> op> : DSPInst { 349*9880d681SAndroid Build Coastguard Worker bits<16> offset; 350*9880d681SAndroid Build Coastguard Worker 351*9880d681SAndroid Build Coastguard Worker let Opcode = REGIMM_OPCODE.V; 352*9880d681SAndroid Build Coastguard Worker 353*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = 0; 354*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = op; 355*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = offset; 356*9880d681SAndroid Build Coastguard Worker} 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard Worker// INSV sub-class format. 359*9880d681SAndroid Build Coastguard Workerclass INSV_FMT<bits<6> op> : DSPInst { 360*9880d681SAndroid Build Coastguard Worker bits<5> rt; 361*9880d681SAndroid Build Coastguard Worker bits<5> rs; 362*9880d681SAndroid Build Coastguard Worker 363*9880d681SAndroid Build Coastguard Worker let Opcode = SPECIAL3_OPCODE.V; 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Worker let Inst{25-21} = rs; 366*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = rt; 367*9880d681SAndroid Build Coastguard Worker let Inst{15-6} = 0; 368*9880d681SAndroid Build Coastguard Worker let Inst{5-0} = op; 369*9880d681SAndroid Build Coastguard Worker} 370