1*9df924a6SStefan Pintilie//===-- PPCInstrFutureMMA.td - Future Instruction Set ------*- tablegen -*-===// 2*9df924a6SStefan Pintilie// 3*9df924a6SStefan Pintilie// The LLVM Compiler Infrastructure 4*9df924a6SStefan Pintilie// 5*9df924a6SStefan Pintilie// This file is distributed under the University of Illinois Open Source 6*9df924a6SStefan Pintilie// License. See LICENSE.TXT for details. 7*9df924a6SStefan Pintilie// 8*9df924a6SStefan Pintilie//===----------------------------------------------------------------------===// 9*9df924a6SStefan Pintilie// 10*9df924a6SStefan Pintilie// This file describes the instructions introduced for the Future CPU for MMA. 11*9df924a6SStefan Pintilie// 12*9df924a6SStefan Pintilie//===----------------------------------------------------------------------===// 13*9df924a6SStefan Pintilie 14*9df924a6SStefan Pintilieclass XX3Form_AT3_XABp5_P1<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, 15*9df924a6SStefan Pintilie string asmstr, list<dag> pattern> 16*9df924a6SStefan Pintilie : I<opcode, OOL, IOL, asmstr, NoItinerary> { 17*9df924a6SStefan Pintilie bits<3> AT; 18*9df924a6SStefan Pintilie bits<5> XAp; 19*9df924a6SStefan Pintilie bits<5> XBp; 20*9df924a6SStefan Pintilie bits<1> P; 21*9df924a6SStefan Pintilie 22*9df924a6SStefan Pintilie let Pattern = pattern; 23*9df924a6SStefan Pintilie 24*9df924a6SStefan Pintilie let Inst{6-8} = AT{2-0}; 25*9df924a6SStefan Pintilie let Inst{9-10} = 0; 26*9df924a6SStefan Pintilie let Inst{11-14} = XAp{3-0}; 27*9df924a6SStefan Pintilie let Inst{15} = P; 28*9df924a6SStefan Pintilie let Inst{16-19} = XBp{3-0}; 29*9df924a6SStefan Pintilie let Inst{20} = 0; 30*9df924a6SStefan Pintilie let Inst{21-28} = xo; 31*9df924a6SStefan Pintilie let Inst{29} = XAp{4}; 32*9df924a6SStefan Pintilie let Inst{30} = XBp{4}; 33*9df924a6SStefan Pintilie let Inst{31} = 0; 34*9df924a6SStefan Pintilie} 35*9df924a6SStefan Pintilie 36*9df924a6SStefan Pintilieclass XX2Form_AT3_XBp5_P2<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, 37*9df924a6SStefan Pintilie string asmstr, list<dag> pattern> 38*9df924a6SStefan Pintilie : I<opcode, OOL, IOL, asmstr, NoItinerary> { 39*9df924a6SStefan Pintilie bits<3> AT; 40*9df924a6SStefan Pintilie bits<5> XBp; 41*9df924a6SStefan Pintilie bits<2> P; 42*9df924a6SStefan Pintilie 43*9df924a6SStefan Pintilie let Pattern = pattern; 44*9df924a6SStefan Pintilie 45*9df924a6SStefan Pintilie let Inst{6-8} = AT{2-0}; 46*9df924a6SStefan Pintilie let Inst{9-14} = 0; 47*9df924a6SStefan Pintilie let Inst{15} = P{0}; 48*9df924a6SStefan Pintilie let Inst{16-19} = XBp{3-0}; 49*9df924a6SStefan Pintilie let Inst{20} = P{1}; 50*9df924a6SStefan Pintilie let Inst{21-29} = xo; 51*9df924a6SStefan Pintilie let Inst{30} = XBp{4}; 52*9df924a6SStefan Pintilie let Inst{31} = 0; 53*9df924a6SStefan Pintilie} 54*9df924a6SStefan Pintilie 55*9df924a6SStefan Pintilieclass XForm_ATB3<bits<6> opcode, bits<5> o, bits<10> xo, dag OOL, dag IOL, 56*9df924a6SStefan Pintilie string asmstr, list<dag> pattern> 57*9df924a6SStefan Pintilie : I <opcode, OOL, IOL, asmstr, NoItinerary> { 58*9df924a6SStefan Pintilie bits<3> AT; 59*9df924a6SStefan Pintilie bits<3> AB; 60*9df924a6SStefan Pintilie 61*9df924a6SStefan Pintilie let Pattern = pattern; 62*9df924a6SStefan Pintilie 63*9df924a6SStefan Pintilie let Inst{6-8} = AT{2-0}; 64*9df924a6SStefan Pintilie let Inst{9-10} = 0; 65*9df924a6SStefan Pintilie let Inst{11-15} = o; 66*9df924a6SStefan Pintilie let Inst{16-18} = AB{2-0}; 67*9df924a6SStefan Pintilie let Inst{19-20} = 0; 68*9df924a6SStefan Pintilie let Inst{21-30} = xo; 69*9df924a6SStefan Pintilie let Inst{31} = 0; 70*9df924a6SStefan Pintilie} 71*9df924a6SStefan Pintilie 72*9df924a6SStefan Pintilielet Predicates = [IsISAFuture] in { 73*9df924a6SStefan Pintilie def DMXXEXTFDMR512 : XX3Form_AT3_XABp5_P1<60, 226, 74*9df924a6SStefan Pintilie (outs vsrprc:$XAp, vsrprc:$XBp), 75*9df924a6SStefan Pintilie (ins wacc:$AT), 76*9df924a6SStefan Pintilie "dmxxextfdmr512 $AT, $XAp, $XBp, 0", []> { 77*9df924a6SStefan Pintilie let P = 0; 78*9df924a6SStefan Pintilie } 79*9df924a6SStefan Pintilie 80*9df924a6SStefan Pintilie def DMXXEXTFDMR512_HI : XX3Form_AT3_XABp5_P1<60, 226, 81*9df924a6SStefan Pintilie (outs vsrprc:$XAp, vsrprc:$XBp), 82*9df924a6SStefan Pintilie (ins wacc_hi:$AT), 83*9df924a6SStefan Pintilie "dmxxextfdmr512 $AT, $XAp, $XBp, 1", []> { 84*9df924a6SStefan Pintilie let P = 1; 85*9df924a6SStefan Pintilie } 86*9df924a6SStefan Pintilie 87*9df924a6SStefan Pintilie def DMXXINSTFDMR512 : XX3Form_AT3_XABp5_P1<60, 234, (outs wacc:$AT), 88*9df924a6SStefan Pintilie (ins vsrprc:$XAp, vsrprc:$XBp), 89*9df924a6SStefan Pintilie "dmxxinstfdmr512 $AT, $XAp, $XBp, 0", []> { 90*9df924a6SStefan Pintilie let P = 0; 91*9df924a6SStefan Pintilie } 92*9df924a6SStefan Pintilie 93*9df924a6SStefan Pintilie def DMXXINSTFDMR512_HI : XX3Form_AT3_XABp5_P1<60, 234, (outs wacc_hi:$AT), 94*9df924a6SStefan Pintilie (ins vsrprc:$XAp, vsrprc:$XBp), 95*9df924a6SStefan Pintilie "dmxxinstfdmr512 $AT, $XAp, $XBp, 1", []> { 96*9df924a6SStefan Pintilie let P = 1; 97*9df924a6SStefan Pintilie } 98*9df924a6SStefan Pintilie 99*9df924a6SStefan Pintilie def DMXXEXTFDMR256 : XX2Form_AT3_XBp5_P2<60, 484, (outs vsrprc:$XBp), 100*9df924a6SStefan Pintilie (ins dmrrowp:$AT, u2imm:$P), 101*9df924a6SStefan Pintilie "dmxxextfdmr256 $AT, $XBp, $P", []>; 102*9df924a6SStefan Pintilie 103*9df924a6SStefan Pintilie def DMXXINSTFDMR256 : XX2Form_AT3_XBp5_P2<60, 485, (outs dmrrowp:$AT), 104*9df924a6SStefan Pintilie (ins vsrprc:$XBp, u2imm:$P), 105*9df924a6SStefan Pintilie "dmxxinstfdmr256 $AT, $XBp, $P", []>; 106*9df924a6SStefan Pintilie 107*9df924a6SStefan Pintilie def DMMR : XForm_ATB3<31, 6, 177, (outs dmr:$AT), (ins dmr:$AB), 108*9df924a6SStefan Pintilie "dmmr $AT, $AB", []>; 109*9df924a6SStefan Pintilie 110*9df924a6SStefan Pintilie def DMXOR : XForm_ATB3<31, 7, 177, (outs dmr:$AT), (ins dmr:$ATi, dmr:$AB), 111*9df924a6SStefan Pintilie "dmxor $AT, $AB", []>, 112*9df924a6SStefan Pintilie RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">; 113*9df924a6SStefan Pintilie 114*9df924a6SStefan Pintilie def DMSETDMRZ : XForm_AT3<31, 2, 177, (outs dmr:$AT), (ins), 115*9df924a6SStefan Pintilie "dmsetdmrz $AT", NoItinerary, []>; 116*9df924a6SStefan Pintilie} 117