]> granicus.if.org Git - llvm/commitdiff
[X86][XOP] Add a reversed reg/reg form for VPROT instructions.
authorCraig Topper <craig.topper@gmail.com>
Sat, 26 Nov 2016 02:14:00 +0000 (02:14 +0000)
committerCraig Topper <craig.topper@gmail.com>
Sat, 26 Nov 2016 02:14:00 +0000 (02:14 +0000)
The W bit distinquishes which operand is the memory operand. But if the mod bits are 3 then the memory operand is a register and there are two possible encodings. We already did this correctly for several other XOP instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287961 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrXOP.td

index b9601642747e7877ce1b84660730c081b6775d50..2b296e1e5b85cb255d0cdb9b427f84548c976051 100644 (file)
@@ -105,6 +105,13 @@ multiclass xop3op<bits<8> opc, string OpcodeStr, SDNode OpNode,
               (vt128 (OpNode (vt128 (bitconvert (loadv2i64 addr:$src1))),
                              (vt128 VR128:$src2))))]>,
              XOP, Sched<[WriteVarVecShift, ReadAfterLd]>;
+  // For disassembler
+  let isCodeGenOnly = 1, ForceDisassemble = 1, hasSideEffects = 0 in
+  def rr_REV : IXOP<opc, MRMSrcReg, (outs VR128:$dst),
+               (ins VR128:$src1, VR128:$src2),
+               !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
+               []>,
+               XOP_4V, VEX_W, Sched<[WriteVarVecShift]>;
 }
 
 let ExeDomain = SSEPackedInt in {