From 2bf0c0394de00f857babaa710432a2182d1aa746 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Sat, 20 Feb 2016 06:20:17 +0000 Subject: [PATCH] [X86] Add some missing reversed forms of XOP instructions. llvm-svn: 261417 --- llvm/lib/Target/X86/X86InstrXOP.td | 29 ++++++++++++++++++++++++++ llvm/test/MC/Disassembler/X86/simple-tests.txt | 9 ++++++++ 2 files changed, 38 insertions(+) diff --git a/llvm/lib/Target/X86/X86InstrXOP.td b/llvm/lib/Target/X86/X86InstrXOP.td index 4cb2304..6308291 100644 --- a/llvm/lib/Target/X86/X86InstrXOP.td +++ b/llvm/lib/Target/X86/X86InstrXOP.td @@ -246,6 +246,13 @@ multiclass xop4op opc, string OpcodeStr, Intrinsic Int> { (Int VR128:$src1, (bitconvert (loadv2i64 addr:$src2)), VR128:$src3))]>, XOP_4V, VEX_I8IMM; + // For disassembler + let isCodeGenOnly = 1, ForceDisassemble = 1, hasSideEffects = 0 in + def rr_REV : IXOPi8, XOP_4V, VEX_I8IMM, VEX_W, MemOp4; } let ExeDomain = SSEPackedInt in { @@ -276,6 +283,13 @@ multiclass xop4op256 opc, string OpcodeStr, Intrinsic Int> { (Int VR256:$src1, (bitconvert (loadv4i64 addr:$src2)), VR256:$src3))]>, XOP_4V, VEX_I8IMM, VEX_L; + // For disassembler + let isCodeGenOnly = 1, ForceDisassemble = 1, hasSideEffects = 0 in + def rrY_REV : IXOPi8, XOP_4V, VEX_I8IMM, VEX_W, MemOp4, VEX_L; } let ExeDomain = SSEPackedInt in @@ -312,6 +326,14 @@ multiclass xop5op opc, string OpcodeStr, Intrinsic Int128, "\t{$src4, $src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3, $src4}"), [(set VR128:$dst, (Int128 VR128:$src1, (ld_128 addr:$src2), VR128:$src3, imm:$src4))]>; + // For disassembler + let isCodeGenOnly = 1, ForceDisassemble = 1, hasSideEffects = 0 in + def rr_REV : IXOP5, VEX_W, MemOp4; + def rrY : IXOP5 opc, string OpcodeStr, Intrinsic Int128, [(set VR256:$dst, (Int256 VR256:$src1, (ld_256 addr:$src2), VR256:$src3, imm:$src4))]>, VEX_L; + // For disassembler + let isCodeGenOnly = 1, ForceDisassemble = 1, hasSideEffects = 0 in + def rrY_REV : IXOP5, VEX_W, MemOp4, VEX_L; } let ExeDomain = SSEPackedDouble in diff --git a/llvm/test/MC/Disassembler/X86/simple-tests.txt b/llvm/test/MC/Disassembler/X86/simple-tests.txt index 875c5b7..c9943ec 100644 --- a/llvm/test/MC/Disassembler/X86/simple-tests.txt +++ b/llvm/test/MC/Disassembler/X86/simple-tests.txt @@ -905,12 +905,21 @@ # CHECK: vpcmov %ymm1, %ymm2, %ymm3, %ymm4 0x8f 0xe8 0x64 0xa2 0xe2 0x10 +# CHECK: vpcmov %ymm2, %ymm1, %ymm3, %ymm4 +0x8f 0xe8 0xe4 0xa2 0xe2 0x10 + # CHECK: vpcmov (%rax), %ymm2, %ymm3, %ymm4 0x8f 0xe8 0xe4 0xa2 0x20 0x20 # CHECK: vpcmov %ymm1, (%rax), %ymm3, %ymm4 0x8f 0xe8 0x64 0xa2 0x20 0x10 +# CHECK: vpermil2pd $0, %xmm3, %xmm2, %xmm1, %xmm0 +0xc4 0xe3 0x71 0x49 0xc2 0x30 + +# CHECK: vpermil2pd $0, %xmm2, %xmm3, %xmm1, %xmm0 +0xc4 0xe3 0xf1 0x49 0xc2 0x30 + # CHECK: vpcomeqb %xmm6, %xmm4, %xmm2 0x8f 0xe8 0x58 0xcc 0xd6 0x04 -- 2.7.4