Support added for shifts and unpacking MMX instructions.
[oota-llvm.git] / lib / Target / X86 / README-SSE.txt
index 2b7f9ae4392e362e37d3ff2e8e22ceed8204006c..96e6aab24387a4807ca61f0de47ca42f867b5ce5 100644 (file)
@@ -571,4 +571,44 @@ swizzle:
         movaps %xmm0, (%eax)
         ret
 
+//===---------------------------------------------------------------------===//
+
+We should compile this:
+
+#include <xmmintrin.h>
+
+void foo(__m128i *A, __m128i *B) {
+  *A = _mm_sll_epi16 (*A, *B);
+}
+
+to: 
+
+_foo:
+       subl    $12, %esp
+       movl    16(%esp), %edx
+       movl    20(%esp), %eax
+       movdqa  (%edx), %xmm1
+       movdqa  (%eax), %xmm0
+       psllw   %xmm0, %xmm1
+       movdqa  %xmm1, (%edx)
+       addl    $12, %esp
+       ret
 
+not:
+
+_foo:
+       movl 8(%esp), %eax
+       movdqa (%eax), %xmm0
+       #IMPLICIT_DEF %eax
+       pinsrw $2, %eax, %xmm0
+       xorl %ecx, %ecx
+       pinsrw $3, %ecx, %xmm0
+       pinsrw $4, %eax, %xmm0
+       pinsrw $5, %ecx, %xmm0
+       pinsrw $6, %eax, %xmm0
+       pinsrw $7, %ecx, %xmm0
+       movl 4(%esp), %eax
+       movdqa (%eax), %xmm1
+       psllw %xmm0, %xmm1
+       movdqa %xmm1, (%eax)
+       ret