xref: /llvm-project/llvm/lib/Target/PowerPC/PPCInstrFutureMMA.td (revision 9df924a634ac5ea702b0d8d0d8b737c819a98095)
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