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