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 @@ -59,6 +59,39 @@ string BaseName = ""; } +// VX-Form: [ PO VT R VB RC XO ] +class VXForm_VTB5_RC xo, bits<5> R, dag OOL, dag IOL, string asmstr, + InstrItinClass itin, list pattern> + : I<4, OOL, IOL, asmstr, itin> { + bits<5> VT; + bits<5> VB; + bit RC = 0; + + let Pattern = pattern; + + let Inst{6-10} = VT; + let Inst{11-15} = R; + let Inst{16-20} = VB; + let Inst{21} = RC; + let Inst{22-31} = xo; +} + +// Multiclass definition to account for record and non-record form +// instructions of VXRForm. +multiclass VXForm_VTB5_RCr xo, bits<5> R, dag OOL, dag IOL, + string asmbase, string asmstr, + InstrItinClass itin, list pattern> { + let BaseName = asmbase in { + def NAME : VXForm_VTB5_RC, RecFormRel; + let Defs = [CR6] in + def _rec : VXForm_VTB5_RC, isRecordForm, RecFormRel; + } +} + class MLS_DForm_R_SI34_RTA5_MEM opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> : PI<1, opcode, OOL, IOL, asmstr, itin> { @@ -804,6 +837,14 @@ (int_ppc_altivec_vsrdbi v16i8:$VRA, v16i8:$VRB, i32:$SH))]>; + defm VSTRIBR : VXForm_VTB5_RCr<13, 1, (outs vrrc:$vT), (ins vrrc:$vB), + "vstribr", "$vT, $vB", IIC_VecGeneral, []>; + defm VSTRIBL : VXForm_VTB5_RCr<13, 0, (outs vrrc:$vT), (ins vrrc:$vB), + "vstribl", "$vT, $vB", IIC_VecGeneral, []>; + defm VSTRIHR : VXForm_VTB5_RCr<13, 3, (outs vrrc:$vT), (ins vrrc:$vB), + "vstrihr", "$vT, $vB", IIC_VecGeneral, []>; + defm VSTRIHL : VXForm_VTB5_RCr<13, 2, (outs vrrc:$vT), (ins vrrc:$vB), + "vstrihl", "$vT, $vB", IIC_VecGeneral, []>; def VINSW : VXForm_1<207, (outs vrrc:$vD), (ins vrrc:$vDi, u4imm:$UIM, gprc:$rB), "vinsw $vD, $rB, $UIM", IIC_VecGeneral, 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 @@ -279,26 +279,26 @@ # CHECK: vinsdrx 1, 2, 3 0x10 0x22 0x1b 0xcf -# CHECK: lxvrbx 32, 1, 2 -0x7c 0x01 0x10 0x1b +# CHECK: vstribr 2, 2 +0x10 0x41 0x10 0x0d -# CHECK: lxvrhx 33, 1, 2 -0x7c 0x21 0x10 0x5b +# CHECK: vstribl 2, 2 +0x10 0x40 0x10 0x0d -# CHECK: lxvrdx 34, 1, 2 -0x7c 0x41 0x10 0xdb +# CHECK: vstrihr 2, 2 +0x10 0x43 0x10 0x0d -# CHECK: lxvrwx 35, 1, 2 -0x7c 0x61 0x10 0x9b +# CHECK: vstrihl 2, 2 +0x10 0x42 0x10 0x0d -# CHECK: stxvrbx 32, 3, 1 -0x7c 0x03 0x09 0x1b +# CHECK: vstribr. 2, 2 +0x10 0x41 0x14 0x0d -# CHECK: stxvrhx 33, 3, 1 -0x7c 0x23 0x09 0x5b +# CHECK: vstribl. 2, 2 +0x10 0x40 0x14 0x0d -# CHECK: stxvrwx 34, 3, 1 -0x7c 0x43 0x09 0x9b +# CHECK: vstrihr. 2, 2 +0x10 0x43 0x14 0x0d -# CHECK: stxvrdx 35, 3, 1 -0x7c 0x63 0x09 0xdb +# CHECK: vstrihl. 2, 2 +0x10 0x42 0x14 0x0d 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 @@ -405,27 +405,24 @@ # CHECK-BE: vinsdrx 1, 2, 3 # encoding: [0x10,0x22,0x1b,0xcf] # CHECK-LE: vinsdrx 1, 2, 3 # encoding: [0xcf,0x1b,0x22,0x10] vinsdrx 1, 2, 3 -# CHECK-BE: lxvrbx 32, 1, 2 # encoding: [0x7c,0x01,0x10,0x1b] -# CHECK-LE: lxvrbx 32, 1, 2 # encoding: [0x1b,0x10,0x01,0x7c] - lxvrbx 32, 1, 2 -# CHECK-BE: lxvrhx 33, 1, 2 # encoding: [0x7c,0x21,0x10,0x5b] -# CHECK-LE: lxvrhx 33, 1, 2 # encoding: [0x5b,0x10,0x21,0x7c] - lxvrhx 33, 1, 2 -# CHECK-BE: lxvrdx 34, 1, 2 # encoding: [0x7c,0x41,0x10,0xdb] -# CHECK-LE: lxvrdx 34, 1, 2 # encoding: [0xdb,0x10,0x41,0x7c] - lxvrdx 34, 1, 2 -# CHECK-BE: lxvrwx 35, 1, 2 # encoding: [0x7c,0x61,0x10,0x9b] -# CHECK-LE: lxvrwx 35, 1, 2 # encoding: [0x9b,0x10,0x61,0x7c] - lxvrwx 35, 1, 2 -# CHECK-BE: stxvrbx 32, 3, 1 # encoding: [0x7c,0x03,0x09,0x1b] -# CHECK-LE: stxvrbx 32, 3, 1 # encoding: [0x1b,0x09,0x03,0x7c] - stxvrbx 32, 3, 1 -# CHECK-BE: stxvrhx 33, 3, 1 # encoding: [0x7c,0x23,0x09,0x5b] -# CHECK-LE: stxvrhx 33, 3, 1 # encoding: [0x5b,0x09,0x23,0x7c] - stxvrhx 33, 3, 1 -# CHECK-BE: stxvrwx 34, 3, 1 # encoding: [0x7c,0x43,0x09,0x9b] -# CHECK-LE: stxvrwx 34, 3, 1 # encoding: [0x9b,0x09,0x43,0x7c] - stxvrwx 34, 3, 1 -# CHECK-BE: stxvrdx 35, 3, 1 # encoding: [0x7c,0x63,0x09,0xdb] -# CHECK-LE: stxvrdx 35, 3, 1 # encoding: [0xdb,0x09,0x63,0x7c] - stxvrdx 35, 3, 1 +# CHECK-BE: vstribr 2, 2 # encoding: [0x10,0x41,0x10,0x0d] +# CHECK-LE: vstribr 2, 2 # encoding: [0x0d,0x10,0x41,0x10] + vstribr 2, 2 +# CHECK-BE: vstribl 2, 2 # encoding: [0x10,0x40,0x10,0x0d] +# CHECK-LE: vstribl 2, 2 # encoding: [0x0d,0x10,0x40,0x10] + vstribl 2, 2 +# CHECK-BE: vstrihr 2, 2 # encoding: [0x10,0x43,0x10,0x0d] +# CHECK-LE: vstrihr 2, 2 # encoding: [0x0d,0x10,0x43,0x10] + vstrihr 2, 2 +# CHECK-BE: vstribr. 2, 2 # encoding: [0x10,0x41,0x14,0x0d] +# CHECK-LE: vstribr. 2, 2 # encoding: [0x0d,0x14,0x41,0x10] + vstribr. 2, 2 +# CHECK-BE: vstribl. 2, 2 # encoding: [0x10,0x40,0x14,0x0d] +# CHECK-LE: vstribl. 2, 2 # encoding: [0x0d,0x14,0x40,0x10] + vstribl. 2, 2 +# CHECK-BE: vstrihr. 2, 2 # encoding: [0x10,0x43,0x14,0x0d] +# CHECK-LE: vstrihr. 2, 2 # encoding: [0x0d,0x14,0x43,0x10] + vstrihr. 2, 2 +# CHECK-BE: vstrihl. 2, 2 # encoding: [0x10,0x42,0x14,0x0d] +# CHECK-LE: vstrihl. 2, 2 # encoding: [0x0d,0x14,0x42,0x10] + vstrihl. 2, 2