This is the mail archive of the
mailing list for the GCC project.
Re: x86: -Os -msse2 needs -maccumulate-outgoing-args
- From: Stuart Hastings <stuart at apple dot com>
- To: Jan Hubicka <hubicka at ucw dot cz>
- Cc: gcc at gcc dot gnu dot org, Falk Hueffner <falk dot hueffner at student dot uni-tuebingen dot de>, Richard Henderson <rth at redhat dot com>
- Date: Tue, 13 Jan 2004 16:56:00 -0800
- Subject: Re: x86: -Os -msse2 needs -maccumulate-outgoing-args
- References: <1F5C0B7C-2D05-11D8-8396-000A95A83B3C@apple.com> <20031218222508.GE10588@redhat.com> <FB5CAAB7-40B3-11D8-84FC-000A95A83B3C@apple.com> <20040107101305.GC21007@redhat.com> <E5C6E870-4161-11D8-84FC-000A95A83B3C@apple.com> <20040107224525.GB25232@redhat.com> <D38B6320-41FD-11D8-B2D3-000A95A83B3C@apple.com> <AF4DC065-4609-11D8-B14F-000A95A83B3C@apple.com> <20040113205102.GC19340@atrey.karlin.mff.cuni.cz>
On Jan 13, 2004, at 12:51 PM, Jan Hubicka wrote:
this is not -maccumulate-outgoing-args that breaks, it is
-mpreffered-stack-boundary=2 implied by -Os. We still don't have the
dynamic stack alignment code merged in, unfortunately.
I looked at this, and it's not clear to me how it would help. Here's
Also, given the unique semantics of the Darwin linker, I'm not sure
this could work on Darwin today (our linker "knows" too much about
entry points). I think this would be implementable with a future
It would be probably sane to give some warning or hard error when SSE
register is put onto stack, but I don't see easy way to do this, as we
should not output such a warning for long doubles that have same
I'm sorry, I didn't fully understand this.
If a long double has the same alignment properties as a vector, then
misaligned loads of that long double should fault just like a
misaligned vector load (?). If the long double prefers a high
alignment, but will work with lesser alignment, then its alignment
requirements aren't the same as a vector (??).
Here's another approach:
If main() is part of a module compiled with
-mpreferred-stack-boundary=2, and main() wants to pass a vector
argument to function foo_v() in another module, main() knows that A)
main()s own stackframe is not aligned, and B) since foo_v() is
expecting a vector parameter, foo_v() must have been compiled with a
suitable stack alignment. (O.K., it's a weak argument.)
Instead of generating a warning, howabout forcing the stack into
alignment just for the call to foo_v() ? Sort of a per-call variant of
To insure safety, any function that accepts vector arguments would
insist upon a suitable stack alignment at compile time (hard error).
The problem I see here is what to do when a function accepts variable
Ack! I just suggested an additional check to calls.c; it is already
much too complicated. :-(