https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69519

            Bug ID: 69519
           Summary: STV doesn't use xmm register for DImove move
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
                CC: ienkovich at gcc dot gnu.org
  Target Milestone: ---
            Target: i686

[hjl@gnu-6 gcc]$ cat x.i
long long a, b;
extern void fn2 (void);
void
fn1 (void)
{
  long long c = a;
  a = b ^ a;
  fn2 ();
  a = c;
}
[hjl@gnu-6 gcc]$ ./xgcc -B./ -S -O2 x.i -m32  -msse2
[hjl@gnu-6 gcc]$ cat x.s
        .file   "x.i"
        .text
        .p2align 4,,15
        .globl  fn1
        .type   fn1, @function
fn1:
.LFB0:
        .cfi_startproc
        subl    $28, %esp
        .cfi_def_cfa_offset 32
        movl    a, %eax
        movl    a+4, %edx
        movq    b, %xmm0
        movl    %eax, (%esp)
        movl    %edx, 4(%esp)
        movdqa  (%esp), %xmm2

I am expecting xmm register is used to move `a' onto stack.

        pxor    %xmm2, %xmm0
        movq    %xmm0, a
        call    fn2
        movq    (%esp), %xmm1
        movq    %xmm1, a
        addl    $28, %esp
        .cfi_def_cfa_offset 4
        ret
        .cfi_endproc
.LFE0:
        .size   fn1, .-fn1
        .comm   b,8,8
        .comm   a,8,8
        .ident  "GCC: (GNU) 6.0.0 20160126 (experimental)"
        .section        .note.GNU-stack,"",@progbits
[hjl@gnu-6 gcc]$

Reply via email to