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

            Bug ID: 85939
           Summary: -mstackrealign does not realign stack with local __m64
                    variable
           Product: gcc
           Version: 8.1.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fw at gcc dot gnu.org
  Target Milestone: ---
            Target: i386-*-linux-gnu

Consider this test case:

#include <xmmintrin.h>

int f1 (__m64 *);

int
f2 (void)
{
  __m64 v;
  return f1 (&v);
}

My understanding is that the i386 ABI requires 8-byte alignment for __m64
objects.  However, with “gcc -m32 -mstackrealign -O2”, I get this:

        .p2align 4,,15
        .globl  f2
        .type   f2, @function
f2:
.LFB504:
        .cfi_startproc
        subl    $40, %esp
        .cfi_def_cfa_offset 44
        leal    20(%esp), %eax
        pushl   %eax
        .cfi_def_cfa_offset 48
        call    f1
        addl    $44, %esp
        .cfi_def_cfa_offset 4
        ret
        .cfi_endproc
.LFE504:
        .size   f2, .-f2

This will not produce a correctly aligned object if the stack alignment is off
by 4 (or 12) bytes.

Reply via email to