On Mon, 4 Feb 2002, Mike Silbersack wrote:
> On Tue, 5 Feb 2002, Bruce Evans wrote:
> > I haven't done anything to clean up the patch. I hope the problem
> > will go away in future versions of gcc (align the stack at runtime in
> > the few routines that actually need it).
>
> Well, if Linux aligns the initial stack, the chance that gcc will have
> auto-alignment added sounds to be about zero. You might as well go ahead
> with your patch when you get a chance.
There is a nonzero probability that the pessimization of aligning in almost
every routine will be fixed someday. Actually, the pessimization is worse
-- the alignment is done before every call.
Example:
%%%
foo.c:
foo()
{
f1(1);
f2(2);
f3(3.0);
}
%%%
gcc -O -S [-mpreferred-stack boundary] currently generates the following
code for this:
%%%
.file "z.c"
.version "01.01"
gcc2_compiled.:
.section .rodata
.p2align 3
.LC0:
.long 0x0,0x40080000
.text
.p2align 2,0x90
.globl foo
.type foo,@function
foo:
pushl %ebp
movl %esp,%ebp
subl $8,%esp # <- extra instruction for alignment (for foo)
addl $-12,%esp # <- extra instruction for alignment (for f1)
pushl $1
call f1
addl $-12,%esp # <- extra instruction for alignment (for f2)
pushl $2
call f2
addl $32,%esp # <- extra instruction for alignment (for f3)
addl $-8,%esp # <- extra instruction for alignment (another)
pushl .LC0+4
pushl .LC0
call f3
leave
ret
.Lfe1:
.size foo,.Lfe1-foo
.ident "GCC: (c) 2.95.3 20010315 (release)"
%%%
It should generate something like:
.file "z.c"
.version "01.01"
gcc2_compiled.:
.section .rodata
.p2align 3
.LC0:
.long 0x0,0x40080000
.text
.p2align 2,0x90
.globl foo
.type foo,@function
foo:
pushl %ebp
movl %esp,%ebp
andl $~0x7,%esp # <- extra instruction for alignment (for foo)
# Only needed since foo() uses FPU.
# 8-byte alignment enough for doubles?
# Adjust in prologue so that there are
# hopefully no alloca()-like issues, except
# we need a frame pointer to restore %esp.
pushl $1
call f1
pushl $2
call f2
pushl .LC0+4
pushl .LC0
call f3
leave
ret
.Lfe1:
.size foo,.Lfe1-foo
.ident "GCC: (c) 2.95.3 20010315 (release)"
%%%
My patch is not suitable for committing verbatim. It has 2 or 3 XXX's.
Bruce
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message