1*9880d681SAndroid Build Coastguard Worker//===-- SIInstrFormats.td - SI Instruction Encodings ----------------------===// 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// SI Instruction format definitions. 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerclass InstSI <dag outs, dag ins, string asm = "", 15*9880d681SAndroid Build Coastguard Worker list<dag> pattern = []> : 16*9880d681SAndroid Build Coastguard Worker AMDGPUInst<outs, ins, asm, pattern>, PredicateControl { 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker field bits<1> VM_CNT = 0; 19*9880d681SAndroid Build Coastguard Worker field bits<1> EXP_CNT = 0; 20*9880d681SAndroid Build Coastguard Worker field bits<1> LGKM_CNT = 0; 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker field bits<1> SALU = 0; 23*9880d681SAndroid Build Coastguard Worker field bits<1> VALU = 0; 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker field bits<1> SOP1 = 0; 26*9880d681SAndroid Build Coastguard Worker field bits<1> SOP2 = 0; 27*9880d681SAndroid Build Coastguard Worker field bits<1> SOPC = 0; 28*9880d681SAndroid Build Coastguard Worker field bits<1> SOPK = 0; 29*9880d681SAndroid Build Coastguard Worker field bits<1> SOPP = 0; 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker field bits<1> VOP1 = 0; 32*9880d681SAndroid Build Coastguard Worker field bits<1> VOP2 = 0; 33*9880d681SAndroid Build Coastguard Worker field bits<1> VOP3 = 0; 34*9880d681SAndroid Build Coastguard Worker field bits<1> VOPC = 0; 35*9880d681SAndroid Build Coastguard Worker field bits<1> SDWA = 0; 36*9880d681SAndroid Build Coastguard Worker field bits<1> DPP = 0; 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker field bits<1> MUBUF = 0; 39*9880d681SAndroid Build Coastguard Worker field bits<1> MTBUF = 0; 40*9880d681SAndroid Build Coastguard Worker field bits<1> SMRD = 0; 41*9880d681SAndroid Build Coastguard Worker field bits<1> DS = 0; 42*9880d681SAndroid Build Coastguard Worker field bits<1> MIMG = 0; 43*9880d681SAndroid Build Coastguard Worker field bits<1> FLAT = 0; 44*9880d681SAndroid Build Coastguard Worker field bits<1> WQM = 0; 45*9880d681SAndroid Build Coastguard Worker field bits<1> VGPRSpill = 0; 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker // This bit tells the assembler to use the 32-bit encoding in case it 48*9880d681SAndroid Build Coastguard Worker // is unable to infer the encoding from the operands. 49*9880d681SAndroid Build Coastguard Worker field bits<1> VOPAsmPrefer32Bit = 0; 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker field bits<1> Gather4 = 0; 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker // These need to be kept in sync with the enum in SIInstrFlags. 54*9880d681SAndroid Build Coastguard Worker let TSFlags{0} = VM_CNT; 55*9880d681SAndroid Build Coastguard Worker let TSFlags{1} = EXP_CNT; 56*9880d681SAndroid Build Coastguard Worker let TSFlags{2} = LGKM_CNT; 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker let TSFlags{3} = SALU; 59*9880d681SAndroid Build Coastguard Worker let TSFlags{4} = VALU; 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker let TSFlags{5} = SOP1; 62*9880d681SAndroid Build Coastguard Worker let TSFlags{6} = SOP2; 63*9880d681SAndroid Build Coastguard Worker let TSFlags{7} = SOPC; 64*9880d681SAndroid Build Coastguard Worker let TSFlags{8} = SOPK; 65*9880d681SAndroid Build Coastguard Worker let TSFlags{9} = SOPP; 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker let TSFlags{10} = VOP1; 68*9880d681SAndroid Build Coastguard Worker let TSFlags{11} = VOP2; 69*9880d681SAndroid Build Coastguard Worker let TSFlags{12} = VOP3; 70*9880d681SAndroid Build Coastguard Worker let TSFlags{13} = VOPC; 71*9880d681SAndroid Build Coastguard Worker let TSFlags{14} = SDWA; 72*9880d681SAndroid Build Coastguard Worker let TSFlags{15} = DPP; 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker let TSFlags{16} = MUBUF; 75*9880d681SAndroid Build Coastguard Worker let TSFlags{17} = MTBUF; 76*9880d681SAndroid Build Coastguard Worker let TSFlags{18} = SMRD; 77*9880d681SAndroid Build Coastguard Worker let TSFlags{19} = DS; 78*9880d681SAndroid Build Coastguard Worker let TSFlags{20} = MIMG; 79*9880d681SAndroid Build Coastguard Worker let TSFlags{21} = FLAT; 80*9880d681SAndroid Build Coastguard Worker let TSFlags{22} = WQM; 81*9880d681SAndroid Build Coastguard Worker let TSFlags{23} = VGPRSpill; 82*9880d681SAndroid Build Coastguard Worker let TSFlags{24} = VOPAsmPrefer32Bit; 83*9880d681SAndroid Build Coastguard Worker let TSFlags{25} = Gather4; 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker let SchedRW = [Write32Bit]; 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker field bits<1> DisableSIDecoder = 0; 88*9880d681SAndroid Build Coastguard Worker field bits<1> DisableVIDecoder = 0; 89*9880d681SAndroid Build Coastguard Worker field bits<1> DisableDecoder = 0; 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker let isAsmParserOnly = !if(!eq(DisableDecoder{0}, {0}), 0, 1); 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerclass PseudoInstSI<dag outs, dag ins, list<dag> pattern = []> 95*9880d681SAndroid Build Coastguard Worker : InstSI<outs, ins, "", pattern> { 96*9880d681SAndroid Build Coastguard Worker let isPseudo = 1; 97*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 1; 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerclass Enc32 { 101*9880d681SAndroid Build Coastguard Worker field bits<32> Inst; 102*9880d681SAndroid Build Coastguard Worker int Size = 4; 103*9880d681SAndroid Build Coastguard Worker} 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Workerclass Enc64 { 106*9880d681SAndroid Build Coastguard Worker field bits<64> Inst; 107*9880d681SAndroid Build Coastguard Worker int Size = 8; 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerclass VOPDstOperand <RegisterClass rc> : RegisterOperand <rc, "printVOPDst">; 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerlet Uses = [EXEC] in { 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerclass VOPAnyCommon <dag outs, dag ins, string asm, list<dag> pattern> : 115*9880d681SAndroid Build Coastguard Worker InstSI <outs, ins, asm, pattern> { 116*9880d681SAndroid Build Coastguard Worker 117*9880d681SAndroid Build Coastguard Worker let mayLoad = 0; 118*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 119*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 120*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 121*9880d681SAndroid Build Coastguard Worker let VALU = 1; 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerclass VOPCCommon <dag ins, string asm, list<dag> pattern> : 125*9880d681SAndroid Build Coastguard Worker VOPAnyCommon <(outs), ins, asm, pattern> { 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker let VOPC = 1; 128*9880d681SAndroid Build Coastguard Worker let Size = 4; 129*9880d681SAndroid Build Coastguard Worker let Defs = [VCC]; 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerclass VOP1Common <dag outs, dag ins, string asm, list<dag> pattern> : 133*9880d681SAndroid Build Coastguard Worker VOPAnyCommon <outs, ins, asm, pattern> { 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker let VOP1 = 1; 136*9880d681SAndroid Build Coastguard Worker let Size = 4; 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerclass VOP2Common <dag outs, dag ins, string asm, list<dag> pattern> : 140*9880d681SAndroid Build Coastguard Worker VOPAnyCommon <outs, ins, asm, pattern> { 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker let VOP2 = 1; 143*9880d681SAndroid Build Coastguard Worker let Size = 4; 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerclass VOP3Common <dag outs, dag ins, string asm = "", 147*9880d681SAndroid Build Coastguard Worker list<dag> pattern = [], bit HasMods = 0, 148*9880d681SAndroid Build Coastguard Worker bit VOP3Only = 0> : 149*9880d681SAndroid Build Coastguard Worker VOPAnyCommon <outs, ins, asm, pattern> { 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker // Using complex patterns gives VOP3 patterns a very high complexity rating, 152*9880d681SAndroid Build Coastguard Worker // but standalone patterns are almost always prefered, so we need to adjust the 153*9880d681SAndroid Build Coastguard Worker // priority lower. The goal is to use a high number to reduce complexity to 154*9880d681SAndroid Build Coastguard Worker // zero (or less than zero). 155*9880d681SAndroid Build Coastguard Worker let AddedComplexity = -1000; 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker let VOP3 = 1; 158*9880d681SAndroid Build Coastguard Worker let VALU = 1; 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Worker let AsmMatchConverter = 161*9880d681SAndroid Build Coastguard Worker !if(!eq(VOP3Only,1), 162*9880d681SAndroid Build Coastguard Worker "cvtVOP3", 163*9880d681SAndroid Build Coastguard Worker !if(!eq(HasMods,1), "cvtVOP3_2_mod", "")); 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 0; 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker int Size = 8; 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker // Because SGPRs may be allowed if there are multiple operands, we 170*9880d681SAndroid Build Coastguard Worker // need a post-isel hook to insert copies in order to avoid 171*9880d681SAndroid Build Coastguard Worker // violating constant bus requirements. 172*9880d681SAndroid Build Coastguard Worker let hasPostISelHook = 1; 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker} // End Uses = [EXEC] 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 178*9880d681SAndroid Build Coastguard Worker// Scalar operations 179*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Workerclass SOP1e <bits<8> op> : Enc32 { 182*9880d681SAndroid Build Coastguard Worker bits<7> sdst; 183*9880d681SAndroid Build Coastguard Worker bits<8> src0; 184*9880d681SAndroid Build Coastguard Worker 185*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = src0; 186*9880d681SAndroid Build Coastguard Worker let Inst{15-8} = op; 187*9880d681SAndroid Build Coastguard Worker let Inst{22-16} = sdst; 188*9880d681SAndroid Build Coastguard Worker let Inst{31-23} = 0x17d; //encoding; 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerclass SOP2e <bits<7> op> : Enc32 { 192*9880d681SAndroid Build Coastguard Worker bits<7> sdst; 193*9880d681SAndroid Build Coastguard Worker bits<8> src0; 194*9880d681SAndroid Build Coastguard Worker bits<8> src1; 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = src0; 197*9880d681SAndroid Build Coastguard Worker let Inst{15-8} = src1; 198*9880d681SAndroid Build Coastguard Worker let Inst{22-16} = sdst; 199*9880d681SAndroid Build Coastguard Worker let Inst{29-23} = op; 200*9880d681SAndroid Build Coastguard Worker let Inst{31-30} = 0x2; // encoding 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerclass SOPCe <bits<7> op> : Enc32 { 204*9880d681SAndroid Build Coastguard Worker bits<8> src0; 205*9880d681SAndroid Build Coastguard Worker bits<8> src1; 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = src0; 208*9880d681SAndroid Build Coastguard Worker let Inst{15-8} = src1; 209*9880d681SAndroid Build Coastguard Worker let Inst{22-16} = op; 210*9880d681SAndroid Build Coastguard Worker let Inst{31-23} = 0x17e; 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Workerclass SOPKe <bits<5> op> : Enc32 { 214*9880d681SAndroid Build Coastguard Worker bits <7> sdst; 215*9880d681SAndroid Build Coastguard Worker bits <16> simm16; 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = simm16; 218*9880d681SAndroid Build Coastguard Worker let Inst{22-16} = sdst; 219*9880d681SAndroid Build Coastguard Worker let Inst{27-23} = op; 220*9880d681SAndroid Build Coastguard Worker let Inst{31-28} = 0xb; //encoding 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerclass SOPK64e <bits<5> op> : Enc64 { 224*9880d681SAndroid Build Coastguard Worker bits <7> sdst = 0; 225*9880d681SAndroid Build Coastguard Worker bits <16> simm16; 226*9880d681SAndroid Build Coastguard Worker bits <32> imm; 227*9880d681SAndroid Build Coastguard Worker 228*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = simm16; 229*9880d681SAndroid Build Coastguard Worker let Inst{22-16} = sdst; 230*9880d681SAndroid Build Coastguard Worker let Inst{27-23} = op; 231*9880d681SAndroid Build Coastguard Worker let Inst{31-28} = 0xb; 232*9880d681SAndroid Build Coastguard Worker 233*9880d681SAndroid Build Coastguard Worker let Inst{63-32} = imm; 234*9880d681SAndroid Build Coastguard Worker} 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Workerclass SOPPe <bits<7> op> : Enc32 { 237*9880d681SAndroid Build Coastguard Worker bits <16> simm16; 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Worker let Inst{15-0} = simm16; 240*9880d681SAndroid Build Coastguard Worker let Inst{22-16} = op; 241*9880d681SAndroid Build Coastguard Worker let Inst{31-23} = 0x17f; // encoding 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Workerclass SMRDe <bits<5> op, bits<1> imm> : Enc32 { 245*9880d681SAndroid Build Coastguard Worker bits<7> sdst; 246*9880d681SAndroid Build Coastguard Worker bits<7> sbase; 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Worker let Inst{8} = imm; 249*9880d681SAndroid Build Coastguard Worker let Inst{14-9} = sbase{6-1}; 250*9880d681SAndroid Build Coastguard Worker let Inst{21-15} = sdst; 251*9880d681SAndroid Build Coastguard Worker let Inst{26-22} = op; 252*9880d681SAndroid Build Coastguard Worker let Inst{31-27} = 0x18; //encoding 253*9880d681SAndroid Build Coastguard Worker} 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Workerclass SMRD_IMMe <bits<5> op> : SMRDe<op, 1> { 256*9880d681SAndroid Build Coastguard Worker bits<8> offset; 257*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = offset; 258*9880d681SAndroid Build Coastguard Worker} 259*9880d681SAndroid Build Coastguard Worker 260*9880d681SAndroid Build Coastguard Workerclass SMRD_SOFFe <bits<5> op> : SMRDe<op, 0> { 261*9880d681SAndroid Build Coastguard Worker bits<8> soff; 262*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = soff; 263*9880d681SAndroid Build Coastguard Worker} 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Workerclass SMRD_IMMe_ci <bits<5> op> : Enc64 { 268*9880d681SAndroid Build Coastguard Worker bits<7> sdst; 269*9880d681SAndroid Build Coastguard Worker bits<7> sbase; 270*9880d681SAndroid Build Coastguard Worker bits<32> offset; 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = 0xff; 273*9880d681SAndroid Build Coastguard Worker let Inst{8} = 0; 274*9880d681SAndroid Build Coastguard Worker let Inst{14-9} = sbase{6-1}; 275*9880d681SAndroid Build Coastguard Worker let Inst{21-15} = sdst; 276*9880d681SAndroid Build Coastguard Worker let Inst{26-22} = op; 277*9880d681SAndroid Build Coastguard Worker let Inst{31-27} = 0x18; //encoding 278*9880d681SAndroid Build Coastguard Worker let Inst{63-32} = offset; 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Workerlet SchedRW = [WriteSALU] in { 282*9880d681SAndroid Build Coastguard Workerclass SOP1 <dag outs, dag ins, string asm, list<dag> pattern> : 283*9880d681SAndroid Build Coastguard Worker InstSI<outs, ins, asm, pattern> { 284*9880d681SAndroid Build Coastguard Worker let mayLoad = 0; 285*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 286*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 287*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 0; 288*9880d681SAndroid Build Coastguard Worker let SALU = 1; 289*9880d681SAndroid Build Coastguard Worker let SOP1 = 1; 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Workerclass SOP2 <dag outs, dag ins, string asm, list<dag> pattern> : 293*9880d681SAndroid Build Coastguard Worker InstSI <outs, ins, asm, pattern> { 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Worker let mayLoad = 0; 296*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 297*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 298*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 0; 299*9880d681SAndroid Build Coastguard Worker let SALU = 1; 300*9880d681SAndroid Build Coastguard Worker let SOP2 = 1; 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Workerclass SOPC <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern> : 306*9880d681SAndroid Build Coastguard Worker InstSI<outs, ins, asm, pattern>, SOPCe <op> { 307*9880d681SAndroid Build Coastguard Worker 308*9880d681SAndroid Build Coastguard Worker let mayLoad = 0; 309*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 310*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 311*9880d681SAndroid Build Coastguard Worker let SALU = 1; 312*9880d681SAndroid Build Coastguard Worker let SOPC = 1; 313*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 0; 314*9880d681SAndroid Build Coastguard Worker let Defs = [SCC]; 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 317*9880d681SAndroid Build Coastguard Worker} 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Workerclass SOPK <dag outs, dag ins, string asm, list<dag> pattern> : 320*9880d681SAndroid Build Coastguard Worker InstSI <outs, ins , asm, pattern> { 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Worker let mayLoad = 0; 323*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 324*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 325*9880d681SAndroid Build Coastguard Worker let SALU = 1; 326*9880d681SAndroid Build Coastguard Worker let SOPK = 1; 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 329*9880d681SAndroid Build Coastguard Worker} 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Workerclass SOPP <bits<7> op, dag ins, string asm, list<dag> pattern = []> : 332*9880d681SAndroid Build Coastguard Worker InstSI <(outs), ins, asm, pattern >, SOPPe <op> { 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Worker let mayLoad = 0; 335*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 336*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 337*9880d681SAndroid Build Coastguard Worker let SALU = 1; 338*9880d681SAndroid Build Coastguard Worker let SOPP = 1; 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 341*9880d681SAndroid Build Coastguard Worker} 342*9880d681SAndroid Build Coastguard Worker 343*9880d681SAndroid Build Coastguard Worker} // let SchedRW = [WriteSALU] 344*9880d681SAndroid Build Coastguard Worker 345*9880d681SAndroid Build Coastguard Workerclass SMRD <dag outs, dag ins, string asm, list<dag> pattern> : 346*9880d681SAndroid Build Coastguard Worker InstSI<outs, ins, asm, pattern> { 347*9880d681SAndroid Build Coastguard Worker 348*9880d681SAndroid Build Coastguard Worker let LGKM_CNT = 1; 349*9880d681SAndroid Build Coastguard Worker let SMRD = 1; 350*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 351*9880d681SAndroid Build Coastguard Worker let mayLoad = 1; 352*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 353*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 354*9880d681SAndroid Build Coastguard Worker let SchedRW = [WriteSMEM]; 355*9880d681SAndroid Build Coastguard Worker} 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 358*9880d681SAndroid Build Coastguard Worker// Vector ALU operations 359*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Workerclass VOP1e <bits<8> op> : Enc32 { 362*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 363*9880d681SAndroid Build Coastguard Worker bits<9> src0; 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = src0; 366*9880d681SAndroid Build Coastguard Worker let Inst{16-9} = op; 367*9880d681SAndroid Build Coastguard Worker let Inst{24-17} = vdst; 368*9880d681SAndroid Build Coastguard Worker let Inst{31-25} = 0x3f; //encoding 369*9880d681SAndroid Build Coastguard Worker} 370*9880d681SAndroid Build Coastguard Worker 371*9880d681SAndroid Build Coastguard Workerclass VOP2e <bits<6> op> : Enc32 { 372*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 373*9880d681SAndroid Build Coastguard Worker bits<9> src0; 374*9880d681SAndroid Build Coastguard Worker bits<8> src1; 375*9880d681SAndroid Build Coastguard Worker 376*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = src0; 377*9880d681SAndroid Build Coastguard Worker let Inst{16-9} = src1; 378*9880d681SAndroid Build Coastguard Worker let Inst{24-17} = vdst; 379*9880d681SAndroid Build Coastguard Worker let Inst{30-25} = op; 380*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0x0; //encoding 381*9880d681SAndroid Build Coastguard Worker} 382*9880d681SAndroid Build Coastguard Worker 383*9880d681SAndroid Build Coastguard Workerclass VOP2_MADKe <bits<6> op> : Enc64 { 384*9880d681SAndroid Build Coastguard Worker 385*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 386*9880d681SAndroid Build Coastguard Worker bits<9> src0; 387*9880d681SAndroid Build Coastguard Worker bits<8> src1; 388*9880d681SAndroid Build Coastguard Worker bits<32> imm; 389*9880d681SAndroid Build Coastguard Worker 390*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = src0; 391*9880d681SAndroid Build Coastguard Worker let Inst{16-9} = src1; 392*9880d681SAndroid Build Coastguard Worker let Inst{24-17} = vdst; 393*9880d681SAndroid Build Coastguard Worker let Inst{30-25} = op; 394*9880d681SAndroid Build Coastguard Worker let Inst{31} = 0x0; // encoding 395*9880d681SAndroid Build Coastguard Worker let Inst{63-32} = imm; 396*9880d681SAndroid Build Coastguard Worker} 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Workerclass VOP3a <bits<9> op> : Enc64 { 399*9880d681SAndroid Build Coastguard Worker bits<2> src0_modifiers; 400*9880d681SAndroid Build Coastguard Worker bits<9> src0; 401*9880d681SAndroid Build Coastguard Worker bits<2> src1_modifiers; 402*9880d681SAndroid Build Coastguard Worker bits<9> src1; 403*9880d681SAndroid Build Coastguard Worker bits<2> src2_modifiers; 404*9880d681SAndroid Build Coastguard Worker bits<9> src2; 405*9880d681SAndroid Build Coastguard Worker bits<1> clamp; 406*9880d681SAndroid Build Coastguard Worker bits<2> omod; 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Worker let Inst{8} = src0_modifiers{1}; 409*9880d681SAndroid Build Coastguard Worker let Inst{9} = src1_modifiers{1}; 410*9880d681SAndroid Build Coastguard Worker let Inst{10} = src2_modifiers{1}; 411*9880d681SAndroid Build Coastguard Worker let Inst{11} = clamp; 412*9880d681SAndroid Build Coastguard Worker let Inst{25-17} = op; 413*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x34; //encoding 414*9880d681SAndroid Build Coastguard Worker let Inst{40-32} = src0; 415*9880d681SAndroid Build Coastguard Worker let Inst{49-41} = src1; 416*9880d681SAndroid Build Coastguard Worker let Inst{58-50} = src2; 417*9880d681SAndroid Build Coastguard Worker let Inst{60-59} = omod; 418*9880d681SAndroid Build Coastguard Worker let Inst{61} = src0_modifiers{0}; 419*9880d681SAndroid Build Coastguard Worker let Inst{62} = src1_modifiers{0}; 420*9880d681SAndroid Build Coastguard Worker let Inst{63} = src2_modifiers{0}; 421*9880d681SAndroid Build Coastguard Worker} 422*9880d681SAndroid Build Coastguard Worker 423*9880d681SAndroid Build Coastguard Workerclass VOP3e <bits<9> op> : VOP3a <op> { 424*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 425*9880d681SAndroid Build Coastguard Worker 426*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = vdst; 427*9880d681SAndroid Build Coastguard Worker} 428*9880d681SAndroid Build Coastguard Worker 429*9880d681SAndroid Build Coastguard Worker// Encoding used for VOPC instructions encoded as VOP3 430*9880d681SAndroid Build Coastguard Worker// Differs from VOP3e by destination name (sdst) as VOPC doesn't have vector dst 431*9880d681SAndroid Build Coastguard Workerclass VOP3ce <bits<9> op> : VOP3a <op> { 432*9880d681SAndroid Build Coastguard Worker bits<8> sdst; 433*9880d681SAndroid Build Coastguard Worker 434*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = sdst; 435*9880d681SAndroid Build Coastguard Worker} 436*9880d681SAndroid Build Coastguard Worker 437*9880d681SAndroid Build Coastguard Workerclass VOP3be <bits<9> op> : Enc64 { 438*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 439*9880d681SAndroid Build Coastguard Worker bits<2> src0_modifiers; 440*9880d681SAndroid Build Coastguard Worker bits<9> src0; 441*9880d681SAndroid Build Coastguard Worker bits<2> src1_modifiers; 442*9880d681SAndroid Build Coastguard Worker bits<9> src1; 443*9880d681SAndroid Build Coastguard Worker bits<2> src2_modifiers; 444*9880d681SAndroid Build Coastguard Worker bits<9> src2; 445*9880d681SAndroid Build Coastguard Worker bits<7> sdst; 446*9880d681SAndroid Build Coastguard Worker bits<2> omod; 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = vdst; 449*9880d681SAndroid Build Coastguard Worker let Inst{14-8} = sdst; 450*9880d681SAndroid Build Coastguard Worker let Inst{25-17} = op; 451*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x34; //encoding 452*9880d681SAndroid Build Coastguard Worker let Inst{40-32} = src0; 453*9880d681SAndroid Build Coastguard Worker let Inst{49-41} = src1; 454*9880d681SAndroid Build Coastguard Worker let Inst{58-50} = src2; 455*9880d681SAndroid Build Coastguard Worker let Inst{60-59} = omod; 456*9880d681SAndroid Build Coastguard Worker let Inst{61} = src0_modifiers{0}; 457*9880d681SAndroid Build Coastguard Worker let Inst{62} = src1_modifiers{0}; 458*9880d681SAndroid Build Coastguard Worker let Inst{63} = src2_modifiers{0}; 459*9880d681SAndroid Build Coastguard Worker} 460*9880d681SAndroid Build Coastguard Worker 461*9880d681SAndroid Build Coastguard Workerclass VOPCe <bits<8> op> : Enc32 { 462*9880d681SAndroid Build Coastguard Worker bits<9> src0; 463*9880d681SAndroid Build Coastguard Worker bits<8> src1; 464*9880d681SAndroid Build Coastguard Worker 465*9880d681SAndroid Build Coastguard Worker let Inst{8-0} = src0; 466*9880d681SAndroid Build Coastguard Worker let Inst{16-9} = src1; 467*9880d681SAndroid Build Coastguard Worker let Inst{24-17} = op; 468*9880d681SAndroid Build Coastguard Worker let Inst{31-25} = 0x3e; 469*9880d681SAndroid Build Coastguard Worker} 470*9880d681SAndroid Build Coastguard Worker 471*9880d681SAndroid Build Coastguard Workerclass VINTRPe <bits<2> op> : Enc32 { 472*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 473*9880d681SAndroid Build Coastguard Worker bits<8> vsrc; 474*9880d681SAndroid Build Coastguard Worker bits<2> attrchan; 475*9880d681SAndroid Build Coastguard Worker bits<6> attr; 476*9880d681SAndroid Build Coastguard Worker 477*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = vsrc; 478*9880d681SAndroid Build Coastguard Worker let Inst{9-8} = attrchan; 479*9880d681SAndroid Build Coastguard Worker let Inst{15-10} = attr; 480*9880d681SAndroid Build Coastguard Worker let Inst{17-16} = op; 481*9880d681SAndroid Build Coastguard Worker let Inst{25-18} = vdst; 482*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x32; // encoding 483*9880d681SAndroid Build Coastguard Worker} 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Workerclass DSe <bits<8> op> : Enc64 { 486*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 487*9880d681SAndroid Build Coastguard Worker bits<1> gds; 488*9880d681SAndroid Build Coastguard Worker bits<8> addr; 489*9880d681SAndroid Build Coastguard Worker bits<8> data0; 490*9880d681SAndroid Build Coastguard Worker bits<8> data1; 491*9880d681SAndroid Build Coastguard Worker bits<8> offset0; 492*9880d681SAndroid Build Coastguard Worker bits<8> offset1; 493*9880d681SAndroid Build Coastguard Worker 494*9880d681SAndroid Build Coastguard Worker let Inst{7-0} = offset0; 495*9880d681SAndroid Build Coastguard Worker let Inst{15-8} = offset1; 496*9880d681SAndroid Build Coastguard Worker let Inst{17} = gds; 497*9880d681SAndroid Build Coastguard Worker let Inst{25-18} = op; 498*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x36; //encoding 499*9880d681SAndroid Build Coastguard Worker let Inst{39-32} = addr; 500*9880d681SAndroid Build Coastguard Worker let Inst{47-40} = data0; 501*9880d681SAndroid Build Coastguard Worker let Inst{55-48} = data1; 502*9880d681SAndroid Build Coastguard Worker let Inst{63-56} = vdst; 503*9880d681SAndroid Build Coastguard Worker} 504*9880d681SAndroid Build Coastguard Worker 505*9880d681SAndroid Build Coastguard Workerclass MUBUFe <bits<7> op> : Enc64 { 506*9880d681SAndroid Build Coastguard Worker bits<12> offset; 507*9880d681SAndroid Build Coastguard Worker bits<1> offen; 508*9880d681SAndroid Build Coastguard Worker bits<1> idxen; 509*9880d681SAndroid Build Coastguard Worker bits<1> glc; 510*9880d681SAndroid Build Coastguard Worker bits<1> addr64; 511*9880d681SAndroid Build Coastguard Worker bits<1> lds; 512*9880d681SAndroid Build Coastguard Worker bits<8> vaddr; 513*9880d681SAndroid Build Coastguard Worker bits<8> vdata; 514*9880d681SAndroid Build Coastguard Worker bits<7> srsrc; 515*9880d681SAndroid Build Coastguard Worker bits<1> slc; 516*9880d681SAndroid Build Coastguard Worker bits<1> tfe; 517*9880d681SAndroid Build Coastguard Worker bits<8> soffset; 518*9880d681SAndroid Build Coastguard Worker 519*9880d681SAndroid Build Coastguard Worker let Inst{11-0} = offset; 520*9880d681SAndroid Build Coastguard Worker let Inst{12} = offen; 521*9880d681SAndroid Build Coastguard Worker let Inst{13} = idxen; 522*9880d681SAndroid Build Coastguard Worker let Inst{14} = glc; 523*9880d681SAndroid Build Coastguard Worker let Inst{15} = addr64; 524*9880d681SAndroid Build Coastguard Worker let Inst{16} = lds; 525*9880d681SAndroid Build Coastguard Worker let Inst{24-18} = op; 526*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x38; //encoding 527*9880d681SAndroid Build Coastguard Worker let Inst{39-32} = vaddr; 528*9880d681SAndroid Build Coastguard Worker let Inst{47-40} = vdata; 529*9880d681SAndroid Build Coastguard Worker let Inst{52-48} = srsrc{6-2}; 530*9880d681SAndroid Build Coastguard Worker let Inst{54} = slc; 531*9880d681SAndroid Build Coastguard Worker let Inst{55} = tfe; 532*9880d681SAndroid Build Coastguard Worker let Inst{63-56} = soffset; 533*9880d681SAndroid Build Coastguard Worker} 534*9880d681SAndroid Build Coastguard Worker 535*9880d681SAndroid Build Coastguard Workerclass MTBUFe <bits<3> op> : Enc64 { 536*9880d681SAndroid Build Coastguard Worker bits<8> vdata; 537*9880d681SAndroid Build Coastguard Worker bits<12> offset; 538*9880d681SAndroid Build Coastguard Worker bits<1> offen; 539*9880d681SAndroid Build Coastguard Worker bits<1> idxen; 540*9880d681SAndroid Build Coastguard Worker bits<1> glc; 541*9880d681SAndroid Build Coastguard Worker bits<1> addr64; 542*9880d681SAndroid Build Coastguard Worker bits<4> dfmt; 543*9880d681SAndroid Build Coastguard Worker bits<3> nfmt; 544*9880d681SAndroid Build Coastguard Worker bits<8> vaddr; 545*9880d681SAndroid Build Coastguard Worker bits<7> srsrc; 546*9880d681SAndroid Build Coastguard Worker bits<1> slc; 547*9880d681SAndroid Build Coastguard Worker bits<1> tfe; 548*9880d681SAndroid Build Coastguard Worker bits<8> soffset; 549*9880d681SAndroid Build Coastguard Worker 550*9880d681SAndroid Build Coastguard Worker let Inst{11-0} = offset; 551*9880d681SAndroid Build Coastguard Worker let Inst{12} = offen; 552*9880d681SAndroid Build Coastguard Worker let Inst{13} = idxen; 553*9880d681SAndroid Build Coastguard Worker let Inst{14} = glc; 554*9880d681SAndroid Build Coastguard Worker let Inst{15} = addr64; 555*9880d681SAndroid Build Coastguard Worker let Inst{18-16} = op; 556*9880d681SAndroid Build Coastguard Worker let Inst{22-19} = dfmt; 557*9880d681SAndroid Build Coastguard Worker let Inst{25-23} = nfmt; 558*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x3a; //encoding 559*9880d681SAndroid Build Coastguard Worker let Inst{39-32} = vaddr; 560*9880d681SAndroid Build Coastguard Worker let Inst{47-40} = vdata; 561*9880d681SAndroid Build Coastguard Worker let Inst{52-48} = srsrc{6-2}; 562*9880d681SAndroid Build Coastguard Worker let Inst{54} = slc; 563*9880d681SAndroid Build Coastguard Worker let Inst{55} = tfe; 564*9880d681SAndroid Build Coastguard Worker let Inst{63-56} = soffset; 565*9880d681SAndroid Build Coastguard Worker} 566*9880d681SAndroid Build Coastguard Worker 567*9880d681SAndroid Build Coastguard Workerclass MIMGe <bits<7> op> : Enc64 { 568*9880d681SAndroid Build Coastguard Worker bits<8> vdata; 569*9880d681SAndroid Build Coastguard Worker bits<4> dmask; 570*9880d681SAndroid Build Coastguard Worker bits<1> unorm; 571*9880d681SAndroid Build Coastguard Worker bits<1> glc; 572*9880d681SAndroid Build Coastguard Worker bits<1> da; 573*9880d681SAndroid Build Coastguard Worker bits<1> r128; 574*9880d681SAndroid Build Coastguard Worker bits<1> tfe; 575*9880d681SAndroid Build Coastguard Worker bits<1> lwe; 576*9880d681SAndroid Build Coastguard Worker bits<1> slc; 577*9880d681SAndroid Build Coastguard Worker bits<8> vaddr; 578*9880d681SAndroid Build Coastguard Worker bits<7> srsrc; 579*9880d681SAndroid Build Coastguard Worker bits<7> ssamp; 580*9880d681SAndroid Build Coastguard Worker 581*9880d681SAndroid Build Coastguard Worker let Inst{11-8} = dmask; 582*9880d681SAndroid Build Coastguard Worker let Inst{12} = unorm; 583*9880d681SAndroid Build Coastguard Worker let Inst{13} = glc; 584*9880d681SAndroid Build Coastguard Worker let Inst{14} = da; 585*9880d681SAndroid Build Coastguard Worker let Inst{15} = r128; 586*9880d681SAndroid Build Coastguard Worker let Inst{16} = tfe; 587*9880d681SAndroid Build Coastguard Worker let Inst{17} = lwe; 588*9880d681SAndroid Build Coastguard Worker let Inst{24-18} = op; 589*9880d681SAndroid Build Coastguard Worker let Inst{25} = slc; 590*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x3c; 591*9880d681SAndroid Build Coastguard Worker let Inst{39-32} = vaddr; 592*9880d681SAndroid Build Coastguard Worker let Inst{47-40} = vdata; 593*9880d681SAndroid Build Coastguard Worker let Inst{52-48} = srsrc{6-2}; 594*9880d681SAndroid Build Coastguard Worker let Inst{57-53} = ssamp{6-2}; 595*9880d681SAndroid Build Coastguard Worker} 596*9880d681SAndroid Build Coastguard Worker 597*9880d681SAndroid Build Coastguard Workerclass FLATe<bits<7> op> : Enc64 { 598*9880d681SAndroid Build Coastguard Worker bits<8> addr; 599*9880d681SAndroid Build Coastguard Worker bits<8> data; 600*9880d681SAndroid Build Coastguard Worker bits<8> vdst; 601*9880d681SAndroid Build Coastguard Worker bits<1> slc; 602*9880d681SAndroid Build Coastguard Worker bits<1> glc; 603*9880d681SAndroid Build Coastguard Worker bits<1> tfe; 604*9880d681SAndroid Build Coastguard Worker 605*9880d681SAndroid Build Coastguard Worker // 15-0 is reserved. 606*9880d681SAndroid Build Coastguard Worker let Inst{16} = glc; 607*9880d681SAndroid Build Coastguard Worker let Inst{17} = slc; 608*9880d681SAndroid Build Coastguard Worker let Inst{24-18} = op; 609*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x37; // Encoding. 610*9880d681SAndroid Build Coastguard Worker let Inst{39-32} = addr; 611*9880d681SAndroid Build Coastguard Worker let Inst{47-40} = data; 612*9880d681SAndroid Build Coastguard Worker // 54-48 is reserved. 613*9880d681SAndroid Build Coastguard Worker let Inst{55} = tfe; 614*9880d681SAndroid Build Coastguard Worker let Inst{63-56} = vdst; 615*9880d681SAndroid Build Coastguard Worker} 616*9880d681SAndroid Build Coastguard Worker 617*9880d681SAndroid Build Coastguard Workerclass EXPe : Enc64 { 618*9880d681SAndroid Build Coastguard Worker bits<4> en; 619*9880d681SAndroid Build Coastguard Worker bits<6> tgt; 620*9880d681SAndroid Build Coastguard Worker bits<1> compr; 621*9880d681SAndroid Build Coastguard Worker bits<1> done; 622*9880d681SAndroid Build Coastguard Worker bits<1> vm; 623*9880d681SAndroid Build Coastguard Worker bits<8> vsrc0; 624*9880d681SAndroid Build Coastguard Worker bits<8> vsrc1; 625*9880d681SAndroid Build Coastguard Worker bits<8> vsrc2; 626*9880d681SAndroid Build Coastguard Worker bits<8> vsrc3; 627*9880d681SAndroid Build Coastguard Worker 628*9880d681SAndroid Build Coastguard Worker let Inst{3-0} = en; 629*9880d681SAndroid Build Coastguard Worker let Inst{9-4} = tgt; 630*9880d681SAndroid Build Coastguard Worker let Inst{10} = compr; 631*9880d681SAndroid Build Coastguard Worker let Inst{11} = done; 632*9880d681SAndroid Build Coastguard Worker let Inst{12} = vm; 633*9880d681SAndroid Build Coastguard Worker let Inst{31-26} = 0x3e; 634*9880d681SAndroid Build Coastguard Worker let Inst{39-32} = vsrc0; 635*9880d681SAndroid Build Coastguard Worker let Inst{47-40} = vsrc1; 636*9880d681SAndroid Build Coastguard Worker let Inst{55-48} = vsrc2; 637*9880d681SAndroid Build Coastguard Worker let Inst{63-56} = vsrc3; 638*9880d681SAndroid Build Coastguard Worker} 639*9880d681SAndroid Build Coastguard Worker 640*9880d681SAndroid Build Coastguard Workerlet Uses = [EXEC] in { 641*9880d681SAndroid Build Coastguard Worker 642*9880d681SAndroid Build Coastguard Workerclass VOP1 <bits<8> op, dag outs, dag ins, string asm, list<dag> pattern> : 643*9880d681SAndroid Build Coastguard Worker VOP1Common <outs, ins, asm, pattern>, 644*9880d681SAndroid Build Coastguard Worker VOP1e<op> { 645*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 0; 646*9880d681SAndroid Build Coastguard Worker} 647*9880d681SAndroid Build Coastguard Worker 648*9880d681SAndroid Build Coastguard Workerclass VOP2 <bits<6> op, dag outs, dag ins, string asm, list<dag> pattern> : 649*9880d681SAndroid Build Coastguard Worker VOP2Common <outs, ins, asm, pattern>, VOP2e<op> { 650*9880d681SAndroid Build Coastguard Worker let isCodeGenOnly = 0; 651*9880d681SAndroid Build Coastguard Worker} 652*9880d681SAndroid Build Coastguard Worker 653*9880d681SAndroid Build Coastguard Workerclass VOPC <bits<8> op, dag ins, string asm, list<dag> pattern> : 654*9880d681SAndroid Build Coastguard Worker VOPCCommon <ins, asm, pattern>, VOPCe <op>; 655*9880d681SAndroid Build Coastguard Worker 656*9880d681SAndroid Build Coastguard Workerclass VINTRPCommon <dag outs, dag ins, string asm, list<dag> pattern> : 657*9880d681SAndroid Build Coastguard Worker InstSI <outs, ins, asm, pattern> { 658*9880d681SAndroid Build Coastguard Worker let mayLoad = 1; 659*9880d681SAndroid Build Coastguard Worker let mayStore = 0; 660*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 661*9880d681SAndroid Build Coastguard Worker} 662*9880d681SAndroid Build Coastguard Worker 663*9880d681SAndroid Build Coastguard Worker} // End Uses = [EXEC] 664*9880d681SAndroid Build Coastguard Worker 665*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 666*9880d681SAndroid Build Coastguard Worker// Vector I/O operations 667*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 668*9880d681SAndroid Build Coastguard Worker 669*9880d681SAndroid Build Coastguard Workerclass DS <dag outs, dag ins, string asm, list<dag> pattern> : 670*9880d681SAndroid Build Coastguard Worker InstSI <outs, ins, asm, pattern> { 671*9880d681SAndroid Build Coastguard Worker 672*9880d681SAndroid Build Coastguard Worker let LGKM_CNT = 1; 673*9880d681SAndroid Build Coastguard Worker let DS = 1; 674*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 675*9880d681SAndroid Build Coastguard Worker let Uses = [M0, EXEC]; 676*9880d681SAndroid Build Coastguard Worker 677*9880d681SAndroid Build Coastguard Worker // Most instruction load and store data, so set this as the default. 678*9880d681SAndroid Build Coastguard Worker let mayLoad = 1; 679*9880d681SAndroid Build Coastguard Worker let mayStore = 1; 680*9880d681SAndroid Build Coastguard Worker 681*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 682*9880d681SAndroid Build Coastguard Worker let AsmMatchConverter = "cvtDS"; 683*9880d681SAndroid Build Coastguard Worker let SchedRW = [WriteLDS]; 684*9880d681SAndroid Build Coastguard Worker} 685*9880d681SAndroid Build Coastguard Worker 686*9880d681SAndroid Build Coastguard Workerclass MUBUF <dag outs, dag ins, string asm, list<dag> pattern> : 687*9880d681SAndroid Build Coastguard Worker InstSI<outs, ins, asm, pattern> { 688*9880d681SAndroid Build Coastguard Worker 689*9880d681SAndroid Build Coastguard Worker let VM_CNT = 1; 690*9880d681SAndroid Build Coastguard Worker let EXP_CNT = 1; 691*9880d681SAndroid Build Coastguard Worker let MUBUF = 1; 692*9880d681SAndroid Build Coastguard Worker let Uses = [EXEC]; 693*9880d681SAndroid Build Coastguard Worker 694*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 695*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 696*9880d681SAndroid Build Coastguard Worker let AsmMatchConverter = "cvtMubuf"; 697*9880d681SAndroid Build Coastguard Worker let SchedRW = [WriteVMEM]; 698*9880d681SAndroid Build Coastguard Worker} 699*9880d681SAndroid Build Coastguard Worker 700*9880d681SAndroid Build Coastguard Workerclass MTBUF <dag outs, dag ins, string asm, list<dag> pattern> : 701*9880d681SAndroid Build Coastguard Worker InstSI<outs, ins, asm, pattern> { 702*9880d681SAndroid Build Coastguard Worker 703*9880d681SAndroid Build Coastguard Worker let VM_CNT = 1; 704*9880d681SAndroid Build Coastguard Worker let EXP_CNT = 1; 705*9880d681SAndroid Build Coastguard Worker let MTBUF = 1; 706*9880d681SAndroid Build Coastguard Worker let Uses = [EXEC]; 707*9880d681SAndroid Build Coastguard Worker 708*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 709*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 710*9880d681SAndroid Build Coastguard Worker let SchedRW = [WriteVMEM]; 711*9880d681SAndroid Build Coastguard Worker} 712*9880d681SAndroid Build Coastguard Worker 713*9880d681SAndroid Build Coastguard Workerclass FLAT <bits<7> op, dag outs, dag ins, string asm, list<dag> pattern> : 714*9880d681SAndroid Build Coastguard Worker InstSI<outs, ins, asm, pattern>, FLATe <op> { 715*9880d681SAndroid Build Coastguard Worker let FLAT = 1; 716*9880d681SAndroid Build Coastguard Worker // Internally, FLAT instruction are executed as both an LDS and a 717*9880d681SAndroid Build Coastguard Worker // Buffer instruction; so, they increment both VM_CNT and LGKM_CNT 718*9880d681SAndroid Build Coastguard Worker // and are not considered done until both have been decremented. 719*9880d681SAndroid Build Coastguard Worker let VM_CNT = 1; 720*9880d681SAndroid Build Coastguard Worker let LGKM_CNT = 1; 721*9880d681SAndroid Build Coastguard Worker 722*9880d681SAndroid Build Coastguard Worker let Uses = [EXEC, FLAT_SCR]; // M0 723*9880d681SAndroid Build Coastguard Worker 724*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 725*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; 726*9880d681SAndroid Build Coastguard Worker let SchedRW = [WriteVMEM]; 727*9880d681SAndroid Build Coastguard Worker} 728*9880d681SAndroid Build Coastguard Worker 729*9880d681SAndroid Build Coastguard Workerclass MIMG <dag outs, dag ins, string asm, list<dag> pattern> : 730*9880d681SAndroid Build Coastguard Worker InstSI <outs, ins, asm, pattern> { 731*9880d681SAndroid Build Coastguard Worker 732*9880d681SAndroid Build Coastguard Worker let VM_CNT = 1; 733*9880d681SAndroid Build Coastguard Worker let EXP_CNT = 1; 734*9880d681SAndroid Build Coastguard Worker let MIMG = 1; 735*9880d681SAndroid Build Coastguard Worker let Uses = [EXEC]; 736*9880d681SAndroid Build Coastguard Worker 737*9880d681SAndroid Build Coastguard Worker let UseNamedOperandTable = 1; 738*9880d681SAndroid Build Coastguard Worker let hasSideEffects = 0; // XXX ???? 739*9880d681SAndroid Build Coastguard Worker} 740