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

Reply via email to