diff --git a/llvm/lib/Target/PowerPC/P10InstrResources.td b/llvm/lib/Target/PowerPC/P10InstrResources.td --- a/llvm/lib/Target/PowerPC/P10InstrResources.td +++ b/llvm/lib/Target/PowerPC/P10InstrResources.td @@ -1623,6 +1623,7 @@ (instrs LVSL, LVSR, + LXVKQ, MFVSRLD, MTVSRWS, VCLZLSBB, diff --git a/llvm/lib/Target/PowerPC/PPCInstrPrefix.td b/llvm/lib/Target/PowerPC/PPCInstrPrefix.td --- a/llvm/lib/Target/PowerPC/PPCInstrPrefix.td +++ b/llvm/lib/Target/PowerPC/PPCInstrPrefix.td @@ -655,6 +655,22 @@ let Inst{31} = 0; } +// X-Form: [ PO T EO UIM XO TX ] +class XForm_XT6_IMM5 opcode, bits<5> eo, bits<10> xo, dag OOL, dag IOL, + string asmstr, InstrItinClass itin, list pattern> + : I { + bits<6> XT; + bits<5> UIM; + + let Pattern = pattern; + + let Inst{6-10} = XT{4-0}; + let Inst{11-15} = eo; + let Inst{16-20} = UIM; + let Inst{21-30} = xo; + let Inst{31} = XT{5}; +} + class XX3Form_AT3_XAB6 opcode, bits<8> xo, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> @@ -1678,6 +1694,11 @@ } } +let Predicates = [IsISA3_1] in { + def LXVKQ : XForm_XT6_IMM5<60, 31, 360, (outs vsrc:$XT), (ins u5imm:$UIM), + "lxvkq $XT, $UIM", IIC_VecGeneral, []>; +} + let Predicates = [PCRelativeMemops] in { // Load i32 def : Pat<(i32 (zextloadi1 (PPCmatpcreladdr PCRelForm:$ga))), diff --git a/llvm/test/MC/Disassembler/PowerPC/ppc64-encoding-ISA31.txt b/llvm/test/MC/Disassembler/PowerPC/ppc64-encoding-ISA31.txt --- a/llvm/test/MC/Disassembler/PowerPC/ppc64-encoding-ISA31.txt +++ b/llvm/test/MC/Disassembler/PowerPC/ppc64-encoding-ISA31.txt @@ -364,6 +364,9 @@ # CHECK: xxeval 32, 1, 2, 3, 2 0x05 0x00 0x00 0x02 0x88 0x01 0x10 0xd1 +# CHECK: lxvkq 63, 31 +0xf3 0xff 0xfa 0xd1 + # CHECK: vclzdm 1, 2, 3 0x10 0x22 0x1f 0x84 diff --git a/llvm/test/MC/PowerPC/ppc64-encoding-ISA31.s b/llvm/test/MC/PowerPC/ppc64-encoding-ISA31.s --- a/llvm/test/MC/PowerPC/ppc64-encoding-ISA31.s +++ b/llvm/test/MC/PowerPC/ppc64-encoding-ISA31.s @@ -528,6 +528,9 @@ # CHECK-LE: xxeval 32, 1, 2, 3, 2 # encoding: [0x02,0x00,0x00,0x05, # CHECK-LE-SAME: 0xd1,0x10,0x01,0x88] xxeval 32, 1, 2, 3, 2 +# CHECK-BE: lxvkq 63, 31 # encoding: [0xf3,0xff,0xfa,0xd1] +# CHECK-LE: lxvkq 63, 31 # encoding: [0xd1,0xfa,0xff,0xf3] + lxvkq 63, 31 # CHECK-BE: vclzdm 1, 2, 3 # encoding: [0x10,0x22,0x1f,0x84] # CHECK-LE: vclzdm 1, 2, 3 # encoding: [0x84,0x1f,0x22,0x10] vclzdm 1, 2, 3