We should generate "movq" for _mm_move_epi64. But instead, we generate very strange code and never movq:
[EMAIL PROTECTED] gcc]$ cat /tmp/m.c #include <emmintrin.h> __m128i test (__m128i b) { return _mm_move_epi64 (b); } [EMAIL PROTECTED] gcc]$ ./xgcc -B./ -S /tmp/m.c [EMAIL PROTECTED] gcc]$ cat m.s .file "m.c" .text .globl test .type test, @function test: .LFB493: pushq %rbp .LCFI0: movq %rsp, %rbp .LCFI1: movdqa %xmm0, -32(%rbp) movdqa -32(%rbp), %xmm0 movdqa %xmm0, %xmm0 movdq2q %xmm0, %mm0 movq %mm0, -40(%rbp) movq -40(%rbp), %rax movl $0, %edx movq %rax, -16(%rbp) movq %rdx, -8(%rbp) movdqu -16(%rbp), %xmm0 leave ret ... [EMAIL PROTECTED] gcc]$ ./xgcc -B./ -S /tmp/m.c -O2 [EMAIL PROTECTED] gcc]$ cat m.s .file "m.c" .text .p2align 4,,15 .globl test .type test, @function test: .LFB516: movhps .LC0(%rip), %xmm0 ret -- Summary: Very stange code for _mm_move_epi64 Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hjl dot tools at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36992