Date: Mon, 16 Feb 2004 16:59:57 -0800 From: Tim Kientzle <kientzle@acm.org> To: Matthew Dillon <dillon@apollo.backplane.com> Cc: freebsd-hackers@freebsd.org Subject: Re: FreeBSD 5.2 v/s FreeBSD 4.9 MFLOPS performance (gcc3.3.3 v/sgcc2.9.5) Message-ID: <4031678D.2060704@acm.org> In-Reply-To: <200402162112.i1GLCFMV087316@apollo.backplane.com> References: <BAY12-F357RapPBVToy00031029@hotmail.com> <200402162112.i1GLCFMV087316@apollo.backplane.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Matthew Dillon wrote: > I'm surprised Bruce hasn't chimed in here yet. I guess he's tired of > repeating himself. > > In 4.9, libcsu, which generates crt1.o (which is the start code for > C programs which the linker links in automatically) has this line in it: > > andl $~0xf, %%esp # align stack to 16-byte boundary > > So anything linked with 4.9 is going to align the stack on a > 16 byte boundary no matter WHAT the kernel does. > > FreeBSD-5 does not have this alignment in its crt1.o because GCC3 > automatically aligns the stack on a per-procedure basis. Or at least > it is supposed to. Maybe it's broke? :-) I've not looked at 3.3, but I seem to recall that GCC 3.2 did not actually align the stack within each function, but preserved the alignment. (That is, each function assumed the stack had a certain alignment on entry and ensured that alignment was preserved for any subsequent function calls.) I had my doubts about this, as it meant there was a LOT of stack fiddling before and after every function call. (The alignment was handled at caller, not callee. A lot of functions don't need any alignment at all, really, so it seems like it could be wasted effort in a lot of cases.) If I'm remembering this correctly, then aligning the stack in crt1.o would be pretty much essential. Tim Kientzle
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4031678D.2060704>