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