LGTM.<span></span><br><br>On Thursday, September 26, 2013, Yunzhong Gao  wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">ygao added you to the CC list for the revision "Fixing Intel format of the vshufpd instruction".<br>

<br>
Hi,<br>
I noticed that the Intel format of the vshufpd instruction is incorrect.<br>
<br>
For example,<br>
```<br>
$ echo "vshufpd XMM0, XMM0, XMM0, 1" | llvm-mc -x86-asm-syntax=intel<br>
  error: invalid operand for instruction<br>
  vshufpd XMM0, XMM0, XMM0, 1<br>
          ^~~~<br>
```<br>
<br>
This seems to be caused by a typo in the tablegen entry for this instruction.<br>
<br>
In lib/Target/X86/X86InstrSSE.td:<br>
  "shufpd\t{$src3, $src2, $src1, $dst|$dst, $src2, $src2, $src3}",<br>
should be<br>
  "shufpd\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",<br>
<br>
Can someone take a look whether this patch is good to go in?<br>
<br>
Thanks,<br>
- Gao<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1759" target="_blank">http://llvm-reviews.chandlerc.com/D1759</a><br>
<br>
Files:<br>
  lib/Target/X86/X86InstrSSE.td<br>
  test/MC/Disassembler/X86/intel-syntax.txt<br>
  test/MC/X86/intel-syntax.s<br>
<br>
Index: lib/Target/X86/X86InstrSSE.td<br>
===================================================================<br>
--- lib/Target/X86/X86InstrSSE.td<br>
+++ lib/Target/X86/X86InstrSSE.td<br>
@@ -2524,10 +2524,10 @@<br>
            "shufps\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",<br>
            memopv8f32, SSEPackedSingle>, TB, VEX_4V, VEX_L;<br>
 defm VSHUFPD  : sse12_shuffle<VR128, f128mem, v2f64,<br>
-           "shufpd\t{$src3, $src2, $src1, $dst|$dst, $src2, $src2, $src3}",<br>
+           "shufpd\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",<br>
            memopv2f64, SSEPackedDouble>, TB, OpSize, VEX_4V;<br>
 defm VSHUFPDY : sse12_shuffle<VR256, f256mem, v4f64,<br>
-           "shufpd\t{$src3, $src2, $src1, $dst|$dst, $src2, $src2, $src3}",<br>
+           "shufpd\t{$src3, $src2, $src1, $dst|$dst, $src1, $src2, $src3}",<br>
            memopv4f64, SSEPackedDouble>, TB, OpSize, VEX_4V, VEX_L;<br>
<br>
 let Constraints = "$src1 = $dst" in {<br>
Index: test/MC/Disassembler/X86/intel-syntax.txt<br>
===================================================================<br>
--- test/MC/Disassembler/X86/intel-syntax.txt<br>
+++ test/MC/Disassembler/X86/intel-syntax.txt<br>
@@ -105,6 +105,9 @@<br>
 # CHECK: retf<br>
 0x66 0xcb<br>
<br>
+# CHECK: vshufpd xmm0, xmm1, xmm2, 1<br>
+0xc5 0xf1 0xc6 0xc2 0x01<br>
+<br>
 # CHECK: vpgatherqq ymm2, qword ptr [rdi + 2*ymm1], ymm0<br>
 0xc4 0xe2 0xfd 0x91 0x14 0x4f<br>
<br>
Index: test/MC/X86/intel-syntax.s<br>
===================================================================<br>
--- test/MC/X86/intel-syntax.s<br>
+++ test/MC/X86/intel-syntax.s<br>
@@ -69,6 +69,8 @@<br>
     mov QWORD PTR FS:320, RAX<br>
 // CHECK: movq %rax, %fs:20(%rbx)<br>
     mov QWORD PTR FS:20[rbx], RAX<br>
+// CHECK: vshufpd $1, %xmm2, %xmm1, %xmm0<br>
+    vshufpd XMM0, XMM1, XMM2, 1<br>
 // CHECK: vpgatherdd %xmm8, (%r15,%xmm9,2), %xmm1<br>
     vpgatherdd XMM10, DWORD PTR [R15 + 2*XMM9], XMM8<br>
 // CHECK: movsd        -8, %xmm5<br>
</blockquote><br><br>-- <br>~Craig<br>