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

Andy Lutomirski <luto at mit dot edu> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |luto at mit dot edu

--- Comment #19 from Andy Lutomirski <luto at mit dot edu> ---
I don't think the fix is correct.

This works:

gcc -mno-sse -mpreferred-stack-boundary=3 ...

This does not:

gcc -mno-sse -mpreferred-stack-boundary=3 -mincoming-stack-boundary=3 ...

This makes no sense, since they should be equivalent.

Also, I find the docs to be unclear as to what different values of the incoming
and preferred stack boundaries mean.

Finally, why is -mno-sse required in order to set a low stack boundary? 
Couldn't gcc figure out that the existence of a stack variable (SSE, alignas,
__attribute__((aligned(32))), etc) should force dynamic stack alignment?  In
fact, that should be necessary, and already appears to work, for
__attribute__((aligned(32))), as gcc generates correct code for this:

typedef int __attribute__((aligned(32))) int_aligned_32;

extern void func2(int_aligned_32 *x);

void func(void)
{
        int_aligned_32 x;
        func2(&x);
}

Reply via email to