1*9880d681SAndroid Build Coastguard Worker//===- PowerPCInstrFormats.td - PowerPC 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// 12*9880d681SAndroid Build Coastguard Worker// PowerPC instruction formats 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerclass I<bits<6> opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin> 15*9880d681SAndroid Build Coastguard Worker : Instruction { 16*9880d681SAndroid Build Coastguard Worker field bits<32> Inst; 17*9880d681SAndroid Build Coastguard Worker field bits<32> SoftFail = 0; 18*9880d681SAndroid Build Coastguard Worker let Size = 4; 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker bit PPC64 = 0; // Default value, override with isPPC64 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker let Namespace = "PPC"; 23*9880d681SAndroid Build Coastguard Worker let Inst{0-5} = opcode; 24*9880d681SAndroid Build Coastguard Worker let OutOperandList = OOL; 25*9880d681SAndroid Build Coastguard Worker let InOperandList = IOL; 26*9880d681SAndroid Build Coastguard Worker let AsmString = asmstr; 27*9880d681SAndroid Build Coastguard Worker let Itinerary = itin; 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker bits<1> PPC970_First = 0; 30*9880d681SAndroid Build Coastguard Worker bits<1> PPC970_Single = 0; 31*9880d681SAndroid Build Coastguard Worker bits<1> PPC970_Cracked = 0; 32*9880d681SAndroid Build Coastguard Worker bits<3> PPC970_Unit = 0; 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to 35*9880d681SAndroid Build Coastguard Worker /// these must be reflected there! See comments there for what these are. 36*9880d681SAndroid Build Coastguard Worker let TSFlags{0} = PPC970_First; 37*9880d681SAndroid Build Coastguard Worker let TSFlags{1} = PPC970_Single; 38*9880d681SAndroid Build Coastguard Worker let TSFlags{2} = PPC970_Cracked; 39*9880d681SAndroid Build Coastguard Worker let TSFlags{5-3} = PPC970_Unit; 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker // Fields used for relation models. 42*9880d681SAndroid Build Coastguard Worker string BaseName = ""; 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker // For cases where multiple instruction definitions really represent the 45*9880d681SAndroid Build Coastguard Worker // same underlying instruction but with one definition for 64-bit arguments 46*9880d681SAndroid Build Coastguard Worker // and one for 32-bit arguments, this bit breaks the degeneracy between 47*9880d681SAndroid Build Coastguard Worker // the two forms and allows TableGen to generate mapping tables. 48*9880d681SAndroid Build Coastguard Worker bit Interpretation64Bit = 0; 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerclass PPC970_DGroup_First { bits<1> PPC970_First = 1; } 52*9880d681SAndroid Build Coastguard Workerclass PPC970_DGroup_Single { bits<1> PPC970_Single = 1; } 53*9880d681SAndroid Build Coastguard Workerclass PPC970_DGroup_Cracked { bits<1> PPC970_Cracked = 1; } 54*9880d681SAndroid Build Coastguard Workerclass PPC970_MicroCode; 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_Pseudo { bits<3> PPC970_Unit = 0; } 57*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_FXU { bits<3> PPC970_Unit = 1; } 58*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_LSU { bits<3> PPC970_Unit = 2; } 59*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_FPU { bits<3> PPC970_Unit = 3; } 60*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_CRU { bits<3> PPC970_Unit = 4; } 61*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_VALU { bits<3> PPC970_Unit = 5; } 62*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_VPERM { bits<3> PPC970_Unit = 6; } 63*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_BRU { bits<3> PPC970_Unit = 7; } 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker// Two joined instructions; used to emit two adjacent instructions as one. 66*9880d681SAndroid Build Coastguard Worker// The itinerary from the first instruction is used for scheduling and 67*9880d681SAndroid Build Coastguard Worker// classification. 68*9880d681SAndroid Build Coastguard Workerclass I2<bits<6> opcode1, bits<6> opcode2, dag OOL, dag IOL, string asmstr, 69*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 70*9880d681SAndroid Build Coastguard Worker : Instruction { 71*9880d681SAndroid Build Coastguard Worker field bits<64> Inst; 72*9880d681SAndroid Build Coastguard Worker field bits<64> SoftFail = 0; 73*9880d681SAndroid Build Coastguard Worker let Size = 8; 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker bit PPC64 = 0; // Default value, override with isPPC64 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker let Namespace = "PPC"; 78*9880d681SAndroid Build Coastguard Worker let Inst{0-5} = opcode1; 79*9880d681SAndroid Build Coastguard Worker let Inst{32-37} = opcode2; 80*9880d681SAndroid Build Coastguard Worker let OutOperandList = OOL; 81*9880d681SAndroid Build Coastguard Worker let InOperandList = IOL; 82*9880d681SAndroid Build Coastguard Worker let AsmString = asmstr; 83*9880d681SAndroid Build Coastguard Worker let Itinerary = itin; 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker bits<1> PPC970_First = 0; 86*9880d681SAndroid Build Coastguard Worker bits<1> PPC970_Single = 0; 87*9880d681SAndroid Build Coastguard Worker bits<1> PPC970_Cracked = 0; 88*9880d681SAndroid Build Coastguard Worker bits<3> PPC970_Unit = 0; 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to 91*9880d681SAndroid Build Coastguard Worker /// these must be reflected there! See comments there for what these are. 92*9880d681SAndroid Build Coastguard Worker let TSFlags{0} = PPC970_First; 93*9880d681SAndroid Build Coastguard Worker let TSFlags{1} = PPC970_Single; 94*9880d681SAndroid Build Coastguard Worker let TSFlags{2} = PPC970_Cracked; 95*9880d681SAndroid Build Coastguard Worker let TSFlags{5-3} = PPC970_Unit; 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker // Fields used for relation models. 98*9880d681SAndroid Build Coastguard Worker string BaseName = ""; 99*9880d681SAndroid Build Coastguard Worker bit Interpretation64Bit = 0; 100*9880d681SAndroid Build Coastguard Worker} 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker// 1.7.1 I-Form 103*9880d681SAndroid Build Coastguard Workerclass IForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr, 104*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 105*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 106*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 107*9880d681SAndroid Build Coastguard Worker bits<24> LI; 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker let Inst{6-29} = LI; 110*9880d681SAndroid Build Coastguard Worker let Inst{30} = aa; 111*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 112*9880d681SAndroid Build Coastguard Worker} 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Worker// 1.7.2 B-Form 115*9880d681SAndroid Build Coastguard Workerclass BForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr> 116*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, IIC_BrB> { 117*9880d681SAndroid Build Coastguard Worker bits<7> BIBO; // 2 bits of BI and 5 bits of BO. 118*9880d681SAndroid Build Coastguard Worker bits<3> CR; 119*9880d681SAndroid Build Coastguard Worker bits<14> BD; 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Worker bits<5> BI; 122*9880d681SAndroid Build Coastguard Worker let BI{0-1} = BIBO{5-6}; 123*9880d681SAndroid Build Coastguard Worker let BI{2-4} = CR{0-2}; 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = BIBO{4-0}; 126*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = BI; 127*9880d681SAndroid Build Coastguard Worker let Inst{16-29} = BD; 128*9880d681SAndroid Build Coastguard Worker let Inst{30} = aa; 129*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerclass BForm_1<bits<6> opcode, bits<5> bo, bit aa, bit lk, dag OOL, dag IOL, 133*9880d681SAndroid Build Coastguard Worker string asmstr> 134*9880d681SAndroid Build Coastguard Worker : BForm<opcode, aa, lk, OOL, IOL, asmstr> { 135*9880d681SAndroid Build Coastguard Worker let BIBO{4-0} = bo; 136*9880d681SAndroid Build Coastguard Worker let BIBO{6-5} = 0; 137*9880d681SAndroid Build Coastguard Worker let CR = 0; 138*9880d681SAndroid Build Coastguard Worker} 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Workerclass BForm_2<bits<6> opcode, bits<5> bo, bits<5> bi, bit aa, bit lk, 141*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr> 142*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, IIC_BrB> { 143*9880d681SAndroid Build Coastguard Worker bits<14> BD; 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = bo; 146*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = bi; 147*9880d681SAndroid Build Coastguard Worker let Inst{16-29} = BD; 148*9880d681SAndroid Build Coastguard Worker let Inst{30} = aa; 149*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workerclass BForm_3<bits<6> opcode, bit aa, bit lk, 153*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr> 154*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, IIC_BrB> { 155*9880d681SAndroid Build Coastguard Worker bits<5> BO; 156*9880d681SAndroid Build Coastguard Worker bits<5> BI; 157*9880d681SAndroid Build Coastguard Worker bits<14> BD; 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = BO; 160*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = BI; 161*9880d681SAndroid Build Coastguard Worker let Inst{16-29} = BD; 162*9880d681SAndroid Build Coastguard Worker let Inst{30} = aa; 163*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 164*9880d681SAndroid Build Coastguard Worker} 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Workerclass BForm_4<bits<6> opcode, bits<5> bo, bit aa, bit lk, 167*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr> 168*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, IIC_BrB> { 169*9880d681SAndroid Build Coastguard Worker bits<5> BI; 170*9880d681SAndroid Build Coastguard Worker bits<14> BD; 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = bo; 173*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = BI; 174*9880d681SAndroid Build Coastguard Worker let Inst{16-29} = BD; 175*9880d681SAndroid Build Coastguard Worker let Inst{30} = aa; 176*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 177*9880d681SAndroid Build Coastguard Worker} 178*9880d681SAndroid Build Coastguard Worker 179*9880d681SAndroid Build Coastguard Worker// 1.7.3 SC-Form 180*9880d681SAndroid Build Coastguard Workerclass SCForm<bits<6> opcode, bits<1> xo, 181*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin, 182*9880d681SAndroid Build Coastguard Worker list<dag> pattern> 183*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 184*9880d681SAndroid Build Coastguard Worker bits<7> LEV; 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker let Inst{20-26} = LEV; 189*9880d681SAndroid Build Coastguard Worker let Inst{30} = xo; 190*9880d681SAndroid Build Coastguard Worker} 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Worker// 1.7.4 D-Form 193*9880d681SAndroid Build Coastguard Workerclass DForm_base<bits<6> opcode, dag OOL, dag IOL, string asmstr, 194*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 195*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 196*9880d681SAndroid Build Coastguard Worker bits<5> A; 197*9880d681SAndroid Build Coastguard Worker bits<5> B; 198*9880d681SAndroid Build Coastguard Worker bits<16> C; 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = A; 203*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = B; 204*9880d681SAndroid Build Coastguard Worker let Inst{16-31} = C; 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerclass DForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr, 208*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 209*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 210*9880d681SAndroid Build Coastguard Worker bits<5> A; 211*9880d681SAndroid Build Coastguard Worker bits<21> Addr; 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 214*9880d681SAndroid Build Coastguard Worker 215*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = A; 216*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = Addr{20-16}; // Base Reg 217*9880d681SAndroid Build Coastguard Worker let Inst{16-31} = Addr{15-0}; // Displacement 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Workerclass DForm_1a<bits<6> opcode, dag OOL, dag IOL, string asmstr, 221*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 222*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 223*9880d681SAndroid Build Coastguard Worker bits<5> A; 224*9880d681SAndroid Build Coastguard Worker bits<16> C; 225*9880d681SAndroid Build Coastguard Worker bits<5> B; 226*9880d681SAndroid Build Coastguard Worker 227*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = A; 230*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = B; 231*9880d681SAndroid Build Coastguard Worker let Inst{16-31} = C; 232*9880d681SAndroid Build Coastguard Worker} 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Worker 235*9880d681SAndroid Build Coastguard Workerclass DForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr, 236*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 237*9880d681SAndroid Build Coastguard Worker : DForm_base<opcode, OOL, IOL, asmstr, itin, pattern> { 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Worker // Even though ADDICo does not really have an RC bit, provide 240*9880d681SAndroid Build Coastguard Worker // the declaration of one here so that isDOT has something to set. 241*9880d681SAndroid Build Coastguard Worker bit RC = 0; 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerclass DForm_2_r0<bits<6> opcode, dag OOL, dag IOL, string asmstr, 245*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 246*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 247*9880d681SAndroid Build Coastguard Worker bits<5> A; 248*9880d681SAndroid Build Coastguard Worker bits<16> B; 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = A; 253*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = 0; 254*9880d681SAndroid Build Coastguard Worker let Inst{16-31} = B; 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Workerclass DForm_4<bits<6> opcode, dag OOL, dag IOL, string asmstr, 258*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 259*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 260*9880d681SAndroid Build Coastguard Worker bits<5> B; 261*9880d681SAndroid Build Coastguard Worker bits<5> A; 262*9880d681SAndroid Build Coastguard Worker bits<16> C; 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = A; 267*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = B; 268*9880d681SAndroid Build Coastguard Worker let Inst{16-31} = C; 269*9880d681SAndroid Build Coastguard Worker} 270*9880d681SAndroid Build Coastguard Worker 271*9880d681SAndroid Build Coastguard Workerclass DForm_4_zero<bits<6> opcode, dag OOL, dag IOL, string asmstr, 272*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 273*9880d681SAndroid Build Coastguard Worker : DForm_1<opcode, OOL, IOL, asmstr, itin, pattern> { 274*9880d681SAndroid Build Coastguard Worker let A = 0; 275*9880d681SAndroid Build Coastguard Worker let Addr = 0; 276*9880d681SAndroid Build Coastguard Worker} 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerclass DForm_4_fixedreg_zero<bits<6> opcode, bits<5> R, dag OOL, dag IOL, 279*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, 280*9880d681SAndroid Build Coastguard Worker list<dag> pattern> 281*9880d681SAndroid Build Coastguard Worker : DForm_4<opcode, OOL, IOL, asmstr, itin, pattern> { 282*9880d681SAndroid Build Coastguard Worker let A = R; 283*9880d681SAndroid Build Coastguard Worker let B = R; 284*9880d681SAndroid Build Coastguard Worker let C = 0; 285*9880d681SAndroid Build Coastguard Worker} 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Workerclass IForm_and_DForm_1<bits<6> opcode1, bit aa, bit lk, bits<6> opcode2, 288*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, 289*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 290*9880d681SAndroid Build Coastguard Worker : I2<opcode1, opcode2, OOL, IOL, asmstr, itin> { 291*9880d681SAndroid Build Coastguard Worker bits<5> A; 292*9880d681SAndroid Build Coastguard Worker bits<21> Addr; 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 295*9880d681SAndroid Build Coastguard Worker bits<24> LI; 296*9880d681SAndroid Build Coastguard Worker 297*9880d681SAndroid Build Coastguard Worker let Inst{6-29} = LI; 298*9880d681SAndroid Build Coastguard Worker let Inst{30} = aa; 299*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Worker let Inst{38-42} = A; 302*9880d681SAndroid Build Coastguard Worker let Inst{43-47} = Addr{20-16}; // Base Reg 303*9880d681SAndroid Build Coastguard Worker let Inst{48-63} = Addr{15-0}; // Displacement 304*9880d681SAndroid Build Coastguard Worker} 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Worker// This is used to emit BL8+NOP. 307*9880d681SAndroid Build Coastguard Workerclass IForm_and_DForm_4_zero<bits<6> opcode1, bit aa, bit lk, bits<6> opcode2, 308*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, 309*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 310*9880d681SAndroid Build Coastguard Worker : IForm_and_DForm_1<opcode1, aa, lk, opcode2, 311*9880d681SAndroid Build Coastguard Worker OOL, IOL, asmstr, itin, pattern> { 312*9880d681SAndroid Build Coastguard Worker let A = 0; 313*9880d681SAndroid Build Coastguard Worker let Addr = 0; 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Workerclass DForm_5<bits<6> opcode, dag OOL, dag IOL, string asmstr, 317*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 318*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 319*9880d681SAndroid Build Coastguard Worker bits<3> BF; 320*9880d681SAndroid Build Coastguard Worker bits<1> L; 321*9880d681SAndroid Build Coastguard Worker bits<5> RA; 322*9880d681SAndroid Build Coastguard Worker bits<16> I; 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 325*9880d681SAndroid Build Coastguard Worker let Inst{9} = 0; 326*9880d681SAndroid Build Coastguard Worker let Inst{10} = L; 327*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 328*9880d681SAndroid Build Coastguard Worker let Inst{16-31} = I; 329*9880d681SAndroid Build Coastguard Worker} 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Workerclass DForm_5_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr, 332*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 333*9880d681SAndroid Build Coastguard Worker : DForm_5<opcode, OOL, IOL, asmstr, itin> { 334*9880d681SAndroid Build Coastguard Worker let L = PPC64; 335*9880d681SAndroid Build Coastguard Worker} 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Workerclass DForm_6<bits<6> opcode, dag OOL, dag IOL, string asmstr, 338*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 339*9880d681SAndroid Build Coastguard Worker : DForm_5<opcode, OOL, IOL, asmstr, itin>; 340*9880d681SAndroid Build Coastguard Worker 341*9880d681SAndroid Build Coastguard Workerclass DForm_6_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr, 342*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 343*9880d681SAndroid Build Coastguard Worker : DForm_6<opcode, OOL, IOL, asmstr, itin> { 344*9880d681SAndroid Build Coastguard Worker let L = PPC64; 345*9880d681SAndroid Build Coastguard Worker} 346*9880d681SAndroid Build Coastguard Worker 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Worker// 1.7.5 DS-Form 349*9880d681SAndroid Build Coastguard Workerclass DSForm_1<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr, 350*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 351*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 352*9880d681SAndroid Build Coastguard Worker bits<5> RST; 353*9880d681SAndroid Build Coastguard Worker bits<19> DS_RA; 354*9880d681SAndroid Build Coastguard Worker 355*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RST; 358*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = DS_RA{18-14}; // Register # 359*9880d681SAndroid Build Coastguard Worker let Inst{16-29} = DS_RA{13-0}; // Displacement. 360*9880d681SAndroid Build Coastguard Worker let Inst{30-31} = xo; 361*9880d681SAndroid Build Coastguard Worker} 362*9880d681SAndroid Build Coastguard Worker 363*9880d681SAndroid Build Coastguard Worker// DQ-Form: [PO T RA DQ TX XO] or [PO S RA DQ SX XO] 364*9880d681SAndroid Build Coastguard Workerclass DQ_RD6_RS5_DQ12<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, 365*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 366*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 367*9880d681SAndroid Build Coastguard Worker bits<6> XT; 368*9880d681SAndroid Build Coastguard Worker bits<17> DS_RA; 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 371*9880d681SAndroid Build Coastguard Worker 372*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 373*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = DS_RA{16-12}; // Register # 374*9880d681SAndroid Build Coastguard Worker let Inst{16-27} = DS_RA{11-0}; // Displacement. 375*9880d681SAndroid Build Coastguard Worker let Inst{28} = XT{5}; 376*9880d681SAndroid Build Coastguard Worker let Inst{29-31} = xo; 377*9880d681SAndroid Build Coastguard Worker} 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Worker// 1.7.6 X-Form 380*9880d681SAndroid Build Coastguard Workerclass XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 381*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 382*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 383*9880d681SAndroid Build Coastguard Worker bits<5> RST; 384*9880d681SAndroid Build Coastguard Worker bits<5> A; 385*9880d681SAndroid Build Coastguard Worker bits<5> B; 386*9880d681SAndroid Build Coastguard Worker 387*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 388*9880d681SAndroid Build Coastguard Worker 389*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 390*9880d681SAndroid Build Coastguard Worker 391*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RST; 392*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 393*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = B; 394*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 395*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 396*9880d681SAndroid Build Coastguard Worker} 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Workerclass XForm_tlb<bits<10> xo, dag OOL, dag IOL, string asmstr, 399*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> : XForm_base_r3xo<31, xo, OOL, IOL, asmstr, itin, []> { 400*9880d681SAndroid Build Coastguard Worker let RST = 0; 401*9880d681SAndroid Build Coastguard Worker} 402*9880d681SAndroid Build Coastguard Worker 403*9880d681SAndroid Build Coastguard Workerclass XForm_attn<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 404*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 405*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 406*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 407*9880d681SAndroid Build Coastguard Worker} 408*9880d681SAndroid Build Coastguard Worker 409*9880d681SAndroid Build Coastguard Worker// This is the same as XForm_base_r3xo, but the first two operands are swapped 410*9880d681SAndroid Build Coastguard Worker// when code is emitted. 411*9880d681SAndroid Build Coastguard Workerclass XForm_base_r3xo_swapped 412*9880d681SAndroid Build Coastguard Worker <bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 413*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 414*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 415*9880d681SAndroid Build Coastguard Worker bits<5> A; 416*9880d681SAndroid Build Coastguard Worker bits<5> RST; 417*9880d681SAndroid Build Coastguard Worker bits<5> B; 418*9880d681SAndroid Build Coastguard Worker 419*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 420*9880d681SAndroid Build Coastguard Worker 421*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RST; 422*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 423*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = B; 424*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 425*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 426*9880d681SAndroid Build Coastguard Worker} 427*9880d681SAndroid Build Coastguard Worker 428*9880d681SAndroid Build Coastguard Worker 429*9880d681SAndroid Build Coastguard Workerclass XForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 430*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 431*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>; 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Workerclass XForm_1a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 434*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 435*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 436*9880d681SAndroid Build Coastguard Worker let RST = 0; 437*9880d681SAndroid Build Coastguard Worker} 438*9880d681SAndroid Build Coastguard Worker 439*9880d681SAndroid Build Coastguard Workerclass XForm_rs<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 440*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 441*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 442*9880d681SAndroid Build Coastguard Worker let A = 0; 443*9880d681SAndroid Build Coastguard Worker let B = 0; 444*9880d681SAndroid Build Coastguard Worker} 445*9880d681SAndroid Build Coastguard Worker 446*9880d681SAndroid Build Coastguard Workerclass XForm_tlbws<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 447*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 448*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 449*9880d681SAndroid Build Coastguard Worker bits<5> RST; 450*9880d681SAndroid Build Coastguard Worker bits<5> A; 451*9880d681SAndroid Build Coastguard Worker bits<1> WS; 452*9880d681SAndroid Build Coastguard Worker 453*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 454*9880d681SAndroid Build Coastguard Worker 455*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RST; 456*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 457*9880d681SAndroid Build Coastguard Worker let Inst{20} = WS; 458*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 459*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 460*9880d681SAndroid Build Coastguard Worker} 461*9880d681SAndroid Build Coastguard Worker 462*9880d681SAndroid Build Coastguard Workerclass XForm_6<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 463*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 464*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> { 465*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 466*9880d681SAndroid Build Coastguard Worker} 467*9880d681SAndroid Build Coastguard Worker 468*9880d681SAndroid Build Coastguard Workerclass XForm_8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 469*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 470*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>; 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Workerclass XForm_10<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 473*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 474*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> { 475*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 476*9880d681SAndroid Build Coastguard Worker} 477*9880d681SAndroid Build Coastguard Worker 478*9880d681SAndroid Build Coastguard Workerclass XForm_11<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 479*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 480*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> { 481*9880d681SAndroid Build Coastguard Worker let B = 0; 482*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 483*9880d681SAndroid Build Coastguard Worker} 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Workerclass XForm_16<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 486*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 487*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 488*9880d681SAndroid Build Coastguard Worker bits<3> BF; 489*9880d681SAndroid Build Coastguard Worker bits<1> L; 490*9880d681SAndroid Build Coastguard Worker bits<5> RA; 491*9880d681SAndroid Build Coastguard Worker bits<5> RB; 492*9880d681SAndroid Build Coastguard Worker 493*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 494*9880d681SAndroid Build Coastguard Worker let Inst{9} = 0; 495*9880d681SAndroid Build Coastguard Worker let Inst{10} = L; 496*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 497*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 498*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 499*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Workerclass XForm_icbt<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 503*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 504*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 505*9880d681SAndroid Build Coastguard Worker bits<4> CT; 506*9880d681SAndroid Build Coastguard Worker bits<5> RA; 507*9880d681SAndroid Build Coastguard Worker bits<5> RB; 508*9880d681SAndroid Build Coastguard Worker 509*9880d681SAndroid Build Coastguard Worker let Inst{6} = 0; 510*9880d681SAndroid Build Coastguard Worker let Inst{7-10} = CT; 511*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 512*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 513*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 514*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 515*9880d681SAndroid Build Coastguard Worker} 516*9880d681SAndroid Build Coastguard Worker 517*9880d681SAndroid Build Coastguard Workerclass XForm_sr<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 518*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 519*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 520*9880d681SAndroid Build Coastguard Worker bits<5> RS; 521*9880d681SAndroid Build Coastguard Worker bits<4> SR; 522*9880d681SAndroid Build Coastguard Worker 523*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RS; 524*9880d681SAndroid Build Coastguard Worker let Inst{12-15} = SR; 525*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 526*9880d681SAndroid Build Coastguard Worker} 527*9880d681SAndroid Build Coastguard Worker 528*9880d681SAndroid Build Coastguard Workerclass XForm_mbar<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 529*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 530*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 531*9880d681SAndroid Build Coastguard Worker bits<5> MO; 532*9880d681SAndroid Build Coastguard Worker 533*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = MO; 534*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 535*9880d681SAndroid Build Coastguard Worker} 536*9880d681SAndroid Build Coastguard Worker 537*9880d681SAndroid Build Coastguard Workerclass XForm_srin<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 538*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 539*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 540*9880d681SAndroid Build Coastguard Worker bits<5> RS; 541*9880d681SAndroid Build Coastguard Worker bits<5> RB; 542*9880d681SAndroid Build Coastguard Worker 543*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RS; 544*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 545*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 546*9880d681SAndroid Build Coastguard Worker} 547*9880d681SAndroid Build Coastguard Worker 548*9880d681SAndroid Build Coastguard Workerclass XForm_mtmsr<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 549*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 550*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 551*9880d681SAndroid Build Coastguard Worker bits<5> RS; 552*9880d681SAndroid Build Coastguard Worker bits<1> L; 553*9880d681SAndroid Build Coastguard Worker 554*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RS; 555*9880d681SAndroid Build Coastguard Worker let Inst{15} = L; 556*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 557*9880d681SAndroid Build Coastguard Worker} 558*9880d681SAndroid Build Coastguard Worker 559*9880d681SAndroid Build Coastguard Workerclass XForm_16_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 560*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 561*9880d681SAndroid Build Coastguard Worker : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> { 562*9880d681SAndroid Build Coastguard Worker let L = PPC64; 563*9880d681SAndroid Build Coastguard Worker} 564*9880d681SAndroid Build Coastguard Worker 565*9880d681SAndroid Build Coastguard Workerclass XForm_17<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 566*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 567*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 568*9880d681SAndroid Build Coastguard Worker bits<3> BF; 569*9880d681SAndroid Build Coastguard Worker bits<5> FRA; 570*9880d681SAndroid Build Coastguard Worker bits<5> FRB; 571*9880d681SAndroid Build Coastguard Worker 572*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 573*9880d681SAndroid Build Coastguard Worker let Inst{9-10} = 0; 574*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = FRA; 575*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = FRB; 576*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 577*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 578*9880d681SAndroid Build Coastguard Worker} 579*9880d681SAndroid Build Coastguard Worker 580*9880d681SAndroid Build Coastguard Worker// Used for QPX 581*9880d681SAndroid Build Coastguard Workerclass XForm_18<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 582*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 583*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 584*9880d681SAndroid Build Coastguard Worker bits<5> FRT; 585*9880d681SAndroid Build Coastguard Worker bits<5> FRA; 586*9880d681SAndroid Build Coastguard Worker bits<5> FRB; 587*9880d681SAndroid Build Coastguard Worker 588*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 589*9880d681SAndroid Build Coastguard Worker 590*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = FRT; 591*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = FRA; 592*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = FRB; 593*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 594*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 595*9880d681SAndroid Build Coastguard Worker} 596*9880d681SAndroid Build Coastguard Worker 597*9880d681SAndroid Build Coastguard Workerclass XForm_19<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 598*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 599*9880d681SAndroid Build Coastguard Worker : XForm_18<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 600*9880d681SAndroid Build Coastguard Worker let FRA = 0; 601*9880d681SAndroid Build Coastguard Worker} 602*9880d681SAndroid Build Coastguard Worker 603*9880d681SAndroid Build Coastguard Workerclass XForm_20<bits<6> opcode, bits<6> xo, dag OOL, dag IOL, string asmstr, 604*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 605*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 606*9880d681SAndroid Build Coastguard Worker bits<5> FRT; 607*9880d681SAndroid Build Coastguard Worker bits<5> FRA; 608*9880d681SAndroid Build Coastguard Worker bits<5> FRB; 609*9880d681SAndroid Build Coastguard Worker bits<4> tttt; 610*9880d681SAndroid Build Coastguard Worker 611*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 612*9880d681SAndroid Build Coastguard Worker 613*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = FRT; 614*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = FRA; 615*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = FRB; 616*9880d681SAndroid Build Coastguard Worker let Inst{21-24} = tttt; 617*9880d681SAndroid Build Coastguard Worker let Inst{25-30} = xo; 618*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 619*9880d681SAndroid Build Coastguard Worker} 620*9880d681SAndroid Build Coastguard Worker 621*9880d681SAndroid Build Coastguard Workerclass XForm_24<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 622*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 623*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 624*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 625*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = 31; 626*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = 0; 627*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = 0; 628*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 629*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 630*9880d681SAndroid Build Coastguard Worker} 631*9880d681SAndroid Build Coastguard Worker 632*9880d681SAndroid Build Coastguard Workerclass XForm_24_sync<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 633*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 634*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 635*9880d681SAndroid Build Coastguard Worker bits<2> L; 636*9880d681SAndroid Build Coastguard Worker 637*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 638*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = 0; 639*9880d681SAndroid Build Coastguard Worker let Inst{9-10} = L; 640*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = 0; 641*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = 0; 642*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 643*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 644*9880d681SAndroid Build Coastguard Worker} 645*9880d681SAndroid Build Coastguard Worker 646*9880d681SAndroid Build Coastguard Workerclass XForm_24_eieio<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 647*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 648*9880d681SAndroid Build Coastguard Worker : XForm_24_sync<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 649*9880d681SAndroid Build Coastguard Worker let L = 0; 650*9880d681SAndroid Build Coastguard Worker} 651*9880d681SAndroid Build Coastguard Worker 652*9880d681SAndroid Build Coastguard Workerclass XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 653*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 654*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 655*9880d681SAndroid Build Coastguard Worker} 656*9880d681SAndroid Build Coastguard Worker 657*9880d681SAndroid Build Coastguard Workerclass XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 658*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 659*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 660*9880d681SAndroid Build Coastguard Worker let A = 0; 661*9880d681SAndroid Build Coastguard Worker} 662*9880d681SAndroid Build Coastguard Worker 663*9880d681SAndroid Build Coastguard Workerclass XForm_28<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 664*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 665*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 666*9880d681SAndroid Build Coastguard Worker} 667*9880d681SAndroid Build Coastguard Worker 668*9880d681SAndroid Build Coastguard Worker// This is used for MFFS, MTFSB0, MTFSB1. 42 is arbitrary; this series of 669*9880d681SAndroid Build Coastguard Worker// numbers presumably relates to some document, but I haven't found it. 670*9880d681SAndroid Build Coastguard Workerclass XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 671*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 672*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 673*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 674*9880d681SAndroid Build Coastguard Worker 675*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 676*9880d681SAndroid Build Coastguard Worker 677*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RST; 678*9880d681SAndroid Build Coastguard Worker let Inst{11-20} = 0; 679*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 680*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 681*9880d681SAndroid Build Coastguard Worker} 682*9880d681SAndroid Build Coastguard Workerclass XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 683*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 684*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 685*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 686*9880d681SAndroid Build Coastguard Worker bits<5> FM; 687*9880d681SAndroid Build Coastguard Worker 688*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 689*9880d681SAndroid Build Coastguard Worker 690*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = FM; 691*9880d681SAndroid Build Coastguard Worker let Inst{11-20} = 0; 692*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 693*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 694*9880d681SAndroid Build Coastguard Worker} 695*9880d681SAndroid Build Coastguard Worker 696*9880d681SAndroid Build Coastguard Workerclass XForm_0<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 697*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 698*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 699*9880d681SAndroid Build Coastguard Worker let RST = 0; 700*9880d681SAndroid Build Coastguard Worker let A = 0; 701*9880d681SAndroid Build Coastguard Worker let B = 0; 702*9880d681SAndroid Build Coastguard Worker} 703*9880d681SAndroid Build Coastguard Worker 704*9880d681SAndroid Build Coastguard Workerclass XForm_16b<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 705*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 706*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 707*9880d681SAndroid Build Coastguard Worker let RST = 0; 708*9880d681SAndroid Build Coastguard Worker let A = 0; 709*9880d681SAndroid Build Coastguard Worker} 710*9880d681SAndroid Build Coastguard Worker 711*9880d681SAndroid Build Coastguard Workerclass XForm_htm0<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 712*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 713*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 714*9880d681SAndroid Build Coastguard Worker bit R; 715*9880d681SAndroid Build Coastguard Worker 716*9880d681SAndroid Build Coastguard Worker bit RC = 1; 717*9880d681SAndroid Build Coastguard Worker 718*9880d681SAndroid Build Coastguard Worker let Inst{6-9} = 0; 719*9880d681SAndroid Build Coastguard Worker let Inst{10} = R; 720*9880d681SAndroid Build Coastguard Worker let Inst{11-20} = 0; 721*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 722*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 723*9880d681SAndroid Build Coastguard Worker} 724*9880d681SAndroid Build Coastguard Worker 725*9880d681SAndroid Build Coastguard Workerclass XForm_htm1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 726*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 727*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 728*9880d681SAndroid Build Coastguard Worker bit A; 729*9880d681SAndroid Build Coastguard Worker 730*9880d681SAndroid Build Coastguard Worker bit RC = 1; 731*9880d681SAndroid Build Coastguard Worker 732*9880d681SAndroid Build Coastguard Worker let Inst{6} = A; 733*9880d681SAndroid Build Coastguard Worker let Inst{7-20} = 0; 734*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 735*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 736*9880d681SAndroid Build Coastguard Worker} 737*9880d681SAndroid Build Coastguard Worker 738*9880d681SAndroid Build Coastguard Workerclass XForm_htm2<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 739*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 740*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 741*9880d681SAndroid Build Coastguard Worker bit L; 742*9880d681SAndroid Build Coastguard Worker 743*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 744*9880d681SAndroid Build Coastguard Worker 745*9880d681SAndroid Build Coastguard Worker let Inst{7-9} = 0; 746*9880d681SAndroid Build Coastguard Worker let Inst{10} = L; 747*9880d681SAndroid Build Coastguard Worker let Inst{11-20} = 0; 748*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 749*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 750*9880d681SAndroid Build Coastguard Worker} 751*9880d681SAndroid Build Coastguard Worker 752*9880d681SAndroid Build Coastguard Workerclass XForm_htm3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 753*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 754*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 755*9880d681SAndroid Build Coastguard Worker bits<3> BF; 756*9880d681SAndroid Build Coastguard Worker 757*9880d681SAndroid Build Coastguard Worker bit RC = 0; 758*9880d681SAndroid Build Coastguard Worker 759*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 760*9880d681SAndroid Build Coastguard Worker let Inst{9-20} = 0; 761*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 762*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 763*9880d681SAndroid Build Coastguard Worker} 764*9880d681SAndroid Build Coastguard Worker 765*9880d681SAndroid Build Coastguard Worker// [PO RT RA RB XO /] 766*9880d681SAndroid Build Coastguard Workerclass X_BF3_L1_RS5_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 767*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 768*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 769*9880d681SAndroid Build Coastguard Worker bits<3> BF; 770*9880d681SAndroid Build Coastguard Worker bits<1> L; 771*9880d681SAndroid Build Coastguard Worker bits<5> RA; 772*9880d681SAndroid Build Coastguard Worker bits<5> RB; 773*9880d681SAndroid Build Coastguard Worker 774*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 775*9880d681SAndroid Build Coastguard Worker 776*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 777*9880d681SAndroid Build Coastguard Worker let Inst{9} = 0; 778*9880d681SAndroid Build Coastguard Worker let Inst{10} = L; 779*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 780*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 781*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 782*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 783*9880d681SAndroid Build Coastguard Worker} 784*9880d681SAndroid Build Coastguard Worker 785*9880d681SAndroid Build Coastguard Worker// Same as XForm_17 but with GPR's and new naming convention 786*9880d681SAndroid Build Coastguard Workerclass X_BF3_RS5_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 787*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 788*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 789*9880d681SAndroid Build Coastguard Worker bits<3> BF; 790*9880d681SAndroid Build Coastguard Worker bits<5> RA; 791*9880d681SAndroid Build Coastguard Worker bits<5> RB; 792*9880d681SAndroid Build Coastguard Worker 793*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 794*9880d681SAndroid Build Coastguard Worker 795*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 796*9880d681SAndroid Build Coastguard Worker let Inst{9-10} = 0; 797*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 798*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 799*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 800*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 801*9880d681SAndroid Build Coastguard Worker} 802*9880d681SAndroid Build Coastguard Worker 803*9880d681SAndroid Build Coastguard Worker// e.g. [PO VRT XO VRB XO /] or [PO VRT XO VRB XO RO] 804*9880d681SAndroid Build Coastguard Workerclass X_RD5_XO5_RS5<bits<6> opcode, bits<5> xo2, bits<10> xo, dag OOL, dag IOL, 805*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 806*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 807*9880d681SAndroid Build Coastguard Worker let A = xo2; 808*9880d681SAndroid Build Coastguard Worker} 809*9880d681SAndroid Build Coastguard Worker 810*9880d681SAndroid Build Coastguard Workerclass X_BF3_DCMX7_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 811*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 812*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 813*9880d681SAndroid Build Coastguard Worker bits<3> BF; 814*9880d681SAndroid Build Coastguard Worker bits<7> DCMX; 815*9880d681SAndroid Build Coastguard Worker bits<5> VB; 816*9880d681SAndroid Build Coastguard Worker 817*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 818*9880d681SAndroid Build Coastguard Worker 819*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 820*9880d681SAndroid Build Coastguard Worker let Inst{9-15} = DCMX; 821*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 822*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 823*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 824*9880d681SAndroid Build Coastguard Worker} 825*9880d681SAndroid Build Coastguard Worker 826*9880d681SAndroid Build Coastguard Workerclass X_RD6_IMM8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 827*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 828*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 829*9880d681SAndroid Build Coastguard Worker bits<6> XT; 830*9880d681SAndroid Build Coastguard Worker bits<8> IMM8; 831*9880d681SAndroid Build Coastguard Worker 832*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 833*9880d681SAndroid Build Coastguard Worker 834*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 835*9880d681SAndroid Build Coastguard Worker let Inst{11-12} = 0; 836*9880d681SAndroid Build Coastguard Worker let Inst{13-20} = IMM8; 837*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 838*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 839*9880d681SAndroid Build Coastguard Worker} 840*9880d681SAndroid Build Coastguard Worker 841*9880d681SAndroid Build Coastguard Worker// XForm_base_r3xo for instructions such as P9 atomics where we don't want 842*9880d681SAndroid Build Coastguard Worker// to specify an SDAG pattern for matching. 843*9880d681SAndroid Build Coastguard Workerclass X_RD5_RS5_IM5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 844*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin> 845*9880d681SAndroid Build Coastguard Worker : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, []> { 846*9880d681SAndroid Build Coastguard Worker} 847*9880d681SAndroid Build Coastguard Worker 848*9880d681SAndroid Build Coastguard Workerclass X_BF3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 849*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 850*9880d681SAndroid Build Coastguard Worker : XForm_17<opcode, xo, OOL, IOL, asmstr, itin> { 851*9880d681SAndroid Build Coastguard Worker let FRA = 0; 852*9880d681SAndroid Build Coastguard Worker let FRB = 0; 853*9880d681SAndroid Build Coastguard Worker} 854*9880d681SAndroid Build Coastguard Worker 855*9880d681SAndroid Build Coastguard Worker// [PO /// L RA RB XO /] 856*9880d681SAndroid Build Coastguard Workerclass X_L1_RS5_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 857*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 858*9880d681SAndroid Build Coastguard Worker : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> { 859*9880d681SAndroid Build Coastguard Worker let BF = 0; 860*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 861*9880d681SAndroid Build Coastguard Worker 862*9880d681SAndroid Build Coastguard Worker bit RC = 0; 863*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 864*9880d681SAndroid Build Coastguard Worker} 865*9880d681SAndroid Build Coastguard Worker 866*9880d681SAndroid Build Coastguard Worker// XX*-Form (VSX) 867*9880d681SAndroid Build Coastguard Workerclass XX1Form<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 868*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 869*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 870*9880d681SAndroid Build Coastguard Worker bits<6> XT; 871*9880d681SAndroid Build Coastguard Worker bits<5> A; 872*9880d681SAndroid Build Coastguard Worker bits<5> B; 873*9880d681SAndroid Build Coastguard Worker 874*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 875*9880d681SAndroid Build Coastguard Worker 876*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 877*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 878*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = B; 879*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 880*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 881*9880d681SAndroid Build Coastguard Worker} 882*9880d681SAndroid Build Coastguard Worker 883*9880d681SAndroid Build Coastguard Workerclass XX1_RS6_RD5_XO<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, 884*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 885*9880d681SAndroid Build Coastguard Worker : XX1Form<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 886*9880d681SAndroid Build Coastguard Worker let B = 0; 887*9880d681SAndroid Build Coastguard Worker} 888*9880d681SAndroid Build Coastguard Worker 889*9880d681SAndroid Build Coastguard Workerclass XX2Form<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr, 890*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 891*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 892*9880d681SAndroid Build Coastguard Worker bits<6> XT; 893*9880d681SAndroid Build Coastguard Worker bits<6> XB; 894*9880d681SAndroid Build Coastguard Worker 895*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 896*9880d681SAndroid Build Coastguard Worker 897*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 898*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = 0; 899*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 900*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 901*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 902*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 903*9880d681SAndroid Build Coastguard Worker} 904*9880d681SAndroid Build Coastguard Worker 905*9880d681SAndroid Build Coastguard Workerclass XX2Form_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr, 906*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 907*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 908*9880d681SAndroid Build Coastguard Worker bits<3> CR; 909*9880d681SAndroid Build Coastguard Worker bits<6> XB; 910*9880d681SAndroid Build Coastguard Worker 911*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 912*9880d681SAndroid Build Coastguard Worker 913*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = CR; 914*9880d681SAndroid Build Coastguard Worker let Inst{9-15} = 0; 915*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 916*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 917*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 918*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 919*9880d681SAndroid Build Coastguard Worker} 920*9880d681SAndroid Build Coastguard Worker 921*9880d681SAndroid Build Coastguard Workerclass XX2Form_2<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr, 922*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 923*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 924*9880d681SAndroid Build Coastguard Worker bits<6> XT; 925*9880d681SAndroid Build Coastguard Worker bits<6> XB; 926*9880d681SAndroid Build Coastguard Worker bits<2> D; 927*9880d681SAndroid Build Coastguard Worker 928*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 929*9880d681SAndroid Build Coastguard Worker 930*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 931*9880d681SAndroid Build Coastguard Worker let Inst{11-13} = 0; 932*9880d681SAndroid Build Coastguard Worker let Inst{14-15} = D; 933*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 934*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 935*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 936*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 937*9880d681SAndroid Build Coastguard Worker} 938*9880d681SAndroid Build Coastguard Worker 939*9880d681SAndroid Build Coastguard Workerclass XX2_RD6_UIM5_RS6<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, 940*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 941*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 942*9880d681SAndroid Build Coastguard Worker bits<6> XT; 943*9880d681SAndroid Build Coastguard Worker bits<6> XB; 944*9880d681SAndroid Build Coastguard Worker bits<5> UIM5; 945*9880d681SAndroid Build Coastguard Worker 946*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 947*9880d681SAndroid Build Coastguard Worker 948*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 949*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = UIM5; 950*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 951*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 952*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 953*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 954*9880d681SAndroid Build Coastguard Worker} 955*9880d681SAndroid Build Coastguard Worker 956*9880d681SAndroid Build Coastguard Worker// [PO T XO B XO BX /] 957*9880d681SAndroid Build Coastguard Workerclass XX2_RD5_XO5_RS6<bits<6> opcode, bits<5> xo2, bits<9> xo, dag OOL, dag IOL, 958*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 959*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 960*9880d681SAndroid Build Coastguard Worker bits<5> RT; 961*9880d681SAndroid Build Coastguard Worker bits<6> XB; 962*9880d681SAndroid Build Coastguard Worker 963*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 964*9880d681SAndroid Build Coastguard Worker 965*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RT; 966*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = xo2; 967*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 968*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 969*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 970*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 971*9880d681SAndroid Build Coastguard Worker} 972*9880d681SAndroid Build Coastguard Worker 973*9880d681SAndroid Build Coastguard Worker// [PO T XO B XO BX TX] 974*9880d681SAndroid Build Coastguard Workerclass XX2_RD6_XO5_RS6<bits<6> opcode, bits<5> xo2, bits<9> xo, dag OOL, dag IOL, 975*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 976*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 977*9880d681SAndroid Build Coastguard Worker bits<6> XT; 978*9880d681SAndroid Build Coastguard Worker bits<6> XB; 979*9880d681SAndroid Build Coastguard Worker 980*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 981*9880d681SAndroid Build Coastguard Worker 982*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 983*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = xo2; 984*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 985*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 986*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 987*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 988*9880d681SAndroid Build Coastguard Worker} 989*9880d681SAndroid Build Coastguard Worker 990*9880d681SAndroid Build Coastguard Workerclass XX2_BF3_DCMX7_RS6<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, 991*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 992*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 993*9880d681SAndroid Build Coastguard Worker bits<3> BF; 994*9880d681SAndroid Build Coastguard Worker bits<7> DCMX; 995*9880d681SAndroid Build Coastguard Worker bits<6> XB; 996*9880d681SAndroid Build Coastguard Worker 997*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 998*9880d681SAndroid Build Coastguard Worker 999*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 1000*9880d681SAndroid Build Coastguard Worker let Inst{9-15} = DCMX; 1001*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 1002*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 1003*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 1004*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1005*9880d681SAndroid Build Coastguard Worker} 1006*9880d681SAndroid Build Coastguard Worker 1007*9880d681SAndroid Build Coastguard Workerclass XX2_RD6_DCMX7_RS6<bits<6> opcode, bits<4> xo1, bits<3> xo2, 1008*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin, 1009*9880d681SAndroid Build Coastguard Worker list<dag> pattern> 1010*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1011*9880d681SAndroid Build Coastguard Worker bits<6> XT; 1012*9880d681SAndroid Build Coastguard Worker bits<7> DCMX; 1013*9880d681SAndroid Build Coastguard Worker bits<6> XB; 1014*9880d681SAndroid Build Coastguard Worker 1015*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1016*9880d681SAndroid Build Coastguard Worker 1017*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 1018*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = DCMX{4-0}; 1019*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 1020*9880d681SAndroid Build Coastguard Worker let Inst{21-24} = xo1; 1021*9880d681SAndroid Build Coastguard Worker let Inst{25} = DCMX{5}; 1022*9880d681SAndroid Build Coastguard Worker let Inst{26-28} = xo2; 1023*9880d681SAndroid Build Coastguard Worker let Inst{29} = DCMX{6}; 1024*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 1025*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 1026*9880d681SAndroid Build Coastguard Worker} 1027*9880d681SAndroid Build Coastguard Worker 1028*9880d681SAndroid Build Coastguard Workerclass XX3Form<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr, 1029*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1030*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1031*9880d681SAndroid Build Coastguard Worker bits<6> XT; 1032*9880d681SAndroid Build Coastguard Worker bits<6> XA; 1033*9880d681SAndroid Build Coastguard Worker bits<6> XB; 1034*9880d681SAndroid Build Coastguard Worker 1035*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1036*9880d681SAndroid Build Coastguard Worker 1037*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 1038*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = XA{4-0}; 1039*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 1040*9880d681SAndroid Build Coastguard Worker let Inst{21-28} = xo; 1041*9880d681SAndroid Build Coastguard Worker let Inst{29} = XA{5}; 1042*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 1043*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 1044*9880d681SAndroid Build Coastguard Worker} 1045*9880d681SAndroid Build Coastguard Worker 1046*9880d681SAndroid Build Coastguard Workerclass XX3Form_1<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr, 1047*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1048*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1049*9880d681SAndroid Build Coastguard Worker bits<3> CR; 1050*9880d681SAndroid Build Coastguard Worker bits<6> XA; 1051*9880d681SAndroid Build Coastguard Worker bits<6> XB; 1052*9880d681SAndroid Build Coastguard Worker 1053*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1054*9880d681SAndroid Build Coastguard Worker 1055*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = CR; 1056*9880d681SAndroid Build Coastguard Worker let Inst{9-10} = 0; 1057*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = XA{4-0}; 1058*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 1059*9880d681SAndroid Build Coastguard Worker let Inst{21-28} = xo; 1060*9880d681SAndroid Build Coastguard Worker let Inst{29} = XA{5}; 1061*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 1062*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1063*9880d681SAndroid Build Coastguard Worker} 1064*9880d681SAndroid Build Coastguard Worker 1065*9880d681SAndroid Build Coastguard Workerclass XX3Form_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr, 1066*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1067*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1068*9880d681SAndroid Build Coastguard Worker bits<6> XT; 1069*9880d681SAndroid Build Coastguard Worker bits<6> XA; 1070*9880d681SAndroid Build Coastguard Worker bits<6> XB; 1071*9880d681SAndroid Build Coastguard Worker bits<2> D; 1072*9880d681SAndroid Build Coastguard Worker 1073*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1074*9880d681SAndroid Build Coastguard Worker 1075*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 1076*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = XA{4-0}; 1077*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 1078*9880d681SAndroid Build Coastguard Worker let Inst{21} = 0; 1079*9880d681SAndroid Build Coastguard Worker let Inst{22-23} = D; 1080*9880d681SAndroid Build Coastguard Worker let Inst{24-28} = xo; 1081*9880d681SAndroid Build Coastguard Worker let Inst{29} = XA{5}; 1082*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 1083*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 1084*9880d681SAndroid Build Coastguard Worker} 1085*9880d681SAndroid Build Coastguard Worker 1086*9880d681SAndroid Build Coastguard Workerclass XX3Form_Rc<bits<6> opcode, bits<7> xo, dag OOL, dag IOL, string asmstr, 1087*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1088*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1089*9880d681SAndroid Build Coastguard Worker bits<6> XT; 1090*9880d681SAndroid Build Coastguard Worker bits<6> XA; 1091*9880d681SAndroid Build Coastguard Worker bits<6> XB; 1092*9880d681SAndroid Build Coastguard Worker 1093*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1094*9880d681SAndroid Build Coastguard Worker 1095*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1096*9880d681SAndroid Build Coastguard Worker 1097*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 1098*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = XA{4-0}; 1099*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 1100*9880d681SAndroid Build Coastguard Worker let Inst{21} = RC; 1101*9880d681SAndroid Build Coastguard Worker let Inst{22-28} = xo; 1102*9880d681SAndroid Build Coastguard Worker let Inst{29} = XA{5}; 1103*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 1104*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 1105*9880d681SAndroid Build Coastguard Worker} 1106*9880d681SAndroid Build Coastguard Worker 1107*9880d681SAndroid Build Coastguard Workerclass XX4Form<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr, 1108*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1109*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1110*9880d681SAndroid Build Coastguard Worker bits<6> XT; 1111*9880d681SAndroid Build Coastguard Worker bits<6> XA; 1112*9880d681SAndroid Build Coastguard Worker bits<6> XB; 1113*9880d681SAndroid Build Coastguard Worker bits<6> XC; 1114*9880d681SAndroid Build Coastguard Worker 1115*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1116*9880d681SAndroid Build Coastguard Worker 1117*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = XT{4-0}; 1118*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = XA{4-0}; 1119*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = XB{4-0}; 1120*9880d681SAndroid Build Coastguard Worker let Inst{21-25} = XC{4-0}; 1121*9880d681SAndroid Build Coastguard Worker let Inst{26-27} = xo; 1122*9880d681SAndroid Build Coastguard Worker let Inst{28} = XC{5}; 1123*9880d681SAndroid Build Coastguard Worker let Inst{29} = XA{5}; 1124*9880d681SAndroid Build Coastguard Worker let Inst{30} = XB{5}; 1125*9880d681SAndroid Build Coastguard Worker let Inst{31} = XT{5}; 1126*9880d681SAndroid Build Coastguard Worker} 1127*9880d681SAndroid Build Coastguard Worker 1128*9880d681SAndroid Build Coastguard Worker// DCB_Form - Form X instruction, used for dcb* instructions. 1129*9880d681SAndroid Build Coastguard Workerclass DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr, 1130*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1131*9880d681SAndroid Build Coastguard Worker : I<31, OOL, IOL, asmstr, itin> { 1132*9880d681SAndroid Build Coastguard Worker bits<5> A; 1133*9880d681SAndroid Build Coastguard Worker bits<5> B; 1134*9880d681SAndroid Build Coastguard Worker 1135*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1136*9880d681SAndroid Build Coastguard Worker 1137*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = immfield; 1138*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 1139*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = B; 1140*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1141*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1142*9880d681SAndroid Build Coastguard Worker} 1143*9880d681SAndroid Build Coastguard Worker 1144*9880d681SAndroid Build Coastguard Workerclass DCB_Form_hint<bits<10> xo, dag OOL, dag IOL, string asmstr, 1145*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1146*9880d681SAndroid Build Coastguard Worker : I<31, OOL, IOL, asmstr, itin> { 1147*9880d681SAndroid Build Coastguard Worker bits<5> TH; 1148*9880d681SAndroid Build Coastguard Worker bits<5> A; 1149*9880d681SAndroid Build Coastguard Worker bits<5> B; 1150*9880d681SAndroid Build Coastguard Worker 1151*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1152*9880d681SAndroid Build Coastguard Worker 1153*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = TH; 1154*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 1155*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = B; 1156*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1157*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1158*9880d681SAndroid Build Coastguard Worker} 1159*9880d681SAndroid Build Coastguard Worker 1160*9880d681SAndroid Build Coastguard Worker// DSS_Form - Form X instruction, used for altivec dss* instructions. 1161*9880d681SAndroid Build Coastguard Workerclass DSS_Form<bits<1> T, bits<10> xo, dag OOL, dag IOL, string asmstr, 1162*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1163*9880d681SAndroid Build Coastguard Worker : I<31, OOL, IOL, asmstr, itin> { 1164*9880d681SAndroid Build Coastguard Worker bits<2> STRM; 1165*9880d681SAndroid Build Coastguard Worker bits<5> A; 1166*9880d681SAndroid Build Coastguard Worker bits<5> B; 1167*9880d681SAndroid Build Coastguard Worker 1168*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1169*9880d681SAndroid Build Coastguard Worker 1170*9880d681SAndroid Build Coastguard Worker let Inst{6} = T; 1171*9880d681SAndroid Build Coastguard Worker let Inst{7-8} = 0; 1172*9880d681SAndroid Build Coastguard Worker let Inst{9-10} = STRM; 1173*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 1174*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = B; 1175*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1176*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1177*9880d681SAndroid Build Coastguard Worker} 1178*9880d681SAndroid Build Coastguard Worker 1179*9880d681SAndroid Build Coastguard Worker// 1.7.7 XL-Form 1180*9880d681SAndroid Build Coastguard Workerclass XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1181*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1182*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1183*9880d681SAndroid Build Coastguard Worker bits<5> CRD; 1184*9880d681SAndroid Build Coastguard Worker bits<5> CRA; 1185*9880d681SAndroid Build Coastguard Worker bits<5> CRB; 1186*9880d681SAndroid Build Coastguard Worker 1187*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1188*9880d681SAndroid Build Coastguard Worker 1189*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = CRD; 1190*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = CRA; 1191*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = CRB; 1192*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1193*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1194*9880d681SAndroid Build Coastguard Worker} 1195*9880d681SAndroid Build Coastguard Worker 1196*9880d681SAndroid Build Coastguard Workerclass XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1197*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1198*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1199*9880d681SAndroid Build Coastguard Worker bits<5> CRD; 1200*9880d681SAndroid Build Coastguard Worker 1201*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1202*9880d681SAndroid Build Coastguard Worker 1203*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = CRD; 1204*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = CRD; 1205*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = CRD; 1206*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1207*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1208*9880d681SAndroid Build Coastguard Worker} 1209*9880d681SAndroid Build Coastguard Worker 1210*9880d681SAndroid Build Coastguard Workerclass XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr, 1211*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1212*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1213*9880d681SAndroid Build Coastguard Worker bits<5> BO; 1214*9880d681SAndroid Build Coastguard Worker bits<5> BI; 1215*9880d681SAndroid Build Coastguard Worker bits<2> BH; 1216*9880d681SAndroid Build Coastguard Worker 1217*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1218*9880d681SAndroid Build Coastguard Worker 1219*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = BO; 1220*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = BI; 1221*9880d681SAndroid Build Coastguard Worker let Inst{16-18} = 0; 1222*9880d681SAndroid Build Coastguard Worker let Inst{19-20} = BH; 1223*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1224*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 1225*9880d681SAndroid Build Coastguard Worker} 1226*9880d681SAndroid Build Coastguard Worker 1227*9880d681SAndroid Build Coastguard Workerclass XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk, 1228*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern> 1229*9880d681SAndroid Build Coastguard Worker : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> { 1230*9880d681SAndroid Build Coastguard Worker bits<7> BIBO; // 2 bits of BI and 5 bits of BO. 1231*9880d681SAndroid Build Coastguard Worker bits<3> CR; 1232*9880d681SAndroid Build Coastguard Worker 1233*9880d681SAndroid Build Coastguard Worker let BO = BIBO{4-0}; 1234*9880d681SAndroid Build Coastguard Worker let BI{0-1} = BIBO{5-6}; 1235*9880d681SAndroid Build Coastguard Worker let BI{2-4} = CR{0-2}; 1236*9880d681SAndroid Build Coastguard Worker let BH = 0; 1237*9880d681SAndroid Build Coastguard Worker} 1238*9880d681SAndroid Build Coastguard Worker 1239*9880d681SAndroid Build Coastguard Workerclass XLForm_2_br2<bits<6> opcode, bits<10> xo, bits<5> bo, bit lk, 1240*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern> 1241*9880d681SAndroid Build Coastguard Worker : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> { 1242*9880d681SAndroid Build Coastguard Worker let BO = bo; 1243*9880d681SAndroid Build Coastguard Worker let BH = 0; 1244*9880d681SAndroid Build Coastguard Worker} 1245*9880d681SAndroid Build Coastguard Worker 1246*9880d681SAndroid Build Coastguard Workerclass XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk, 1247*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern> 1248*9880d681SAndroid Build Coastguard Worker : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> { 1249*9880d681SAndroid Build Coastguard Worker let BO = bo; 1250*9880d681SAndroid Build Coastguard Worker let BI = bi; 1251*9880d681SAndroid Build Coastguard Worker let BH = 0; 1252*9880d681SAndroid Build Coastguard Worker} 1253*9880d681SAndroid Build Coastguard Worker 1254*9880d681SAndroid Build Coastguard Workerclass XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1255*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 1256*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1257*9880d681SAndroid Build Coastguard Worker bits<3> BF; 1258*9880d681SAndroid Build Coastguard Worker bits<3> BFA; 1259*9880d681SAndroid Build Coastguard Worker 1260*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 1261*9880d681SAndroid Build Coastguard Worker let Inst{9-10} = 0; 1262*9880d681SAndroid Build Coastguard Worker let Inst{11-13} = BFA; 1263*9880d681SAndroid Build Coastguard Worker let Inst{14-15} = 0; 1264*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = 0; 1265*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1266*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1267*9880d681SAndroid Build Coastguard Worker} 1268*9880d681SAndroid Build Coastguard Worker 1269*9880d681SAndroid Build Coastguard Workerclass XLForm_4<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1270*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 1271*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1272*9880d681SAndroid Build Coastguard Worker bits<3> BF; 1273*9880d681SAndroid Build Coastguard Worker bit W; 1274*9880d681SAndroid Build Coastguard Worker bits<4> U; 1275*9880d681SAndroid Build Coastguard Worker 1276*9880d681SAndroid Build Coastguard Worker bit RC = 0; 1277*9880d681SAndroid Build Coastguard Worker 1278*9880d681SAndroid Build Coastguard Worker let Inst{6-8} = BF; 1279*9880d681SAndroid Build Coastguard Worker let Inst{9-10} = 0; 1280*9880d681SAndroid Build Coastguard Worker let Inst{11-14} = 0; 1281*9880d681SAndroid Build Coastguard Worker let Inst{15} = W; 1282*9880d681SAndroid Build Coastguard Worker let Inst{16-19} = U; 1283*9880d681SAndroid Build Coastguard Worker let Inst{20} = 0; 1284*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1285*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1286*9880d681SAndroid Build Coastguard Worker} 1287*9880d681SAndroid Build Coastguard Worker 1288*9880d681SAndroid Build Coastguard Workerclass XLForm_S<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1289*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1290*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1291*9880d681SAndroid Build Coastguard Worker bits<1> S; 1292*9880d681SAndroid Build Coastguard Worker 1293*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1294*9880d681SAndroid Build Coastguard Worker 1295*9880d681SAndroid Build Coastguard Worker let Inst{6-19} = 0; 1296*9880d681SAndroid Build Coastguard Worker let Inst{20} = S; 1297*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1298*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1299*9880d681SAndroid Build Coastguard Worker} 1300*9880d681SAndroid Build Coastguard Worker 1301*9880d681SAndroid Build Coastguard Workerclass XLForm_2_and_DSForm_1<bits<6> opcode1, bits<10> xo1, bit lk, 1302*9880d681SAndroid Build Coastguard Worker bits<6> opcode2, bits<2> xo2, 1303*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, 1304*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1305*9880d681SAndroid Build Coastguard Worker : I2<opcode1, opcode2, OOL, IOL, asmstr, itin> { 1306*9880d681SAndroid Build Coastguard Worker bits<5> BO; 1307*9880d681SAndroid Build Coastguard Worker bits<5> BI; 1308*9880d681SAndroid Build Coastguard Worker bits<2> BH; 1309*9880d681SAndroid Build Coastguard Worker 1310*9880d681SAndroid Build Coastguard Worker bits<5> RST; 1311*9880d681SAndroid Build Coastguard Worker bits<19> DS_RA; 1312*9880d681SAndroid Build Coastguard Worker 1313*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1314*9880d681SAndroid Build Coastguard Worker 1315*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = BO; 1316*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = BI; 1317*9880d681SAndroid Build Coastguard Worker let Inst{16-18} = 0; 1318*9880d681SAndroid Build Coastguard Worker let Inst{19-20} = BH; 1319*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo1; 1320*9880d681SAndroid Build Coastguard Worker let Inst{31} = lk; 1321*9880d681SAndroid Build Coastguard Worker 1322*9880d681SAndroid Build Coastguard Worker let Inst{38-42} = RST; 1323*9880d681SAndroid Build Coastguard Worker let Inst{43-47} = DS_RA{18-14}; // Register # 1324*9880d681SAndroid Build Coastguard Worker let Inst{48-61} = DS_RA{13-0}; // Displacement. 1325*9880d681SAndroid Build Coastguard Worker let Inst{62-63} = xo2; 1326*9880d681SAndroid Build Coastguard Worker} 1327*9880d681SAndroid Build Coastguard Worker 1328*9880d681SAndroid Build Coastguard Workerclass XLForm_2_ext_and_DSForm_1<bits<6> opcode1, bits<10> xo1, 1329*9880d681SAndroid Build Coastguard Worker bits<5> bo, bits<5> bi, bit lk, 1330*9880d681SAndroid Build Coastguard Worker bits<6> opcode2, bits<2> xo2, 1331*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, 1332*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1333*9880d681SAndroid Build Coastguard Worker : XLForm_2_and_DSForm_1<opcode1, xo1, lk, opcode2, xo2, 1334*9880d681SAndroid Build Coastguard Worker OOL, IOL, asmstr, itin, pattern> { 1335*9880d681SAndroid Build Coastguard Worker let BO = bo; 1336*9880d681SAndroid Build Coastguard Worker let BI = bi; 1337*9880d681SAndroid Build Coastguard Worker let BH = 0; 1338*9880d681SAndroid Build Coastguard Worker} 1339*9880d681SAndroid Build Coastguard Worker 1340*9880d681SAndroid Build Coastguard Worker// 1.7.8 XFX-Form 1341*9880d681SAndroid Build Coastguard Workerclass XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1342*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 1343*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1344*9880d681SAndroid Build Coastguard Worker bits<5> RT; 1345*9880d681SAndroid Build Coastguard Worker bits<10> SPR; 1346*9880d681SAndroid Build Coastguard Worker 1347*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RT; 1348*9880d681SAndroid Build Coastguard Worker let Inst{11} = SPR{4}; 1349*9880d681SAndroid Build Coastguard Worker let Inst{12} = SPR{3}; 1350*9880d681SAndroid Build Coastguard Worker let Inst{13} = SPR{2}; 1351*9880d681SAndroid Build Coastguard Worker let Inst{14} = SPR{1}; 1352*9880d681SAndroid Build Coastguard Worker let Inst{15} = SPR{0}; 1353*9880d681SAndroid Build Coastguard Worker let Inst{16} = SPR{9}; 1354*9880d681SAndroid Build Coastguard Worker let Inst{17} = SPR{8}; 1355*9880d681SAndroid Build Coastguard Worker let Inst{18} = SPR{7}; 1356*9880d681SAndroid Build Coastguard Worker let Inst{19} = SPR{6}; 1357*9880d681SAndroid Build Coastguard Worker let Inst{20} = SPR{5}; 1358*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1359*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1360*9880d681SAndroid Build Coastguard Worker} 1361*9880d681SAndroid Build Coastguard Worker 1362*9880d681SAndroid Build Coastguard Workerclass XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr, 1363*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin> 1364*9880d681SAndroid Build Coastguard Worker : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> { 1365*9880d681SAndroid Build Coastguard Worker let SPR = spr; 1366*9880d681SAndroid Build Coastguard Worker} 1367*9880d681SAndroid Build Coastguard Worker 1368*9880d681SAndroid Build Coastguard Workerclass XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1369*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 1370*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1371*9880d681SAndroid Build Coastguard Worker bits<5> RT; 1372*9880d681SAndroid Build Coastguard Worker 1373*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RT; 1374*9880d681SAndroid Build Coastguard Worker let Inst{11-20} = 0; 1375*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1376*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1377*9880d681SAndroid Build Coastguard Worker} 1378*9880d681SAndroid Build Coastguard Worker 1379*9880d681SAndroid Build Coastguard Workerclass XFXForm_3p<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1380*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1381*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1382*9880d681SAndroid Build Coastguard Worker bits<5> RT; 1383*9880d681SAndroid Build Coastguard Worker bits<10> Entry; 1384*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1385*9880d681SAndroid Build Coastguard Worker 1386*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RT; 1387*9880d681SAndroid Build Coastguard Worker let Inst{11-20} = Entry; 1388*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1389*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1390*9880d681SAndroid Build Coastguard Worker} 1391*9880d681SAndroid Build Coastguard Worker 1392*9880d681SAndroid Build Coastguard Workerclass XFXForm_5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1393*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 1394*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1395*9880d681SAndroid Build Coastguard Worker bits<8> FXM; 1396*9880d681SAndroid Build Coastguard Worker bits<5> rS; 1397*9880d681SAndroid Build Coastguard Worker 1398*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = rS; 1399*9880d681SAndroid Build Coastguard Worker let Inst{11} = 0; 1400*9880d681SAndroid Build Coastguard Worker let Inst{12-19} = FXM; 1401*9880d681SAndroid Build Coastguard Worker let Inst{20} = 0; 1402*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1403*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1404*9880d681SAndroid Build Coastguard Worker} 1405*9880d681SAndroid Build Coastguard Worker 1406*9880d681SAndroid Build Coastguard Workerclass XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1407*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 1408*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1409*9880d681SAndroid Build Coastguard Worker bits<5> ST; 1410*9880d681SAndroid Build Coastguard Worker bits<8> FXM; 1411*9880d681SAndroid Build Coastguard Worker 1412*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = ST; 1413*9880d681SAndroid Build Coastguard Worker let Inst{11} = 1; 1414*9880d681SAndroid Build Coastguard Worker let Inst{12-19} = FXM; 1415*9880d681SAndroid Build Coastguard Worker let Inst{20} = 0; 1416*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1417*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1418*9880d681SAndroid Build Coastguard Worker} 1419*9880d681SAndroid Build Coastguard Worker 1420*9880d681SAndroid Build Coastguard Workerclass XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1421*9880d681SAndroid Build Coastguard Worker InstrItinClass itin> 1422*9880d681SAndroid Build Coastguard Worker : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>; 1423*9880d681SAndroid Build Coastguard Worker 1424*9880d681SAndroid Build Coastguard Workerclass XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr, 1425*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin> 1426*9880d681SAndroid Build Coastguard Worker : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> { 1427*9880d681SAndroid Build Coastguard Worker let SPR = spr; 1428*9880d681SAndroid Build Coastguard Worker} 1429*9880d681SAndroid Build Coastguard Worker 1430*9880d681SAndroid Build Coastguard Worker// XFL-Form - MTFSF 1431*9880d681SAndroid Build Coastguard Worker// This is probably 1.7.9, but I don't have the reference that uses this 1432*9880d681SAndroid Build Coastguard Worker// numbering scheme... 1433*9880d681SAndroid Build Coastguard Workerclass XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1434*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag>pattern> 1435*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1436*9880d681SAndroid Build Coastguard Worker bits<8> FM; 1437*9880d681SAndroid Build Coastguard Worker bits<5> rT; 1438*9880d681SAndroid Build Coastguard Worker 1439*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1440*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1441*9880d681SAndroid Build Coastguard Worker 1442*9880d681SAndroid Build Coastguard Worker let Inst{6} = 0; 1443*9880d681SAndroid Build Coastguard Worker let Inst{7-14} = FM; 1444*9880d681SAndroid Build Coastguard Worker let Inst{15} = 0; 1445*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = rT; 1446*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1447*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1448*9880d681SAndroid Build Coastguard Worker} 1449*9880d681SAndroid Build Coastguard Worker 1450*9880d681SAndroid Build Coastguard Workerclass XFLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr, 1451*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag>pattern> 1452*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1453*9880d681SAndroid Build Coastguard Worker bit L; 1454*9880d681SAndroid Build Coastguard Worker bits<8> FLM; 1455*9880d681SAndroid Build Coastguard Worker bit W; 1456*9880d681SAndroid Build Coastguard Worker bits<5> FRB; 1457*9880d681SAndroid Build Coastguard Worker 1458*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1459*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1460*9880d681SAndroid Build Coastguard Worker 1461*9880d681SAndroid Build Coastguard Worker let Inst{6} = L; 1462*9880d681SAndroid Build Coastguard Worker let Inst{7-14} = FLM; 1463*9880d681SAndroid Build Coastguard Worker let Inst{15} = W; 1464*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = FRB; 1465*9880d681SAndroid Build Coastguard Worker let Inst{21-30} = xo; 1466*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1467*9880d681SAndroid Build Coastguard Worker} 1468*9880d681SAndroid Build Coastguard Worker 1469*9880d681SAndroid Build Coastguard Worker// 1.7.10 XS-Form - SRADI. 1470*9880d681SAndroid Build Coastguard Workerclass XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr, 1471*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1472*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1473*9880d681SAndroid Build Coastguard Worker bits<5> A; 1474*9880d681SAndroid Build Coastguard Worker bits<5> RS; 1475*9880d681SAndroid Build Coastguard Worker bits<6> SH; 1476*9880d681SAndroid Build Coastguard Worker 1477*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1478*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1479*9880d681SAndroid Build Coastguard Worker 1480*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RS; 1481*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = A; 1482*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = SH{4,3,2,1,0}; 1483*9880d681SAndroid Build Coastguard Worker let Inst{21-29} = xo; 1484*9880d681SAndroid Build Coastguard Worker let Inst{30} = SH{5}; 1485*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1486*9880d681SAndroid Build Coastguard Worker} 1487*9880d681SAndroid Build Coastguard Worker 1488*9880d681SAndroid Build Coastguard Worker// 1.7.11 XO-Form 1489*9880d681SAndroid Build Coastguard Workerclass XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr, 1490*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1491*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1492*9880d681SAndroid Build Coastguard Worker bits<5> RT; 1493*9880d681SAndroid Build Coastguard Worker bits<5> RA; 1494*9880d681SAndroid Build Coastguard Worker bits<5> RB; 1495*9880d681SAndroid Build Coastguard Worker 1496*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1497*9880d681SAndroid Build Coastguard Worker 1498*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1499*9880d681SAndroid Build Coastguard Worker 1500*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RT; 1501*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 1502*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 1503*9880d681SAndroid Build Coastguard Worker let Inst{21} = oe; 1504*9880d681SAndroid Build Coastguard Worker let Inst{22-30} = xo; 1505*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1506*9880d681SAndroid Build Coastguard Worker} 1507*9880d681SAndroid Build Coastguard Worker 1508*9880d681SAndroid Build Coastguard Workerclass XOForm_3<bits<6> opcode, bits<9> xo, bit oe, 1509*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern> 1510*9880d681SAndroid Build Coastguard Worker : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> { 1511*9880d681SAndroid Build Coastguard Worker let RB = 0; 1512*9880d681SAndroid Build Coastguard Worker} 1513*9880d681SAndroid Build Coastguard Worker 1514*9880d681SAndroid Build Coastguard Worker// 1.7.12 A-Form 1515*9880d681SAndroid Build Coastguard Workerclass AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr, 1516*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1517*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1518*9880d681SAndroid Build Coastguard Worker bits<5> FRT; 1519*9880d681SAndroid Build Coastguard Worker bits<5> FRA; 1520*9880d681SAndroid Build Coastguard Worker bits<5> FRC; 1521*9880d681SAndroid Build Coastguard Worker bits<5> FRB; 1522*9880d681SAndroid Build Coastguard Worker 1523*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1524*9880d681SAndroid Build Coastguard Worker 1525*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1526*9880d681SAndroid Build Coastguard Worker 1527*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = FRT; 1528*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = FRA; 1529*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = FRB; 1530*9880d681SAndroid Build Coastguard Worker let Inst{21-25} = FRC; 1531*9880d681SAndroid Build Coastguard Worker let Inst{26-30} = xo; 1532*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1533*9880d681SAndroid Build Coastguard Worker} 1534*9880d681SAndroid Build Coastguard Worker 1535*9880d681SAndroid Build Coastguard Workerclass AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr, 1536*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1537*9880d681SAndroid Build Coastguard Worker : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 1538*9880d681SAndroid Build Coastguard Worker let FRC = 0; 1539*9880d681SAndroid Build Coastguard Worker} 1540*9880d681SAndroid Build Coastguard Worker 1541*9880d681SAndroid Build Coastguard Workerclass AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr, 1542*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1543*9880d681SAndroid Build Coastguard Worker : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 1544*9880d681SAndroid Build Coastguard Worker let FRB = 0; 1545*9880d681SAndroid Build Coastguard Worker} 1546*9880d681SAndroid Build Coastguard Worker 1547*9880d681SAndroid Build Coastguard Workerclass AForm_4<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr, 1548*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1549*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1550*9880d681SAndroid Build Coastguard Worker bits<5> RT; 1551*9880d681SAndroid Build Coastguard Worker bits<5> RA; 1552*9880d681SAndroid Build Coastguard Worker bits<5> RB; 1553*9880d681SAndroid Build Coastguard Worker bits<5> COND; 1554*9880d681SAndroid Build Coastguard Worker 1555*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1556*9880d681SAndroid Build Coastguard Worker 1557*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RT; 1558*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 1559*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 1560*9880d681SAndroid Build Coastguard Worker let Inst{21-25} = COND; 1561*9880d681SAndroid Build Coastguard Worker let Inst{26-30} = xo; 1562*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0; 1563*9880d681SAndroid Build Coastguard Worker} 1564*9880d681SAndroid Build Coastguard Worker 1565*9880d681SAndroid Build Coastguard Worker// Used for QPX 1566*9880d681SAndroid Build Coastguard Workerclass AForm_4a<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr, 1567*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1568*9880d681SAndroid Build Coastguard Worker : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 1569*9880d681SAndroid Build Coastguard Worker let FRA = 0; 1570*9880d681SAndroid Build Coastguard Worker let FRC = 0; 1571*9880d681SAndroid Build Coastguard Worker} 1572*9880d681SAndroid Build Coastguard Worker 1573*9880d681SAndroid Build Coastguard Worker// 1.7.13 M-Form 1574*9880d681SAndroid Build Coastguard Workerclass MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr, 1575*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1576*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1577*9880d681SAndroid Build Coastguard Worker bits<5> RA; 1578*9880d681SAndroid Build Coastguard Worker bits<5> RS; 1579*9880d681SAndroid Build Coastguard Worker bits<5> RB; 1580*9880d681SAndroid Build Coastguard Worker bits<5> MB; 1581*9880d681SAndroid Build Coastguard Worker bits<5> ME; 1582*9880d681SAndroid Build Coastguard Worker 1583*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1584*9880d681SAndroid Build Coastguard Worker 1585*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1586*9880d681SAndroid Build Coastguard Worker 1587*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RS; 1588*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 1589*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 1590*9880d681SAndroid Build Coastguard Worker let Inst{21-25} = MB; 1591*9880d681SAndroid Build Coastguard Worker let Inst{26-30} = ME; 1592*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1593*9880d681SAndroid Build Coastguard Worker} 1594*9880d681SAndroid Build Coastguard Worker 1595*9880d681SAndroid Build Coastguard Workerclass MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr, 1596*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1597*9880d681SAndroid Build Coastguard Worker : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> { 1598*9880d681SAndroid Build Coastguard Worker} 1599*9880d681SAndroid Build Coastguard Worker 1600*9880d681SAndroid Build Coastguard Worker// 1.7.14 MD-Form 1601*9880d681SAndroid Build Coastguard Workerclass MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr, 1602*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1603*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1604*9880d681SAndroid Build Coastguard Worker bits<5> RA; 1605*9880d681SAndroid Build Coastguard Worker bits<5> RS; 1606*9880d681SAndroid Build Coastguard Worker bits<6> SH; 1607*9880d681SAndroid Build Coastguard Worker bits<6> MBE; 1608*9880d681SAndroid Build Coastguard Worker 1609*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1610*9880d681SAndroid Build Coastguard Worker 1611*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1612*9880d681SAndroid Build Coastguard Worker 1613*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RS; 1614*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 1615*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = SH{4,3,2,1,0}; 1616*9880d681SAndroid Build Coastguard Worker let Inst{21-26} = MBE{4,3,2,1,0,5}; 1617*9880d681SAndroid Build Coastguard Worker let Inst{27-29} = xo; 1618*9880d681SAndroid Build Coastguard Worker let Inst{30} = SH{5}; 1619*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1620*9880d681SAndroid Build Coastguard Worker} 1621*9880d681SAndroid Build Coastguard Worker 1622*9880d681SAndroid Build Coastguard Workerclass MDSForm_1<bits<6> opcode, bits<4> xo, dag OOL, dag IOL, string asmstr, 1623*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1624*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1625*9880d681SAndroid Build Coastguard Worker bits<5> RA; 1626*9880d681SAndroid Build Coastguard Worker bits<5> RS; 1627*9880d681SAndroid Build Coastguard Worker bits<5> RB; 1628*9880d681SAndroid Build Coastguard Worker bits<6> MBE; 1629*9880d681SAndroid Build Coastguard Worker 1630*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1631*9880d681SAndroid Build Coastguard Worker 1632*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1633*9880d681SAndroid Build Coastguard Worker 1634*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RS; 1635*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = RA; 1636*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = RB; 1637*9880d681SAndroid Build Coastguard Worker let Inst{21-26} = MBE{4,3,2,1,0,5}; 1638*9880d681SAndroid Build Coastguard Worker let Inst{27-30} = xo; 1639*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1640*9880d681SAndroid Build Coastguard Worker} 1641*9880d681SAndroid Build Coastguard Worker 1642*9880d681SAndroid Build Coastguard Worker 1643*9880d681SAndroid Build Coastguard Worker// E-1 VA-Form 1644*9880d681SAndroid Build Coastguard Worker 1645*9880d681SAndroid Build Coastguard Worker// VAForm_1 - DACB ordering. 1646*9880d681SAndroid Build Coastguard Workerclass VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr, 1647*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1648*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1649*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1650*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1651*9880d681SAndroid Build Coastguard Worker bits<5> VC; 1652*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1653*9880d681SAndroid Build Coastguard Worker 1654*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1655*9880d681SAndroid Build Coastguard Worker 1656*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1657*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1658*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1659*9880d681SAndroid Build Coastguard Worker let Inst{21-25} = VC; 1660*9880d681SAndroid Build Coastguard Worker let Inst{26-31} = xo; 1661*9880d681SAndroid Build Coastguard Worker} 1662*9880d681SAndroid Build Coastguard Worker 1663*9880d681SAndroid Build Coastguard Worker// VAForm_1a - DABC ordering. 1664*9880d681SAndroid Build Coastguard Workerclass VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr, 1665*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1666*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1667*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1668*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1669*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1670*9880d681SAndroid Build Coastguard Worker bits<5> VC; 1671*9880d681SAndroid Build Coastguard Worker 1672*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1673*9880d681SAndroid Build Coastguard Worker 1674*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1675*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1676*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1677*9880d681SAndroid Build Coastguard Worker let Inst{21-25} = VC; 1678*9880d681SAndroid Build Coastguard Worker let Inst{26-31} = xo; 1679*9880d681SAndroid Build Coastguard Worker} 1680*9880d681SAndroid Build Coastguard Worker 1681*9880d681SAndroid Build Coastguard Workerclass VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr, 1682*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1683*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1684*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1685*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1686*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1687*9880d681SAndroid Build Coastguard Worker bits<4> SH; 1688*9880d681SAndroid Build Coastguard Worker 1689*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1690*9880d681SAndroid Build Coastguard Worker 1691*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1692*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1693*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1694*9880d681SAndroid Build Coastguard Worker let Inst{21} = 0; 1695*9880d681SAndroid Build Coastguard Worker let Inst{22-25} = SH; 1696*9880d681SAndroid Build Coastguard Worker let Inst{26-31} = xo; 1697*9880d681SAndroid Build Coastguard Worker} 1698*9880d681SAndroid Build Coastguard Worker 1699*9880d681SAndroid Build Coastguard Worker// E-2 VX-Form 1700*9880d681SAndroid Build Coastguard Workerclass VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr, 1701*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1702*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1703*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1704*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1705*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1706*9880d681SAndroid Build Coastguard Worker 1707*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1708*9880d681SAndroid Build Coastguard Worker 1709*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1710*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1711*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1712*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1713*9880d681SAndroid Build Coastguard Worker} 1714*9880d681SAndroid Build Coastguard Worker 1715*9880d681SAndroid Build Coastguard Workerclass VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr, 1716*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1717*9880d681SAndroid Build Coastguard Worker : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> { 1718*9880d681SAndroid Build Coastguard Worker let VA = VD; 1719*9880d681SAndroid Build Coastguard Worker let VB = VD; 1720*9880d681SAndroid Build Coastguard Worker} 1721*9880d681SAndroid Build Coastguard Worker 1722*9880d681SAndroid Build Coastguard Worker 1723*9880d681SAndroid Build Coastguard Workerclass VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr, 1724*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1725*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1726*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1727*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1728*9880d681SAndroid Build Coastguard Worker 1729*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1730*9880d681SAndroid Build Coastguard Worker 1731*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1732*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = 0; 1733*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1734*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1735*9880d681SAndroid Build Coastguard Worker} 1736*9880d681SAndroid Build Coastguard Worker 1737*9880d681SAndroid Build Coastguard Workerclass VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr, 1738*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1739*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1740*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1741*9880d681SAndroid Build Coastguard Worker bits<5> IMM; 1742*9880d681SAndroid Build Coastguard Worker 1743*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1744*9880d681SAndroid Build Coastguard Worker 1745*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1746*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = IMM; 1747*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = 0; 1748*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1749*9880d681SAndroid Build Coastguard Worker} 1750*9880d681SAndroid Build Coastguard Worker 1751*9880d681SAndroid Build Coastguard Worker/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr. 1752*9880d681SAndroid Build Coastguard Workerclass VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr, 1753*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1754*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1755*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1756*9880d681SAndroid Build Coastguard Worker 1757*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1758*9880d681SAndroid Build Coastguard Worker 1759*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1760*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = 0; 1761*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = 0; 1762*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1763*9880d681SAndroid Build Coastguard Worker} 1764*9880d681SAndroid Build Coastguard Worker 1765*9880d681SAndroid Build Coastguard Worker/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr. 1766*9880d681SAndroid Build Coastguard Workerclass VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr, 1767*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1768*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1769*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1770*9880d681SAndroid Build Coastguard Worker 1771*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1772*9880d681SAndroid Build Coastguard Worker 1773*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = 0; 1774*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = 0; 1775*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1776*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1777*9880d681SAndroid Build Coastguard Worker} 1778*9880d681SAndroid Build Coastguard Worker 1779*9880d681SAndroid Build Coastguard Worker// e.g. [PO VRT EO VRB XO] 1780*9880d681SAndroid Build Coastguard Workerclass VXForm_RD5_XO5_RS5<bits<11> xo, bits<5> eo, dag OOL, dag IOL, 1781*9880d681SAndroid Build Coastguard Worker string asmstr, InstrItinClass itin, list<dag> pattern> 1782*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1783*9880d681SAndroid Build Coastguard Worker bits<5> RD; 1784*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1785*9880d681SAndroid Build Coastguard Worker 1786*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1787*9880d681SAndroid Build Coastguard Worker 1788*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = RD; 1789*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = eo; 1790*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1791*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1792*9880d681SAndroid Build Coastguard Worker} 1793*9880d681SAndroid Build Coastguard Worker 1794*9880d681SAndroid Build Coastguard Worker/// VXForm_CR - VX crypto instructions with "VRT, VRA, ST, SIX" 1795*9880d681SAndroid Build Coastguard Workerclass VXForm_CR<bits<11> xo, dag OOL, dag IOL, string asmstr, 1796*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1797*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1798*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1799*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1800*9880d681SAndroid Build Coastguard Worker bits<1> ST; 1801*9880d681SAndroid Build Coastguard Worker bits<4> SIX; 1802*9880d681SAndroid Build Coastguard Worker 1803*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1804*9880d681SAndroid Build Coastguard Worker 1805*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1806*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1807*9880d681SAndroid Build Coastguard Worker let Inst{16} = ST; 1808*9880d681SAndroid Build Coastguard Worker let Inst{17-20} = SIX; 1809*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1810*9880d681SAndroid Build Coastguard Worker} 1811*9880d681SAndroid Build Coastguard Worker 1812*9880d681SAndroid Build Coastguard Worker/// VXForm_BX - VX crypto instructions with "VRT, VRA, 0 - like vsbox" 1813*9880d681SAndroid Build Coastguard Workerclass VXForm_BX<bits<11> xo, dag OOL, dag IOL, string asmstr, 1814*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1815*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1816*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1817*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1818*9880d681SAndroid Build Coastguard Worker 1819*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1820*9880d681SAndroid Build Coastguard Worker 1821*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1822*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1823*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = 0; 1824*9880d681SAndroid Build Coastguard Worker let Inst{21-31} = xo; 1825*9880d681SAndroid Build Coastguard Worker} 1826*9880d681SAndroid Build Coastguard Worker 1827*9880d681SAndroid Build Coastguard Worker// E-4 VXR-Form 1828*9880d681SAndroid Build Coastguard Workerclass VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr, 1829*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1830*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1831*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1832*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1833*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1834*9880d681SAndroid Build Coastguard Worker bit RC = 0; 1835*9880d681SAndroid Build Coastguard Worker 1836*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1837*9880d681SAndroid Build Coastguard Worker 1838*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1839*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1840*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1841*9880d681SAndroid Build Coastguard Worker let Inst{21} = RC; 1842*9880d681SAndroid Build Coastguard Worker let Inst{22-31} = xo; 1843*9880d681SAndroid Build Coastguard Worker} 1844*9880d681SAndroid Build Coastguard Worker 1845*9880d681SAndroid Build Coastguard Worker// VX-Form: [PO VRT EO VRB 1 PS XO] 1846*9880d681SAndroid Build Coastguard Workerclass VX_RD5_EO5_RS5_PS1_XO9<bits<5> eo, bits<9> xo, 1847*9880d681SAndroid Build Coastguard Worker dag OOL, dag IOL, string asmstr, 1848*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1849*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1850*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1851*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1852*9880d681SAndroid Build Coastguard Worker bit PS; 1853*9880d681SAndroid Build Coastguard Worker 1854*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1855*9880d681SAndroid Build Coastguard Worker 1856*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1857*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = eo; 1858*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1859*9880d681SAndroid Build Coastguard Worker let Inst{21} = 1; 1860*9880d681SAndroid Build Coastguard Worker let Inst{22} = PS; 1861*9880d681SAndroid Build Coastguard Worker let Inst{23-31} = xo; 1862*9880d681SAndroid Build Coastguard Worker} 1863*9880d681SAndroid Build Coastguard Worker 1864*9880d681SAndroid Build Coastguard Worker// VX-Form: [PO VRT VRA VRB 1 PS XO] or [PO VRT VRA VRB 1 / XO] 1865*9880d681SAndroid Build Coastguard Workerclass VX_RD5_RSp5_PS1_XO9<bits<9> xo, dag OOL, dag IOL, string asmstr, 1866*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1867*9880d681SAndroid Build Coastguard Worker : I<4, OOL, IOL, asmstr, itin> { 1868*9880d681SAndroid Build Coastguard Worker bits<5> VD; 1869*9880d681SAndroid Build Coastguard Worker bits<5> VA; 1870*9880d681SAndroid Build Coastguard Worker bits<5> VB; 1871*9880d681SAndroid Build Coastguard Worker bit PS; 1872*9880d681SAndroid Build Coastguard Worker 1873*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1874*9880d681SAndroid Build Coastguard Worker 1875*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = VD; 1876*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = VA; 1877*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = VB; 1878*9880d681SAndroid Build Coastguard Worker let Inst{21} = 1; 1879*9880d681SAndroid Build Coastguard Worker let Inst{22} = PS; 1880*9880d681SAndroid Build Coastguard Worker let Inst{23-31} = xo; 1881*9880d681SAndroid Build Coastguard Worker} 1882*9880d681SAndroid Build Coastguard Worker 1883*9880d681SAndroid Build Coastguard Worker// Z23-Form (used by QPX) 1884*9880d681SAndroid Build Coastguard Workerclass Z23Form_1<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr, 1885*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1886*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1887*9880d681SAndroid Build Coastguard Worker bits<5> FRT; 1888*9880d681SAndroid Build Coastguard Worker bits<5> FRA; 1889*9880d681SAndroid Build Coastguard Worker bits<5> FRB; 1890*9880d681SAndroid Build Coastguard Worker bits<2> idx; 1891*9880d681SAndroid Build Coastguard Worker 1892*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1893*9880d681SAndroid Build Coastguard Worker 1894*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1895*9880d681SAndroid Build Coastguard Worker 1896*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = FRT; 1897*9880d681SAndroid Build Coastguard Worker let Inst{11-15} = FRA; 1898*9880d681SAndroid Build Coastguard Worker let Inst{16-20} = FRB; 1899*9880d681SAndroid Build Coastguard Worker let Inst{21-22} = idx; 1900*9880d681SAndroid Build Coastguard Worker let Inst{23-30} = xo; 1901*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1902*9880d681SAndroid Build Coastguard Worker} 1903*9880d681SAndroid Build Coastguard Worker 1904*9880d681SAndroid Build Coastguard Workerclass Z23Form_2<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr, 1905*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1906*9880d681SAndroid Build Coastguard Worker : Z23Form_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> { 1907*9880d681SAndroid Build Coastguard Worker let FRB = 0; 1908*9880d681SAndroid Build Coastguard Worker} 1909*9880d681SAndroid Build Coastguard Worker 1910*9880d681SAndroid Build Coastguard Workerclass Z23Form_3<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr, 1911*9880d681SAndroid Build Coastguard Worker InstrItinClass itin, list<dag> pattern> 1912*9880d681SAndroid Build Coastguard Worker : I<opcode, OOL, IOL, asmstr, itin> { 1913*9880d681SAndroid Build Coastguard Worker bits<5> FRT; 1914*9880d681SAndroid Build Coastguard Worker bits<12> idx; 1915*9880d681SAndroid Build Coastguard Worker 1916*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1917*9880d681SAndroid Build Coastguard Worker 1918*9880d681SAndroid Build Coastguard Worker bit RC = 0; // set by isDOT 1919*9880d681SAndroid Build Coastguard Worker 1920*9880d681SAndroid Build Coastguard Worker let Inst{6-10} = FRT; 1921*9880d681SAndroid Build Coastguard Worker let Inst{11-22} = idx; 1922*9880d681SAndroid Build Coastguard Worker let Inst{23-30} = xo; 1923*9880d681SAndroid Build Coastguard Worker let Inst{31} = RC; 1924*9880d681SAndroid Build Coastguard Worker} 1925*9880d681SAndroid Build Coastguard Worker 1926*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 1927*9880d681SAndroid Build Coastguard Workerclass Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern> 1928*9880d681SAndroid Build Coastguard Worker : I<0, OOL, IOL, asmstr, NoItinerary> { 1929*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 1; 1930*9880d681SAndroid Build Coastguard Worker let PPC64 = 0; 1931*9880d681SAndroid Build Coastguard Worker let Pattern = pattern; 1932*9880d681SAndroid Build Coastguard Worker let Inst{31-0} = 0; 1933*9880d681SAndroid Build Coastguard Worker} 1934