FreeBSD 5.2 v/s FreeBSD 4.9 MFLOPS performance (gcc3.3.3
v/sgcc2.9.5)
Tim Kientzle
kientzle at acm.org
Mon Feb 16 17:00:09 PST 2004
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
More information about the freebsd-hackers
mailing list