http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45833

rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rsandifo at gcc dot gnu.org

--- Comment #3 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
Same thing without a union:

struct v { int v[4]; } __attribute__ ((aligned (4 * sizeof (int))));
void
f (struct v *x, struct v *y, struct v *z)
{
  for (int i = 0; i < 4; i++)
    x->v[i] = y->v[i] + z->v[i];
}

produces (with -msee4.2):

        leaq    16(%rsi), %rcx
        leaq    16(%rdi), %rax
        cmpq    %rcx, %rdi
        setae   %r8b
        cmpq    %rsi, %rax
        setbe   %cl
        orb     %cl, %r8b
        je      .L5
        leaq    16(%rdx), %rcx
        cmpq    %rcx, %rdi
        setae   %cl
        cmpq    %rdx, %rax
        setbe   %al
        orb     %al, %cl
        je      .L5
        vmovdqa (%rsi), %xmm0
        vpaddd  (%rdx), %xmm0, %xmm0
        vmovaps %xmm0, (%rdi)
        ret
...

Reply via email to