xref: /llvm-project/llvm/lib/Target/PowerPC/PPCInstrMMA.td (revision 4b43ef3e5c37459996ce0f53615881f436cb0e65)
10625aed2SStefan Pintilie
20625aed2SStefan Pintilie// Mask immediates for MMA instructions (2, 4 and 8 bits).
30625aed2SStefan Pintiliedef Msk2Imm : ImmLeaf<i32, [{ return isUInt<2>(Imm); }]>;
40625aed2SStefan Pintiliedef Msk4Imm : ImmLeaf<i32, [{ return isUInt<4>(Imm); }]>;
50625aed2SStefan Pintiliedef Msk8Imm : ImmLeaf<i32, [{ return isUInt<8>(Imm); }]>;
60625aed2SStefan Pintilie
70625aed2SStefan Pintiliedef MMA : Predicate<"Subtarget->hasMMA()">;
80625aed2SStefan Pintilie
90625aed2SStefan Pintilie
100625aed2SStefan Pintilie// Multiclass definitions for MMA accumulator instructions.
110625aed2SStefan Pintilie// ----------------------------------------------------------------------------
120625aed2SStefan Pintilie
130625aed2SStefan Pintilie// Defines 2 unmasked instructions where the xo field for acc/non-acc version
140625aed2SStefan Pintilie// is even/odd.
150625aed2SStefan Pintiliemulticlass ACC_UM_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
160625aed2SStefan Pintilie                       string asmstr> {
171ac6956bSStefan Pintilie  let Predicates = [MMA, IsNotISAFuture] in {
180625aed2SStefan Pintilie  def NAME :
190625aed2SStefan Pintilie    XX3Form_AT3_XAB6<opcode, !or(xo, 0x01), (outs acc:$AT), IOL,
200625aed2SStefan Pintilie                     !strconcat(asmbase#" ", asmstr), IIC_VecFP, []>,
210625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
220625aed2SStefan Pintilie  def PP :
230625aed2SStefan Pintilie    XX3Form_AT3_XAB6<opcode, xo, (outs acc:$AT), !con((ins acc:$ATi), IOL),
240625aed2SStefan Pintilie                     !strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
250625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
260625aed2SStefan Pintilie  }
271ac6956bSStefan Pintilie  let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
281ac6956bSStefan Pintilie  def NAME#W :
291ac6956bSStefan Pintilie    XX3Form_AT3_XAB6<opcode, !or(xo, 0x01), (outs wacc:$AT), IOL,
301ac6956bSStefan Pintilie                     !strconcat(asmbase#" ", asmstr), IIC_VecFP, []>,
311ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
321ac6956bSStefan Pintilie  def WPP :
331ac6956bSStefan Pintilie    XX3Form_AT3_XAB6<opcode, xo, (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
341ac6956bSStefan Pintilie                     !strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
351ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
361ac6956bSStefan Pintilie  }
370625aed2SStefan Pintilie}
380625aed2SStefan Pintilie
390625aed2SStefan Pintilie// Defines 4 instructions, masked/unmasked with masks 8, 4, 4 bits.
400625aed2SStefan Pintilie// The XO field for acc/non-acc version is even/odd.
410625aed2SStefan Pintiliemulticlass ACC_UM_M844_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
420625aed2SStefan Pintilie                            string asmstr> {
430625aed2SStefan Pintilie  defm NAME : ACC_UM_XOEO<opcode, xo, IOL, asmbase, asmstr>;
441ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
450625aed2SStefan Pintilie  def PM#NAME :
460625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P8_XAB6<
470625aed2SStefan Pintilie      opcode, !or(xo, 0x01), (outs acc:$AT),
480625aed2SStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u8imm:$PMSK)),
490625aed2SStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
500625aed2SStefan Pintilie      IIC_VecFP, []>,
510625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
520625aed2SStefan Pintilie  def PM#NAME#PP :
530625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P8_XAB6<
540625aed2SStefan Pintilie      opcode, xo, (outs acc:$AT),
550625aed2SStefan Pintilie      !con((ins acc:$ATi),
560625aed2SStefan Pintilie           !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u8imm:$PMSK))),
570625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
580625aed2SStefan Pintilie      IIC_VecFP, []>,
590625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
600625aed2SStefan Pintilie  }
611ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
621ac6956bSStefan Pintilie  def PM#NAME#W :
631ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P8_XAB6<
641ac6956bSStefan Pintilie      opcode, !or(xo, 0x01), (outs wacc:$AT),
651ac6956bSStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u8imm:$PMSK)),
661ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
671ac6956bSStefan Pintilie      IIC_VecFP, []>,
681ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
691ac6956bSStefan Pintilie  def PM#NAME#WPP :
701ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P8_XAB6<
711ac6956bSStefan Pintilie      opcode, xo, (outs wacc:$AT),
721ac6956bSStefan Pintilie      !con((ins wacc:$ATi),
731ac6956bSStefan Pintilie           !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u8imm:$PMSK))),
741ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
751ac6956bSStefan Pintilie      IIC_VecFP, []>,
761ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
771ac6956bSStefan Pintilie  }
780625aed2SStefan Pintilie}
790625aed2SStefan Pintilie
800625aed2SStefan Pintilie// Defines 4 instructions, masked/unmasked with masks 4, 4, 4 bits.
810625aed2SStefan Pintilie// The XO field for acc/non-acc version is even/odd.
820625aed2SStefan Pintiliemulticlass ACC_UM_M444_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
830625aed2SStefan Pintilie                            string asmstr> {
840625aed2SStefan Pintilie  defm NAME : ACC_UM_XOEO<opcode, xo, IOL, asmbase, asmstr>;
851ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
860625aed2SStefan Pintilie  def PM#NAME :
870625aed2SStefan Pintilie    MMIRR_XX3Form_XYP4_XAB6<
880625aed2SStefan Pintilie      opcode, !or(xo, 0x01), (outs acc:$AT),
890625aed2SStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u4imm:$PMSK)),
900625aed2SStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
910625aed2SStefan Pintilie      IIC_VecFP, []>,
920625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
930625aed2SStefan Pintilie  def PM#NAME#PP :
940625aed2SStefan Pintilie    MMIRR_XX3Form_XYP4_XAB6<
950625aed2SStefan Pintilie      opcode, xo, (outs acc:$AT),
960625aed2SStefan Pintilie      !con((ins acc:$ATi),
970625aed2SStefan Pintilie           !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u4imm:$PMSK))),
980625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
990625aed2SStefan Pintilie      IIC_VecFP, []>,
1000625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
1010625aed2SStefan Pintilie  }
1021ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
1031ac6956bSStefan Pintilie  def PM#NAME#W :
1041ac6956bSStefan Pintilie    MMIRR_XX3Form_XYP4_XAB6<
1051ac6956bSStefan Pintilie      opcode, !or(xo, 0x01), (outs wacc:$AT),
1061ac6956bSStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u4imm:$PMSK)),
1071ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
1081ac6956bSStefan Pintilie      IIC_VecFP, []>,
1091ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
1101ac6956bSStefan Pintilie  def PM#NAME#WPP :
1111ac6956bSStefan Pintilie    MMIRR_XX3Form_XYP4_XAB6<
1121ac6956bSStefan Pintilie      opcode, xo, (outs wacc:$AT),
1131ac6956bSStefan Pintilie      !con((ins wacc:$ATi),
1141ac6956bSStefan Pintilie           !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u4imm:$PMSK))),
1151ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
1161ac6956bSStefan Pintilie      IIC_VecFP, []>,
1171ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
1181ac6956bSStefan Pintilie  }
1190625aed2SStefan Pintilie}
1200625aed2SStefan Pintilie
1210625aed2SStefan Pintilie// Defines 4 instructions, masked/unmasked with masks 2, 4, 4 bits.
1220625aed2SStefan Pintilie// The XO field for acc/non-acc version is even/odd.
1230625aed2SStefan Pintiliemulticlass ACC_UM_M244_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
1240625aed2SStefan Pintilie                            string asmstr> {
1250625aed2SStefan Pintilie  defm NAME : ACC_UM_XOEO<opcode, xo, IOL, asmbase, asmstr>;
1261ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
1270625aed2SStefan Pintilie  def PM#NAME :
1280625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
1290625aed2SStefan Pintilie      opcode, !or(xo, 0x01), (outs acc:$AT),
1300625aed2SStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK)),
1310625aed2SStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
1320625aed2SStefan Pintilie      IIC_VecFP, []>,
1330625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
1340625aed2SStefan Pintilie  def PM#NAME#PP :
1350625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
1360625aed2SStefan Pintilie      opcode, xo, (outs acc:$AT),
1370625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
1380625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
1390625aed2SStefan Pintilie      IIC_VecFP, []>,
1400625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
1410625aed2SStefan Pintilie  }
1421ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
1431ac6956bSStefan Pintilie  def PM#NAME#W :
1441ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
1451ac6956bSStefan Pintilie      opcode, !or(xo, 0x01), (outs wacc:$AT),
1461ac6956bSStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK)),
1471ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
1481ac6956bSStefan Pintilie      IIC_VecFP, []>,
1491ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
1501ac6956bSStefan Pintilie  def PM#NAME#WPP :
1511ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
1521ac6956bSStefan Pintilie      opcode, xo, (outs wacc:$AT),
1531ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
1541ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
1551ac6956bSStefan Pintilie      IIC_VecFP, []>,
1561ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
1571ac6956bSStefan Pintilie  }
1580625aed2SStefan Pintilie}
1590625aed2SStefan Pintilie
1600625aed2SStefan Pintilie// Defines 4 instructions, masked/unmasked with masks 2, 4, 4 bits.
1610625aed2SStefan Pintilie// Upper nibble of XO field for acc/non-acc version is 0x4/0x6.
1620625aed2SStefan Pintiliemulticlass ACC_UM_M244_XO46<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
1630625aed2SStefan Pintilie                            string asmstr> {
1641ac6956bSStefan Pintilie  let Predicates = [MMA, IsNotISAFuture] in {
1650625aed2SStefan Pintilie  def NAME :
1660625aed2SStefan Pintilie    XX3Form_AT3_XAB6<opcode, xo, (outs acc:$AT), IOL,
1670625aed2SStefan Pintilie                     !strconcat(asmbase#" ", asmstr), IIC_VecFP, []>,
1680625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
1690625aed2SStefan Pintilie  def PP :
1700625aed2SStefan Pintilie    XX3Form_AT3_XAB6<
1710625aed2SStefan Pintilie      opcode, !or(xo, 0x20), (outs acc:$AT), !con((ins acc:$ATi), IOL),
1720625aed2SStefan Pintilie      !strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
1730625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
1740625aed2SStefan Pintilie  }
1751ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
1760625aed2SStefan Pintilie  def PM#NAME :
1770625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
1780625aed2SStefan Pintilie      opcode, xo, (outs acc:$AT),
1790625aed2SStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK)),
1800625aed2SStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
1810625aed2SStefan Pintilie      IIC_VecFP, []>,
1820625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
1830625aed2SStefan Pintilie  def PM#NAME#PP :
1840625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
1850625aed2SStefan Pintilie      opcode, !or(xo, 0x20), (outs acc:$AT),
1860625aed2SStefan Pintilie      !con((ins acc:$ATi),
1870625aed2SStefan Pintilie           !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
1880625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
1890625aed2SStefan Pintilie      IIC_VecFP, []>,
1900625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
1910625aed2SStefan Pintilie  }
1921ac6956bSStefan Pintilie  let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
1931ac6956bSStefan Pintilie  def NAME#W :
1941ac6956bSStefan Pintilie    XX3Form_AT3_XAB6<opcode, xo, (outs wacc:$AT), IOL,
1951ac6956bSStefan Pintilie                     !strconcat(asmbase#" ", asmstr), IIC_VecFP, []>,
1961ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
1971ac6956bSStefan Pintilie  def WPP :
1981ac6956bSStefan Pintilie    XX3Form_AT3_XAB6<
1991ac6956bSStefan Pintilie      opcode, !or(xo, 0x20), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
2001ac6956bSStefan Pintilie      !strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
2011ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2021ac6956bSStefan Pintilie  }
2031ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
2041ac6956bSStefan Pintilie  def PM#NAME#W :
2051ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2061ac6956bSStefan Pintilie      opcode, xo, (outs wacc:$AT),
2071ac6956bSStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK)),
2081ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK, $PMSK"),
2091ac6956bSStefan Pintilie      IIC_VecFP, []>,
2101ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
2111ac6956bSStefan Pintilie  def PM#NAME#WPP :
2121ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2131ac6956bSStefan Pintilie      opcode, !or(xo, 0x20), (outs acc:$AT),
2141ac6956bSStefan Pintilie      !con((ins wacc:$ATi),
2151ac6956bSStefan Pintilie           !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
2161ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
2171ac6956bSStefan Pintilie      IIC_VecFP, []>,
2181ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2191ac6956bSStefan Pintilie  }
2200625aed2SStefan Pintilie}
2210625aed2SStefan Pintilie
2220625aed2SStefan Pintilie// Defines 10 instructions, operand negating, unmasked, masked with 2, 4, 4
2230625aed2SStefan Pintilie// bits. Upper nibble are masked with 0x8, 0x4, 0xC for negating operands.
2240625aed2SStefan Pintiliemulticlass ACC_NEG_UM_M244_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
2250625aed2SStefan Pintilie                                  string asmbase, string asmstr> {
2260625aed2SStefan Pintilie  defm NAME : ACC_UM_M244_XOEO<opcode, xo, IOL, asmbase, asmstr>;
2271ac6956bSStefan Pintilie  let Predicates = [MMA, IsNotISAFuture] in {
2280625aed2SStefan Pintilie  def PN : XX3Form_AT3_XAB6<
2290625aed2SStefan Pintilie             opcode, !or(xo, 0x80), (outs acc:$AT), !con((ins acc:$ATi), IOL),
2300625aed2SStefan Pintilie             !strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
2310625aed2SStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2320625aed2SStefan Pintilie  def NP : XX3Form_AT3_XAB6<
2330625aed2SStefan Pintilie             opcode, !or(xo, 0x40), (outs acc:$AT), !con((ins acc:$ATi), IOL),
2340625aed2SStefan Pintilie             !strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
2350625aed2SStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2360625aed2SStefan Pintilie  def NN : XX3Form_AT3_XAB6<
2370625aed2SStefan Pintilie             opcode, !or(xo, 0xC0), (outs acc:$AT), !con((ins acc:$ATi), IOL),
2380625aed2SStefan Pintilie             !strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
2390625aed2SStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2400625aed2SStefan Pintilie  }
2411ac6956bSStefan Pintilie  let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
2421ac6956bSStefan Pintilie  def WPN : XX3Form_AT3_XAB6<
2431ac6956bSStefan Pintilie              opcode, !or(xo, 0x80), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
2441ac6956bSStefan Pintilie              !strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
2451ac6956bSStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2461ac6956bSStefan Pintilie  def WNP : XX3Form_AT3_XAB6<
2471ac6956bSStefan Pintilie              opcode, !or(xo, 0x40), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
2481ac6956bSStefan Pintilie              !strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
2491ac6956bSStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2501ac6956bSStefan Pintilie  def WNN : XX3Form_AT3_XAB6<
2511ac6956bSStefan Pintilie              opcode, !or(xo, 0xC0), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
2521ac6956bSStefan Pintilie              !strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
2531ac6956bSStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2541ac6956bSStefan Pintilie  }
2551ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
2560625aed2SStefan Pintilie  def PM#NAME#PN :
2570625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2580625aed2SStefan Pintilie      opcode, !or(xo, 0x80), (outs acc:$AT),
2590625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
2600625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK, $PMSK"),
2610625aed2SStefan Pintilie      IIC_VecFP, []>,
2620625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2630625aed2SStefan Pintilie  def PM#NAME#NP :
2640625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2650625aed2SStefan Pintilie      opcode, !or(xo, 0x40), (outs acc:$AT),
2660625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
2670625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK, $PMSK"),
2680625aed2SStefan Pintilie      IIC_VecFP, []>,
2690625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2700625aed2SStefan Pintilie  def PM#NAME#NN :
2710625aed2SStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2720625aed2SStefan Pintilie      opcode, !or(xo, 0xC0), (outs acc:$AT),
2730625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
2740625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK, $PMSK"),
2750625aed2SStefan Pintilie      IIC_VecFP, []>,
2760625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2770625aed2SStefan Pintilie  }
2781ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
2791ac6956bSStefan Pintilie  def PM#NAME#WPN :
2801ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2811ac6956bSStefan Pintilie      opcode, !or(xo, 0x80), (outs wacc:$AT),
2821ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
2831ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK, $PMSK"),
2841ac6956bSStefan Pintilie      IIC_VecFP, []>,
2851ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2861ac6956bSStefan Pintilie  def PM#NAME#WNP :
2871ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2881ac6956bSStefan Pintilie      opcode, !or(xo, 0x40), (outs wacc:$AT),
2891ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
2901ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK, $PMSK"),
2911ac6956bSStefan Pintilie      IIC_VecFP, []>,
2921ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
2931ac6956bSStefan Pintilie  def PM#NAME#WNN :
2941ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4P2_XAB6<
2951ac6956bSStefan Pintilie      opcode, !or(xo, 0xC0), (outs wacc:$AT),
2961ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
2971ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK, $PMSK"),
2981ac6956bSStefan Pintilie      IIC_VecFP, []>,
2991ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3001ac6956bSStefan Pintilie  }
3010625aed2SStefan Pintilie}
3020625aed2SStefan Pintilie
3030625aed2SStefan Pintilie// Defines 5 instructions, unmasked, operand negating.
3040625aed2SStefan Pintilie// Upper nibble are masked with 0x8, 0x4, 0xC for negating operands.
3050625aed2SStefan Pintiliemulticlass ACC_NEG_UM_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
3060625aed2SStefan Pintilie                             string asmbase, string asmstr> {
3070625aed2SStefan Pintilie  defm NAME : ACC_UM_XOEO<opcode, xo, IOL, asmbase, asmstr>;
3081ac6956bSStefan Pintilie  let Predicates = [MMA, IsNotISAFuture] in {
3090625aed2SStefan Pintilie  def PN : XX3Form_AT3_XAB6<opcode, !or(xo, 0x80), (outs acc:$AT),
3100625aed2SStefan Pintilie                            !con((ins acc:$ATi), IOL),
3110625aed2SStefan Pintilie                            !strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
3120625aed2SStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3130625aed2SStefan Pintilie  def NP : XX3Form_AT3_XAB6<opcode, !or(xo, 0x40), (outs acc:$AT),
3140625aed2SStefan Pintilie                            !con((ins acc:$ATi), IOL),
3150625aed2SStefan Pintilie                            !strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
3160625aed2SStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3170625aed2SStefan Pintilie  def NN : XX3Form_AT3_XAB6<opcode, !or(xo, 0xC0), (outs acc:$AT),
3180625aed2SStefan Pintilie                            !con((ins acc:$ATi), IOL),
3190625aed2SStefan Pintilie                            !strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
3200625aed2SStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3210625aed2SStefan Pintilie  }
3221ac6956bSStefan Pintilie  let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
3231ac6956bSStefan Pintilie  def WPN : XX3Form_AT3_XAB6<opcode, !or(xo, 0x80), (outs wacc:$AT),
3241ac6956bSStefan Pintilie                            !con((ins wacc:$ATi), IOL),
3251ac6956bSStefan Pintilie                            !strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
3261ac6956bSStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3271ac6956bSStefan Pintilie  def WNP : XX3Form_AT3_XAB6<opcode, !or(xo, 0x40), (outs wacc:$AT),
3281ac6956bSStefan Pintilie                            !con((ins wacc:$ATi), IOL),
3291ac6956bSStefan Pintilie                            !strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
3301ac6956bSStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3311ac6956bSStefan Pintilie  def WNN : XX3Form_AT3_XAB6<opcode, !or(xo, 0xC0), (outs wacc:$AT),
3321ac6956bSStefan Pintilie                            !con((ins wacc:$ATi), IOL),
3331ac6956bSStefan Pintilie                            !strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
3341ac6956bSStefan Pintilie           RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3351ac6956bSStefan Pintilie  }
3360625aed2SStefan Pintilie}
3370625aed2SStefan Pintilie
3380625aed2SStefan Pintilie// Defines 10 instructions, operand negating, unmasked, masked with 4, 4 bits.
3390625aed2SStefan Pintilie// Upper nibble are masked with 0x8, 0x4, 0xC for negating operands.
3400625aed2SStefan Pintiliemulticlass ACC_NEG_UM_M44_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
3410625aed2SStefan Pintilie                                 string asmbase, string asmstr> {
3420625aed2SStefan Pintilie  defm NAME : ACC_NEG_UM_XOM84C<opcode, xo, IOL, asmbase, asmstr>;
3431ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
3440625aed2SStefan Pintilie  def PM#NAME :
3450625aed2SStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3460625aed2SStefan Pintilie      opcode, !or(xo, 0x01), (outs acc:$AT),
3470625aed2SStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK)),
3480625aed2SStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK"),
3490625aed2SStefan Pintilie      IIC_VecFP, []>,
3500625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
3510625aed2SStefan Pintilie  def PM#NAME#PP :
3520625aed2SStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3530625aed2SStefan Pintilie      opcode, xo, (outs acc:$AT),
3540625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
3550625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
3560625aed2SStefan Pintilie      IIC_VecFP, []>,
3570625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3580625aed2SStefan Pintilie  def PM#NAME#PN :
3590625aed2SStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3600625aed2SStefan Pintilie      opcode, !or(xo, 0x80), (outs acc:$AT),
3610625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
3620625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
3630625aed2SStefan Pintilie      IIC_VecFP, []>,
3640625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3650625aed2SStefan Pintilie  def PM#NAME#NP :
3660625aed2SStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3670625aed2SStefan Pintilie      opcode, !or(xo, 0x40), (outs acc:$AT),
3680625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
3690625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
3700625aed2SStefan Pintilie      IIC_VecFP, []>,
3710625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3720625aed2SStefan Pintilie  def PM#NAME#NN :
3730625aed2SStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3740625aed2SStefan Pintilie      opcode, !or(xo, 0xC0), (outs acc:$AT),
3750625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
3760625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
3770625aed2SStefan Pintilie      IIC_VecFP, []>,
3780625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3790625aed2SStefan Pintilie  }
3801ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
3811ac6956bSStefan Pintilie  def PM#NAME#W :
3821ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3831ac6956bSStefan Pintilie      opcode, !or(xo, 0x01), (outs wacc:$AT),
3841ac6956bSStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK)),
3851ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK"),
3861ac6956bSStefan Pintilie      IIC_VecFP, []>,
3871ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
3881ac6956bSStefan Pintilie  def PM#NAME#WPP :
3891ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3901ac6956bSStefan Pintilie      opcode, xo, (outs wacc:$AT),
3911ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
3921ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
3931ac6956bSStefan Pintilie      IIC_VecFP, []>,
3941ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
3951ac6956bSStefan Pintilie  def PM#NAME#WPN :
3961ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
3971ac6956bSStefan Pintilie      opcode, !or(xo, 0x80), (outs wacc:$AT),
3981ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
3991ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
4001ac6956bSStefan Pintilie      IIC_VecFP, []>,
4011ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4021ac6956bSStefan Pintilie  def PM#NAME#WNP :
4031ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
4041ac6956bSStefan Pintilie      opcode, !or(xo, 0x40), (outs wacc:$AT),
4051ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
4061ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
4071ac6956bSStefan Pintilie      IIC_VecFP, []>,
4081ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4091ac6956bSStefan Pintilie  def PM#NAME#WNN :
4101ac6956bSStefan Pintilie    MMIRR_XX3Form_XY4_XAB6<
4111ac6956bSStefan Pintilie      opcode, !or(xo, 0xC0), (outs wacc:$AT),
4121ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
4131ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
4141ac6956bSStefan Pintilie      IIC_VecFP, []>,
4151ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4161ac6956bSStefan Pintilie  }
4170625aed2SStefan Pintilie}
4180625aed2SStefan Pintilie
4190625aed2SStefan Pintilie// Defines 10 instructions, operand negating, unmasked, masked with 4, 2 bits.
4200625aed2SStefan Pintilie// Upper nibble are masked with 0x8, 0x4, 0xC for negating operands.
4210625aed2SStefan Pintiliemulticlass ACC_NEG_UM_M42_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
4220625aed2SStefan Pintilie                                 string asmbase, string asmstr> {
4230625aed2SStefan Pintilie  defm NAME : ACC_NEG_UM_XOM84C<opcode, xo, IOL, asmbase, asmstr>;
4241ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
4250625aed2SStefan Pintilie  def PM#NAME :
4260625aed2SStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4270625aed2SStefan Pintilie      opcode, !or(xo, 0x01), (outs acc:$AT),
4280625aed2SStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK)),
4290625aed2SStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK"),
4300625aed2SStefan Pintilie      IIC_VecFP, []>,
4310625aed2SStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
4320625aed2SStefan Pintilie  def PM#NAME#PP :
4330625aed2SStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4340625aed2SStefan Pintilie      opcode, xo, (outs acc:$AT),
4350625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4360625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
4370625aed2SStefan Pintilie      IIC_VecFP, []>,
4380625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4390625aed2SStefan Pintilie  def PM#NAME#PN :
4400625aed2SStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4410625aed2SStefan Pintilie      opcode, !or(xo, 0x80), (outs acc:$AT),
4420625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4430625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
4440625aed2SStefan Pintilie      IIC_VecFP, []>,
4450625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4460625aed2SStefan Pintilie  def PM#NAME#NP :
4470625aed2SStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4480625aed2SStefan Pintilie      opcode, !or(xo, 0x40), (outs acc:$AT),
4490625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4500625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
4510625aed2SStefan Pintilie      IIC_VecFP, []>,
4520625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4530625aed2SStefan Pintilie  def PM#NAME#NN :
4540625aed2SStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4550625aed2SStefan Pintilie      opcode, !or(xo, 0xC0), (outs acc:$AT),
4560625aed2SStefan Pintilie      !con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4570625aed2SStefan Pintilie      !strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
4580625aed2SStefan Pintilie      IIC_VecFP, []>,
4590625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4600625aed2SStefan Pintilie  }
4611ac6956bSStefan Pintilie  let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
4621ac6956bSStefan Pintilie  def PM#NAME#W :
4631ac6956bSStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4641ac6956bSStefan Pintilie      opcode, !or(xo, 0x01), (outs wacc:$AT),
4651ac6956bSStefan Pintilie      !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK)),
4661ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#" ", asmstr#", $XMSK, $YMSK"),
4671ac6956bSStefan Pintilie      IIC_VecFP, []>,
4681ac6956bSStefan Pintilie    RegConstraint<"@earlyclobber $AT">;
4691ac6956bSStefan Pintilie  def PM#NAME#WPP :
4701ac6956bSStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4711ac6956bSStefan Pintilie      opcode, xo, (outs wacc:$AT),
4721ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4731ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
4741ac6956bSStefan Pintilie      IIC_VecFP, []>,
4751ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4761ac6956bSStefan Pintilie  def PM#NAME#WPN :
4771ac6956bSStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4781ac6956bSStefan Pintilie      opcode, !or(xo, 0x80), (outs wacc:$AT),
4791ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4801ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
4811ac6956bSStefan Pintilie      IIC_VecFP, []>,
4821ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4831ac6956bSStefan Pintilie  def PM#NAME#WNP :
4841ac6956bSStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4851ac6956bSStefan Pintilie      opcode, !or(xo, 0x40), (outs wacc:$AT),
4861ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4871ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
4881ac6956bSStefan Pintilie      IIC_VecFP, []>,
4891ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4901ac6956bSStefan Pintilie  def PM#NAME#WNN :
4911ac6956bSStefan Pintilie    MMIRR_XX3Form_X4Y2_XAB6<
4921ac6956bSStefan Pintilie      opcode, !or(xo, 0xC0), (outs wacc:$AT),
4931ac6956bSStefan Pintilie      !con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
4941ac6956bSStefan Pintilie      !strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
4951ac6956bSStefan Pintilie      IIC_VecFP, []>,
4961ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
4971ac6956bSStefan Pintilie  }
4980625aed2SStefan Pintilie}
4990625aed2SStefan Pintilie
5000625aed2SStefan Pintilie// End of class definitions.
5010625aed2SStefan Pintilie//-----------------------------------------------------------------------------
5020625aed2SStefan Pintilie
5031ac6956bSStefan Pintilielet Predicates = [MMA, IsNotISAFuture] in {
5040625aed2SStefan Pintilie  def XXMFACC :
505*4b43ef3eSJames Y Knight    XForm_AT3<31, 0, 177, (outs acc:$ATo), (ins acc:$AT), "xxmfacc $AT",
5060625aed2SStefan Pintilie              IIC_VecGeneral,
507*4b43ef3eSJames Y Knight              [(set v512i1:$ATo, (int_ppc_mma_xxmfacc v512i1:$AT))]>,
508*4b43ef3eSJames Y Knight              RegConstraint<"$ATo = $AT">, NoEncode<"$ATo">;
5090625aed2SStefan Pintilie  def XXMTACC :
5100625aed2SStefan Pintilie    XForm_AT3<31, 1, 177, (outs acc:$AT), (ins acc:$ATi), "xxmtacc $AT",
5110625aed2SStefan Pintilie              IIC_VecGeneral,
5120625aed2SStefan Pintilie              [(set v512i1:$AT, (int_ppc_mma_xxmtacc v512i1:$ATi))]>,
5130625aed2SStefan Pintilie              RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
5140625aed2SStefan Pintilie  def KILL_PAIR : PPCPostRAExpPseudo<(outs vsrprc:$XTp), (ins vsrprc:$XSp),
5150625aed2SStefan Pintilie                                      "#KILL_PAIR", []>,
5160625aed2SStefan Pintilie                                      RegConstraint<"$XTp = $XSp">;
5170625aed2SStefan Pintilie  def BUILD_UACC : PPCPostRAExpPseudo<(outs acc:$AT), (ins uacc:$AS),
5180625aed2SStefan Pintilie                                      "#BUILD_UACC $AT, $AS", []>;
5190625aed2SStefan Pintilie  // We define XXSETACCZ as rematerializable to undo CSE of that intrinsic in
5200625aed2SStefan Pintilie  // the backend. We avoid CSE here because it generates a copy of the acc
5210625aed2SStefan Pintilie  // register and this copy is more expensive than calling the intrinsic again.
5220625aed2SStefan Pintilie  let isAsCheapAsAMove = 1, isReMaterializable = 1 in {
5230625aed2SStefan Pintilie    def XXSETACCZ :
5240625aed2SStefan Pintilie      XForm_AT3<31, 3, 177, (outs acc:$AT), (ins), "xxsetaccz $AT", IIC_VecGeneral,
5250625aed2SStefan Pintilie                [(set v512i1:$AT, (int_ppc_mma_xxsetaccz))]>;
5260625aed2SStefan Pintilie  }
5270625aed2SStefan Pintilie  def XVI8GER4SPP :
5280625aed2SStefan Pintilie    XX3Form_AT3_XAB6<59, 99, (outs acc:$AT), (ins acc:$ATi, vsrc:$XA, vsrc:$XB),
5290625aed2SStefan Pintilie                     "xvi8ger4spp $AT, $XA, $XB", IIC_VecGeneral, []>,
5300625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
5310625aed2SStefan Pintilie  let mayStore = 1 in {
5320625aed2SStefan Pintilie    def SPILL_ACC: PPCEmitTimePseudo<(outs), (ins acc:$AT, memrix16:$dst),
5330625aed2SStefan Pintilie                                     "#SPILL_ACC", []>;
5340625aed2SStefan Pintilie    def SPILL_UACC: PPCEmitTimePseudo<(outs), (ins uacc:$AT, memrix16:$dst),
5350625aed2SStefan Pintilie                                     "#SPILL_UACC", []>;
5360625aed2SStefan Pintilie  }
5370625aed2SStefan Pintilie  let mayLoad = 1, hasSideEffects = 0 in {
5380625aed2SStefan Pintilie    def RESTORE_ACC: PPCEmitTimePseudo<(outs acc:$AT), (ins memrix16:$src),
5390625aed2SStefan Pintilie                                       "#RESTORE_ACC", []>;
5400625aed2SStefan Pintilie    def RESTORE_UACC: PPCEmitTimePseudo<(outs uacc:$AT), (ins memrix16:$src),
5410625aed2SStefan Pintilie                                       "#RESTORE_UACC", []>;
5420625aed2SStefan Pintilie  }
5430625aed2SStefan Pintilie}
5440625aed2SStefan Pintilie
5451ac6956bSStefan Pintilielet Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
5461ac6956bSStefan Pintilie  // For Future and up XXMFACCW and XXMTACCW will not have patterns.
5471ac6956bSStefan Pintilie  // On Future CPU the wacc registers no longer overlap with the vsr registers
5481ac6956bSStefan Pintilie  // and so register allocation would have to know to match 4 vsr registers
5491ac6956bSStefan Pintilie  // with one wacc register.
5501ac6956bSStefan Pintilie  // On top of that Future CPU has a more convenient way to move between vsrs
5511ac6956bSStefan Pintilie  // and wacc registers using xxextfdmr512 and xxinstdmr512.
5521ac6956bSStefan Pintilie  def XXMFACCW :
553*4b43ef3eSJames Y Knight    XForm_AT3<31, 0, 177, (outs wacc:$ATo), (ins wacc:$AT), "xxmfacc $AT",
5541ac6956bSStefan Pintilie              IIC_VecGeneral, []>,
555*4b43ef3eSJames Y Knight              RegConstraint<"$ATo = $AT">, NoEncode<"$ATo">;
5561ac6956bSStefan Pintilie  def XXMTACCW :
5571ac6956bSStefan Pintilie    XForm_AT3<31, 1, 177, (outs wacc:$AT), (ins wacc:$ATi), "xxmtacc $AT",
5581ac6956bSStefan Pintilie              IIC_VecGeneral, []>,
5591ac6956bSStefan Pintilie              RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
5601ac6956bSStefan Pintilie
5611ac6956bSStefan Pintilie  let isAsCheapAsAMove = 1, isReMaterializable = 1 in {
5621ac6956bSStefan Pintilie    def XXSETACCZW :
5631ac6956bSStefan Pintilie      XForm_AT3<31, 3, 177, (outs wacc:$AT), (ins), "xxsetaccz $AT",
5641ac6956bSStefan Pintilie                IIC_VecGeneral, [(set v512i1:$AT, (int_ppc_mma_xxsetaccz))]>;
5651ac6956bSStefan Pintilie  }
5661ac6956bSStefan Pintilie
5671ac6956bSStefan Pintilie  def XVI8GER4WSPP :
5681ac6956bSStefan Pintilie    XX3Form_AT3_XAB6<59, 99, (outs wacc:$AT),
5691ac6956bSStefan Pintilie                     (ins wacc:$ATi, vsrc:$XA, vsrc:$XB),
5701ac6956bSStefan Pintilie                     "xvi8ger4spp $AT, $XA, $XB", IIC_VecGeneral, []>,
5711ac6956bSStefan Pintilie                     RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
5721ac6956bSStefan Pintilie
5731ac6956bSStefan Pintilie  let mayStore = 1 in {
5741ac6956bSStefan Pintilie    def SPILL_WACC: PPCEmitTimePseudo<(outs), (ins wacc:$AT, memrix16:$dst),
5751ac6956bSStefan Pintilie                                      "#SPILL_WACC", []>;
5761ac6956bSStefan Pintilie  }
5771ac6956bSStefan Pintilie  let mayLoad = 1, hasSideEffects = 0 in {
5781ac6956bSStefan Pintilie    def RESTORE_WACC: PPCEmitTimePseudo<(outs wacc:$AT), (ins memrix16:$src),
5791ac6956bSStefan Pintilie                                        "#RESTORE_WACC", []>;
5801ac6956bSStefan Pintilie  }
5811ac6956bSStefan Pintilie}
5821ac6956bSStefan Pintilie
5831ac6956bSStefan Pintilielet Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
5840625aed2SStefan Pintilie  def PMXVI8GER4SPP :
5850625aed2SStefan Pintilie    MMIRR_XX3Form_XYP4_XAB6<59, 99, (outs acc:$AT),
5860625aed2SStefan Pintilie                            (ins acc:$ATi, vsrc:$XA,vsrc:$XB, u4imm:$XMSK,
5870625aed2SStefan Pintilie                             u4imm:$YMSK, u4imm:$PMSK),
5880625aed2SStefan Pintilie                            "pmxvi8ger4spp $AT, $XA, $XB, $XMSK, $YMSK, $PMSK",
5890625aed2SStefan Pintilie                            IIC_VecGeneral, []>,
5900625aed2SStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
5910625aed2SStefan Pintilie}
5920625aed2SStefan Pintilie
5931ac6956bSStefan Pintilielet Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
5941ac6956bSStefan Pintilie  def PMXVI8GER4WSPP :
5951ac6956bSStefan Pintilie    MMIRR_XX3Form_XYP4_XAB6<59, 99, (outs wacc:$AT),
5961ac6956bSStefan Pintilie                            (ins wacc:$ATi, vsrc:$XA,vsrc:$XB, u4imm:$XMSK,
5971ac6956bSStefan Pintilie                             u4imm:$YMSK, u4imm:$PMSK),
5981ac6956bSStefan Pintilie                            "pmxvi8ger4spp $AT, $XA, $XB, $XMSK, $YMSK, $PMSK",
5991ac6956bSStefan Pintilie                            IIC_VecGeneral, []>,
6001ac6956bSStefan Pintilie    RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
6011ac6956bSStefan Pintilie}
6021ac6956bSStefan Pintilie
6030625aed2SStefan Pintilie// MMA accumulating/non-accumulating instructions.
6040625aed2SStefan Pintilie//------------------------------------------------------------------------------
6050625aed2SStefan Pintilie
6060625aed2SStefan Pintilie// XVBF16GER2, XVBF16GER2PP, XVBF16GER2PN, XVBF16GER2NP, XVBF16GER2NN
6070625aed2SStefan Pintilie// PMXVBF16GER2, PMXVBF16GER2PP, PMXVBF16GER2PN, PMXVBF16GER2NP, PMXVBF16GER2NN
6080625aed2SStefan Pintiliedefm XVBF16GER2 : ACC_NEG_UM_M244_XOM84C<59, 50, (ins vsrc:$XA, vsrc:$XB),
6090625aed2SStefan Pintilie                                         "xvbf16ger2", "$AT, $XA, $XB">;
6100625aed2SStefan Pintilie
6110625aed2SStefan Pintilie// XVI4GER8, XVI4GER8PP, PMXVI4GER8,  PMXVI4GER8PP
6120625aed2SStefan Pintiliedefm XVI4GER8 : ACC_UM_M844_XOEO<59, 34, (ins vsrc:$XA, vsrc:$XB),
6130625aed2SStefan Pintilie                                 "xvi4ger8", "$AT, $XA, $XB">;
6140625aed2SStefan Pintilie
6150625aed2SStefan Pintilie// XVI8GER4, XVI8GER4PP, PMXVI8GER4, PMXVI8GER4PP
6160625aed2SStefan Pintiliedefm XVI8GER4 : ACC_UM_M444_XOEO<59, 2, (ins vsrc:$XA, vsrc:$XB),
6170625aed2SStefan Pintilie                                 "xvi8ger4", "$AT, $XA, $XB">;
6180625aed2SStefan Pintilie
6190625aed2SStefan Pintilie// XVI16GER2, XVI16GER2PP, PMXVI16GER2, PMXVI16GER2PP
6200625aed2SStefan Pintiliedefm XVI16GER2 : ACC_UM_M244_XO46<59, 75, (ins vsrc:$XA, vsrc:$XB),
6210625aed2SStefan Pintilie                                  "xvi16ger2", "$AT, $XA, $XB">;
6220625aed2SStefan Pintilie
6230625aed2SStefan Pintilie// XVI16GER2S, XVI16GER2SPP, PMXVI16GER2S, PMXVI16GER2SPP
6240625aed2SStefan Pintiliedefm XVI16GER2S : ACC_UM_M244_XOEO<59, 42, (ins vsrc:$XA, vsrc:$XB),
6250625aed2SStefan Pintilie                                   "xvi16ger2s", "$AT, $XA, $XB">;
6260625aed2SStefan Pintilie
6270625aed2SStefan Pintilie// XVF16GER2, XVF16GER2PP, XVF16GER2PN, XVF16GER2NP, XVF16GER2NN
6280625aed2SStefan Pintilie// PMXVF16GER2, PMXVF16GER2PP, PMXVF16GER2PN, PMXVF16GER2NP, PMXVF16GER2NN
6290625aed2SStefan Pintiliedefm XVF16GER2 : ACC_NEG_UM_M244_XOM84C<59, 18, (ins vsrc:$XA, vsrc:$XB),
6300625aed2SStefan Pintilie                                        "xvf16ger2", "$AT, $XA, $XB">;
6310625aed2SStefan Pintilie
6320625aed2SStefan Pintilie// XVF32GER, XVF32GERPP, XVF32GERPN, XVF32GERNP, XVF32GERPP
6330625aed2SStefan Pintilie// PMXVF32GER, PMXVF32GERPP, PMXVF32GERPN, PMXVF32GERNP, PMXVF32GERPP
6340625aed2SStefan Pintiliedefm XVF32GER : ACC_NEG_UM_M44_XOM84C<59, 26, (ins vsrc:$XA, vsrc:$XB),
6350625aed2SStefan Pintilie                                      "xvf32ger", "$AT, $XA, $XB">;
6360625aed2SStefan Pintilie
6370625aed2SStefan Pintilie// XVF64GER, XVF64GERPP, XVF64GERPN, XVF64GERNP, XVF64GERNN
6380625aed2SStefan Pintilie// PMXVF64GER, PMXVF64GERPP, PMXVF64GERPN, PMXVF64GERNP, PMXVF64GERNN
6390625aed2SStefan Pintiliedefm XVF64GER : ACC_NEG_UM_M42_XOM84C<59, 58, (ins vsrpevenrc:$XA, vsrc:$XB),
6400625aed2SStefan Pintilie                                      "xvf64ger", "$AT, $XA, $XB">;
6410625aed2SStefan Pintilie//------------------------------------------------------------------------------
6420625aed2SStefan Pintilie
6430625aed2SStefan Pintilie// MMA Intrinsics
6441ac6956bSStefan Pintilielet Predicates = [MMA, IsNotISAFuture] in {
6450625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi4ger8 v16i8:$XA, v16i8:$XB)),
6460625aed2SStefan Pintilie            (XVI4GER8 RCCp.AToVSRC, RCCp.BToVSRC)>;
6470625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi4ger8pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6480625aed2SStefan Pintilie            (XVI4GER8PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6490625aed2SStefan Pintilie
6500625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi8ger4 v16i8:$XA, v16i8:$XB)),
6510625aed2SStefan Pintilie            (XVI8GER4 RCCp.AToVSRC, RCCp.BToVSRC)>;
6520625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi8ger4pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6530625aed2SStefan Pintilie            (XVI8GER4PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6540625aed2SStefan Pintilie
6550625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2s v16i8:$XA, v16i8:$XB)),
6560625aed2SStefan Pintilie            (XVI16GER2S RCCp.AToVSRC, RCCp.BToVSRC)>;
6570625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2spp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6580625aed2SStefan Pintilie            (XVI16GER2SPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6591ac6956bSStefan Pintilie}
6600625aed2SStefan Pintilie
6611ac6956bSStefan Pintilielet Predicates = [MMA, IsISAFuture] in {
6621ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi4ger8 v16i8:$XA, v16i8:$XB)),
6631ac6956bSStefan Pintilie            (XVI4GER8W RCCp.AToVSRC, RCCp.BToVSRC)>;
6641ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi4ger8pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6651ac6956bSStefan Pintilie            (XVI4GER8WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6661ac6956bSStefan Pintilie
6671ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi8ger4 v16i8:$XA, v16i8:$XB)),
6681ac6956bSStefan Pintilie            (XVI8GER4W RCCp.AToVSRC, RCCp.BToVSRC)>;
6691ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi8ger4pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6701ac6956bSStefan Pintilie            (XVI8GER4WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6711ac6956bSStefan Pintilie
6721ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2s v16i8:$XA, v16i8:$XB)),
6731ac6956bSStefan Pintilie            (XVI16GER2SW RCCp.AToVSRC, RCCp.BToVSRC)>;
6741ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2spp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6751ac6956bSStefan Pintilie            (XVI16GER2SWPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6761ac6956bSStefan Pintilie}
6771ac6956bSStefan Pintilie
6781ac6956bSStefan Pintilielet Predicates = [MMA, IsNotISAFuture] in {
6790625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2 v16i8:$XA, v16i8:$XB)),
6800625aed2SStefan Pintilie            (XVF16GER2 RCCp.AToVSRC, RCCp.BToVSRC)>;
6810625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6820625aed2SStefan Pintilie            (XVF16GER2PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6830625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6840625aed2SStefan Pintilie            (XVF16GER2PN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6850625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6860625aed2SStefan Pintilie            (XVF16GER2NP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6870625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6880625aed2SStefan Pintilie            (XVF16GER2NN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6891ac6956bSStefan Pintilie}
6900625aed2SStefan Pintilie
6911ac6956bSStefan Pintilielet Predicates = [MMA, IsISAFuture] in {
6921ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2 v16i8:$XA, v16i8:$XB)),
6931ac6956bSStefan Pintilie            (XVF16GER2W RCCp.AToVSRC, RCCp.BToVSRC)>;
6941ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6951ac6956bSStefan Pintilie            (XVF16GER2WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6961ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6971ac6956bSStefan Pintilie            (XVF16GER2WPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
6981ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
6991ac6956bSStefan Pintilie            (XVF16GER2WNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7001ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7011ac6956bSStefan Pintilie            (XVF16GER2WNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7021ac6956bSStefan Pintilie}
7031ac6956bSStefan Pintilie
7041ac6956bSStefan Pintilielet Predicates = [MMA, IsNotISAFuture] in {
7050625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32ger v16i8:$XA, v16i8:$XB)),
7060625aed2SStefan Pintilie            (XVF32GER RCCp.AToVSRC, RCCp.BToVSRC)>;
7070625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gerpp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7080625aed2SStefan Pintilie            (XVF32GERPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7090625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gerpn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7100625aed2SStefan Pintilie            (XVF32GERPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7110625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gernp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7120625aed2SStefan Pintilie            (XVF32GERNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7130625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gernn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7140625aed2SStefan Pintilie            (XVF32GERNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7150625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64ger v256i1:$XA, v16i8:$XB)),
7160625aed2SStefan Pintilie            (XVF64GER $XA, RCCp.BToVSRC)>;
7170625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gerpp v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7180625aed2SStefan Pintilie            (XVF64GERPP $ATi, $XA, RCCp.BToVSRC)>;
7190625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gerpn v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7200625aed2SStefan Pintilie            (XVF64GERPN $ATi, $XA, RCCp.BToVSRC)>;
7210625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gernp v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7220625aed2SStefan Pintilie            (XVF64GERNP $ATi, $XA, RCCp.BToVSRC)>;
7230625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gernn v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7240625aed2SStefan Pintilie            (XVF64GERNN $ATi, $XA, RCCp.BToVSRC)>;
7250625aed2SStefan Pintilie
7260625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2 v16i8:$XA, v16i8:$XB)),
7270625aed2SStefan Pintilie            (XVBF16GER2 RCCp.AToVSRC, RCCp.BToVSRC)>;
7280625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7290625aed2SStefan Pintilie            (XVBF16GER2PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7300625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7310625aed2SStefan Pintilie            (XVBF16GER2PN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7320625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7330625aed2SStefan Pintilie            (XVBF16GER2NP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7340625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7350625aed2SStefan Pintilie            (XVBF16GER2NN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7360625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2 v16i8:$XA, v16i8:$XB)),
7370625aed2SStefan Pintilie            (XVI16GER2 RCCp.AToVSRC, RCCp.BToVSRC)>;
7380625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7390625aed2SStefan Pintilie            (XVI16GER2PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7400625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi8ger4spp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7410625aed2SStefan Pintilie            (XVI8GER4SPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7420625aed2SStefan Pintilie}
7430625aed2SStefan Pintilie
7441ac6956bSStefan Pintilielet Predicates = [MMA, IsISAFuture] in {
7451ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32ger v16i8:$XA, v16i8:$XB)),
7461ac6956bSStefan Pintilie            (XVF32GERW RCCp.AToVSRC, RCCp.BToVSRC)>;
7471ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gerpp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7481ac6956bSStefan Pintilie            (XVF32GERWPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7491ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gerpn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7501ac6956bSStefan Pintilie            (XVF32GERWPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7511ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gernp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7521ac6956bSStefan Pintilie            (XVF32GERWNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7531ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf32gernn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7541ac6956bSStefan Pintilie            (XVF32GERWNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7551ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64ger v256i1:$XA, v16i8:$XB)),
7561ac6956bSStefan Pintilie            (XVF64GERW $XA, RCCp.BToVSRC)>;
7571ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gerpp v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7581ac6956bSStefan Pintilie            (XVF64GERWPP $ATi, $XA, RCCp.BToVSRC)>;
7591ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gerpn v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7601ac6956bSStefan Pintilie            (XVF64GERWPN $ATi, $XA, RCCp.BToVSRC)>;
7611ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gernp v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7621ac6956bSStefan Pintilie            (XVF64GERNP $ATi, $XA, RCCp.BToVSRC)>;
7631ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvf64gernn v512i1:$ATi, v256i1:$XA, v16i8:$XB)),
7641ac6956bSStefan Pintilie            (XVF64GERWNN $ATi, $XA, RCCp.BToVSRC)>;
7651ac6956bSStefan Pintilie
7661ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2 v16i8:$XA, v16i8:$XB)),
7671ac6956bSStefan Pintilie            (XVBF16GER2W RCCp.AToVSRC, RCCp.BToVSRC)>;
7681ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7691ac6956bSStefan Pintilie            (XVBF16GER2WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7701ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7711ac6956bSStefan Pintilie            (XVBF16GER2WPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7721ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7731ac6956bSStefan Pintilie            (XVBF16GER2WNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7741ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvbf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7751ac6956bSStefan Pintilie            (XVBF16GER2WNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7761ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2 v16i8:$XA, v16i8:$XB)),
7771ac6956bSStefan Pintilie            (XVI16GER2W RCCp.AToVSRC, RCCp.BToVSRC)>;
7781ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7791ac6956bSStefan Pintilie            (XVI16GER2WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7801ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_xvi8ger4spp v512i1:$ATi, v16i8:$XA, v16i8:$XB)),
7811ac6956bSStefan Pintilie            (XVI8GER4WSPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC)>;
7821ac6956bSStefan Pintilie}
7830625aed2SStefan Pintilie// MMA Intrinsics
7841ac6956bSStefan Pintilie
7851ac6956bSStefan Pintilielet Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
7860625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi4ger8 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
7870625aed2SStefan Pintilie                                            Msk4Imm:$YMSK, Msk8Imm:$PMSK)),
7880625aed2SStefan Pintilie            (PMXVI4GER8 RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
7890625aed2SStefan Pintilie                        Msk4Imm:$YMSK, Msk8Imm:$PMSK)>;
7900625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi4ger8pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
7910625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK,
7920625aed2SStefan Pintilie                                              Msk8Imm:$PMSK)),
7930625aed2SStefan Pintilie            (PMXVI4GER8PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
7940625aed2SStefan Pintilie                          Msk4Imm:$YMSK, Msk8Imm:$PMSK)>;
7950625aed2SStefan Pintilie
7960625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi8ger4 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
7970625aed2SStefan Pintilie                                            Msk4Imm:$YMSK, Msk4Imm:$PMSK)),
7980625aed2SStefan Pintilie            (PMXVI8GER4 RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
7990625aed2SStefan Pintilie                        Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
8000625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi8ger4pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8010625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8020625aed2SStefan Pintilie                                              Msk4Imm:$PMSK)),
8030625aed2SStefan Pintilie            (PMXVI8GER4PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8040625aed2SStefan Pintilie                          Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
8050625aed2SStefan Pintilie
8060625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2s v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
8070625aed2SStefan Pintilie                                              Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
8080625aed2SStefan Pintilie            (PMXVI16GER2S RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8090625aed2SStefan Pintilie                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8100625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2spp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8110625aed2SStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8120625aed2SStefan Pintilie                                                Msk2Imm:$PMSK)),
8130625aed2SStefan Pintilie            (PMXVI16GER2SPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8140625aed2SStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8150625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
8160625aed2SStefan Pintilie                                             Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
8170625aed2SStefan Pintilie            (PMXVF16GER2 RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8180625aed2SStefan Pintilie                         Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8190625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8200625aed2SStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8210625aed2SStefan Pintilie                                               Msk2Imm:$PMSK)),
8220625aed2SStefan Pintilie            (PMXVF16GER2PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8230625aed2SStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8240625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8250625aed2SStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8260625aed2SStefan Pintilie                                               Msk2Imm:$PMSK)),
8270625aed2SStefan Pintilie            (PMXVF16GER2PN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8280625aed2SStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8290625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8300625aed2SStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8310625aed2SStefan Pintilie                                               Msk2Imm:$PMSK)),
8320625aed2SStefan Pintilie            (PMXVF16GER2NP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8330625aed2SStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8340625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8350625aed2SStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8360625aed2SStefan Pintilie                                               Msk2Imm:$PMSK)),
8370625aed2SStefan Pintilie            (PMXVF16GER2NN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8380625aed2SStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8390625aed2SStefan Pintilie
8400625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32ger v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
8410625aed2SStefan Pintilie                                            Msk4Imm:$YMSK)),
8420625aed2SStefan Pintilie            (PMXVF32GER RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8430625aed2SStefan Pintilie                        Msk4Imm:$YMSK)>;
8440625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gerpp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8450625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
8460625aed2SStefan Pintilie            (PMXVF32GERPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8470625aed2SStefan Pintilie                          Msk4Imm:$YMSK)>;
8480625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gerpn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8490625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
8500625aed2SStefan Pintilie            (PMXVF32GERPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8510625aed2SStefan Pintilie                          Msk4Imm:$YMSK)>;
8520625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gernp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8530625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
8540625aed2SStefan Pintilie            (PMXVF32GERNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8550625aed2SStefan Pintilie                          Msk4Imm:$YMSK)>;
8560625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gernn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8570625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
8580625aed2SStefan Pintilie            (PMXVF32GERNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8590625aed2SStefan Pintilie                          Msk4Imm:$YMSK)>;
8600625aed2SStefan Pintilie
8610625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64ger v256i1:$XA, v16i8:$XB, Msk4Imm:$XMSK,
8620625aed2SStefan Pintilie                                            Msk2Imm:$YMSK)),
8630625aed2SStefan Pintilie            (PMXVF64GER $XA, RCCp.BToVSRC, Msk4Imm:$XMSK, Msk2Imm:$YMSK)>;
8640625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gerpp v512i1:$ATi, v256i1:$XA, v16i8:$XB,
8650625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
8660625aed2SStefan Pintilie            (PMXVF64GERPP $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
8670625aed2SStefan Pintilie                          Msk2Imm:$YMSK)>;
8680625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gerpn v512i1:$ATi, v256i1:$XA, v16i8:$XB,
8690625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
8700625aed2SStefan Pintilie            (PMXVF64GERPN $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
8710625aed2SStefan Pintilie                          Msk2Imm:$YMSK)>;
8720625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gernp v512i1:$ATi, v256i1:$XA, v16i8:$XB,
8730625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
8740625aed2SStefan Pintilie            (PMXVF64GERNP $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
8750625aed2SStefan Pintilie                          Msk2Imm:$YMSK)>;
8760625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gernn v512i1:$ATi, v256i1:$XA, v16i8:$XB,
8770625aed2SStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
8780625aed2SStefan Pintilie            (PMXVF64GERNN $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
8790625aed2SStefan Pintilie                          Msk2Imm:$YMSK)>;
8800625aed2SStefan Pintilie
8810625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
8820625aed2SStefan Pintilie                                              Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
8830625aed2SStefan Pintilie            (PMXVBF16GER2 RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8840625aed2SStefan Pintilie                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8850625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8860625aed2SStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8870625aed2SStefan Pintilie                                                Msk2Imm:$PMSK)),
8880625aed2SStefan Pintilie            (PMXVBF16GER2PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8890625aed2SStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8900625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8910625aed2SStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8920625aed2SStefan Pintilie                                                Msk2Imm:$PMSK)),
8930625aed2SStefan Pintilie            (PMXVBF16GER2PN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8940625aed2SStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
8950625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB,
8960625aed2SStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
8970625aed2SStefan Pintilie                                                Msk2Imm:$PMSK)),
8980625aed2SStefan Pintilie            (PMXVBF16GER2NP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
8990625aed2SStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9000625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9010625aed2SStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9020625aed2SStefan Pintilie                                                Msk2Imm:$PMSK)),
9030625aed2SStefan Pintilie            (PMXVBF16GER2NN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9040625aed2SStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9050625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
9060625aed2SStefan Pintilie                                             Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
9070625aed2SStefan Pintilie            (PMXVI16GER2 RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9080625aed2SStefan Pintilie                         Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9090625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi8ger4spp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9100625aed2SStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9110625aed2SStefan Pintilie                                               Msk2Imm:$PMSK)),
9120625aed2SStefan Pintilie            (PMXVI8GER4SPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9130625aed2SStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9140625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9150625aed2SStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9160625aed2SStefan Pintilie                                               Msk2Imm:$PMSK)),
9170625aed2SStefan Pintilie            (PMXVI16GER2PP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9180625aed2SStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9190625aed2SStefan Pintilie}
9200625aed2SStefan Pintilie
9211ac6956bSStefan Pintilielet Predicates = [MMA, PrefixInstrs, IsISAFuture] in {
9221ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi4ger8 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
9231ac6956bSStefan Pintilie                                            Msk4Imm:$YMSK, Msk8Imm:$PMSK)),
9241ac6956bSStefan Pintilie            (PMXVI4GER8W RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9251ac6956bSStefan Pintilie                        Msk4Imm:$YMSK, Msk8Imm:$PMSK)>;
9261ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi4ger8pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9271ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9281ac6956bSStefan Pintilie                                              Msk8Imm:$PMSK)),
9291ac6956bSStefan Pintilie            (PMXVI4GER8WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9301ac6956bSStefan Pintilie                          Msk4Imm:$YMSK, Msk8Imm:$PMSK)>;
9311ac6956bSStefan Pintilie
9321ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi8ger4 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
9331ac6956bSStefan Pintilie                                            Msk4Imm:$YMSK, Msk4Imm:$PMSK)),
9341ac6956bSStefan Pintilie            (PMXVI8GER4W RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9351ac6956bSStefan Pintilie                        Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
9361ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi8ger4pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9371ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9381ac6956bSStefan Pintilie                                              Msk4Imm:$PMSK)),
9391ac6956bSStefan Pintilie            (PMXVI8GER4WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9401ac6956bSStefan Pintilie                          Msk4Imm:$YMSK, Msk4Imm:$PMSK)>;
9411ac6956bSStefan Pintilie
9421ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2s v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
9431ac6956bSStefan Pintilie                                              Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
9441ac6956bSStefan Pintilie            (PMXVI16GER2SW RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9451ac6956bSStefan Pintilie                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9461ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2spp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9471ac6956bSStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9481ac6956bSStefan Pintilie                                                Msk2Imm:$PMSK)),
9491ac6956bSStefan Pintilie            (PMXVI16GER2SWPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9501ac6956bSStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9511ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
9521ac6956bSStefan Pintilie                                             Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
9531ac6956bSStefan Pintilie            (PMXVF16GER2W RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9541ac6956bSStefan Pintilie                         Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9551ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9561ac6956bSStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9571ac6956bSStefan Pintilie                                               Msk2Imm:$PMSK)),
9581ac6956bSStefan Pintilie            (PMXVF16GER2WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9591ac6956bSStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9601ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9611ac6956bSStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9621ac6956bSStefan Pintilie                                               Msk2Imm:$PMSK)),
9631ac6956bSStefan Pintilie            (PMXVF16GER2WPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9641ac6956bSStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9651ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9661ac6956bSStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9671ac6956bSStefan Pintilie                                               Msk2Imm:$PMSK)),
9681ac6956bSStefan Pintilie            (PMXVF16GER2WNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9691ac6956bSStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9701ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9711ac6956bSStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
9721ac6956bSStefan Pintilie                                               Msk2Imm:$PMSK)),
9731ac6956bSStefan Pintilie            (PMXVF16GER2WNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9741ac6956bSStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
9751ac6956bSStefan Pintilie
9761ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32ger v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
9771ac6956bSStefan Pintilie                                            Msk4Imm:$YMSK)),
9781ac6956bSStefan Pintilie            (PMXVF32GERW RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9791ac6956bSStefan Pintilie                        Msk4Imm:$YMSK)>;
9801ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gerpp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9811ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
9821ac6956bSStefan Pintilie            (PMXVF32GERWPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9831ac6956bSStefan Pintilie                          Msk4Imm:$YMSK)>;
9841ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gerpn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9851ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
9861ac6956bSStefan Pintilie            (PMXVF32GERWPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9871ac6956bSStefan Pintilie                          Msk4Imm:$YMSK)>;
9881ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gernp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9891ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
9901ac6956bSStefan Pintilie            (PMXVF32GERWNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9911ac6956bSStefan Pintilie                          Msk4Imm:$YMSK)>;
9921ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf32gernn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
9931ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk4Imm:$YMSK)),
9941ac6956bSStefan Pintilie            (PMXVF32GERWNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
9951ac6956bSStefan Pintilie                          Msk4Imm:$YMSK)>;
9961ac6956bSStefan Pintilie
9971ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64ger v256i1:$XA, v16i8:$XB, Msk4Imm:$XMSK,
9981ac6956bSStefan Pintilie                                            Msk2Imm:$YMSK)),
9991ac6956bSStefan Pintilie            (PMXVF64GERW $XA, RCCp.BToVSRC, Msk4Imm:$XMSK, Msk2Imm:$YMSK)>;
10001ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gerpp v512i1:$ATi, v256i1:$XA, v16i8:$XB,
10011ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
10021ac6956bSStefan Pintilie            (PMXVF64GERWPP $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
10031ac6956bSStefan Pintilie                          Msk2Imm:$YMSK)>;
10041ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gerpn v512i1:$ATi, v256i1:$XA, v16i8:$XB,
10051ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
10061ac6956bSStefan Pintilie            (PMXVF64GERWPN $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
10071ac6956bSStefan Pintilie                          Msk2Imm:$YMSK)>;
10081ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gernp v512i1:$ATi, v256i1:$XA, v16i8:$XB,
10091ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
10101ac6956bSStefan Pintilie            (PMXVF64GERWNP $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
10111ac6956bSStefan Pintilie                          Msk2Imm:$YMSK)>;
10121ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvf64gernn v512i1:$ATi, v256i1:$XA, v16i8:$XB,
10131ac6956bSStefan Pintilie                                              Msk4Imm:$XMSK, Msk2Imm:$YMSK)),
10141ac6956bSStefan Pintilie            (PMXVF64GERWNN $ATi, $XA, RCCp.BToVSRC, Msk4Imm:$XMSK,
10151ac6956bSStefan Pintilie                          Msk2Imm:$YMSK)>;
10161ac6956bSStefan Pintilie
10171ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
10181ac6956bSStefan Pintilie                                              Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
10191ac6956bSStefan Pintilie            (PMXVBF16GER2W RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10201ac6956bSStefan Pintilie                          Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10211ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
10221ac6956bSStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
10231ac6956bSStefan Pintilie                                                Msk2Imm:$PMSK)),
10241ac6956bSStefan Pintilie            (PMXVBF16GER2WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10251ac6956bSStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10261ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2pn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
10271ac6956bSStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
10281ac6956bSStefan Pintilie                                                Msk2Imm:$PMSK)),
10291ac6956bSStefan Pintilie            (PMXVBF16GER2WPN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10301ac6956bSStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10311ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2np v512i1:$ATi, v16i8:$XA, v16i8:$XB,
10321ac6956bSStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
10331ac6956bSStefan Pintilie                                                Msk2Imm:$PMSK)),
10341ac6956bSStefan Pintilie            (PMXVBF16GER2WNP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10351ac6956bSStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10361ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvbf16ger2nn v512i1:$ATi, v16i8:$XA, v16i8:$XB,
10371ac6956bSStefan Pintilie                                                Msk4Imm:$XMSK, Msk4Imm:$YMSK,
10381ac6956bSStefan Pintilie                                                Msk2Imm:$PMSK)),
10391ac6956bSStefan Pintilie            (PMXVBF16GER2WNN $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10401ac6956bSStefan Pintilie                            Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10411ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2 v16i8:$XA, v16i8:$XB, Msk4Imm:$XMSK,
10421ac6956bSStefan Pintilie                                             Msk4Imm:$YMSK, Msk2Imm:$PMSK)),
10431ac6956bSStefan Pintilie            (PMXVI16GER2W RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10441ac6956bSStefan Pintilie                         Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10451ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi8ger4spp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
10461ac6956bSStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
10471ac6956bSStefan Pintilie                                               Msk2Imm:$PMSK)),
10481ac6956bSStefan Pintilie            (PMXVI8GER4WSPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10491ac6956bSStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10501ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_pmxvi16ger2pp v512i1:$ATi, v16i8:$XA, v16i8:$XB,
10511ac6956bSStefan Pintilie                                               Msk4Imm:$XMSK, Msk4Imm:$YMSK,
10521ac6956bSStefan Pintilie                                               Msk2Imm:$PMSK)),
10531ac6956bSStefan Pintilie            (PMXVI16GER2WPP $ATi, RCCp.AToVSRC, RCCp.BToVSRC, Msk4Imm:$XMSK,
10541ac6956bSStefan Pintilie                           Msk4Imm:$YMSK, Msk2Imm:$PMSK)>;
10551ac6956bSStefan Pintilie}
10561ac6956bSStefan Pintilie
10570625aed2SStefan Pintiliedef ConcatsMMA {
10580625aed2SStefan Pintilie  dag VecsToVecPair0 =
10590625aed2SStefan Pintilie    (v256i1 (INSERT_SUBREG
10600625aed2SStefan Pintilie      (INSERT_SUBREG (IMPLICIT_DEF), $vs0, sub_vsx1),
10610625aed2SStefan Pintilie      $vs1, sub_vsx0));
10620625aed2SStefan Pintilie  dag VecsToVecPair1 =
10630625aed2SStefan Pintilie    (v256i1 (INSERT_SUBREG
10640625aed2SStefan Pintilie      (INSERT_SUBREG (IMPLICIT_DEF), $vs2, sub_vsx1),
10650625aed2SStefan Pintilie      $vs3, sub_vsx0));
10660625aed2SStefan Pintilie  dag VecsToVecQuad =
10670625aed2SStefan Pintilie    (BUILD_UACC (INSERT_SUBREG
10680625aed2SStefan Pintilie                  (INSERT_SUBREG (v512i1 (IMPLICIT_DEF)),
10690625aed2SStefan Pintilie                                 (KILL_PAIR VecsToVecPair0), sub_pair0),
10700625aed2SStefan Pintilie                  (KILL_PAIR VecsToVecPair1), sub_pair1));
10710625aed2SStefan Pintilie}
10720625aed2SStefan Pintilie
10730625aed2SStefan Pintiliedef Extracts {
10740625aed2SStefan Pintilie  dag Pair0 = (v256i1 (EXTRACT_SUBREG $v, sub_pair0));
10750625aed2SStefan Pintilie  dag Pair1 = (v256i1 (EXTRACT_SUBREG $v, sub_pair1));
10760625aed2SStefan Pintilie  dag Vec0 = (v4i32 (EXTRACT_SUBREG Pair0, sub_vsx0));
10770625aed2SStefan Pintilie  dag Vec1 = (v4i32 (EXTRACT_SUBREG Pair0, sub_vsx1));
10780625aed2SStefan Pintilie  dag Vec2 = (v4i32 (EXTRACT_SUBREG Pair1, sub_vsx0));
10790625aed2SStefan Pintilie  dag Vec3 = (v4i32 (EXTRACT_SUBREG Pair1, sub_vsx1));
10800625aed2SStefan Pintilie}
10810625aed2SStefan Pintilie
10821ac6956bSStefan Pintilielet Predicates = [MMA, IsNotISAFuture] in {
10830625aed2SStefan Pintilie  def : Pat<(v512i1 (PPCAccBuild v4i32:$vs1, v4i32:$vs0, v4i32:$vs3, v4i32:$vs2)),
10840625aed2SStefan Pintilie            (XXMTACC ConcatsMMA.VecsToVecQuad)>;
10850625aed2SStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_assemble_acc v16i8:$vs1, v16i8:$vs0,
10860625aed2SStefan Pintilie                                              v16i8:$vs3, v16i8:$vs2)),
10870625aed2SStefan Pintilie            (XXMTACC ConcatsMMA.VecsToVecQuad)>;
10880625aed2SStefan Pintilie  def : Pat<(v512i1 (PPCxxmfacc v512i1:$AS)), (XXMFACC acc:$AS)>;
10890625aed2SStefan Pintilie  def : Pat<(v4i32 (PPCAccExtractVsx acc:$v, 0)),
10900625aed2SStefan Pintilie            Extracts.Vec0>;
10910625aed2SStefan Pintilie  def : Pat<(v4i32 (PPCAccExtractVsx acc:$v, 1)),
10920625aed2SStefan Pintilie            Extracts.Vec1>;
10930625aed2SStefan Pintilie  def : Pat<(v4i32 (PPCAccExtractVsx acc:$v, 2)),
10940625aed2SStefan Pintilie            Extracts.Vec2>;
10950625aed2SStefan Pintilie  def : Pat<(v4i32 (PPCAccExtractVsx acc:$v, 3)),
10960625aed2SStefan Pintilie            Extracts.Vec3>;
10970625aed2SStefan Pintilie}
10980625aed2SStefan Pintilie
10991ac6956bSStefan Pintilielet Predicates = [MMA, IsISAFuture] in {
11001ac6956bSStefan Pintilie  def : Pat<(v512i1 (PPCAccBuild v4i32:$vs1, v4i32:$vs0, v4i32:$vs3, v4i32:$vs2)),
11011ac6956bSStefan Pintilie            (DMXXINSTFDMR512 ConcatsMMA.VecsToVecPair0, ConcatsMMA.VecsToVecPair1)>;
11021ac6956bSStefan Pintilie  def : Pat<(v512i1 (int_ppc_mma_assemble_acc v16i8:$vs1, v16i8:$vs0,
11031ac6956bSStefan Pintilie                                              v16i8:$vs3, v16i8:$vs2)),
11041ac6956bSStefan Pintilie            (DMXXINSTFDMR512 ConcatsMMA.VecsToVecPair0, ConcatsMMA.VecsToVecPair1)>;
11051ac6956bSStefan Pintilie  def : Pat<(v512i1 immAllZerosV), (XXSETACCZW)>;
11061ac6956bSStefan Pintilie}
1107