pgubook-readers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Pgubook-readers] Question on assembly code generated by gcc


From: Jonathan Bartlett
Subject: Re: [Pgubook-readers] Question on assembly code generated by gcc
Date: Tue, 13 Dec 2005 08:46:50 -0800 (PST)

> which are very clear. But also the following lines:
>
>          andl    $-16, %esp
>          movl    $0, %eax
>          addl    $15, %eax
>          addl    $15, %eax
>          shrl    $4, %eax
>          sall    $4, %eax
>       subl    %eax, %esp
>
> of which I understand the semantics individually, but I don't see
> what are needed for. Why put 0 into %eax and then add 15 and again
> add 15?

The best thing I can tell you is to ask on the gcc newsgroup or
comp.compilers.

However, remember that when you compile with -O0 you are getting no
optimizations whatsoever.  What is likely going on is that it is
calculating some sort of stack offset on piece at a time.  When you
compile with -O3 you get something much more sensible:

        pushl   %eax
        pushl   %eax
        andl    $-16, %esp
        subl    $16, %esp

While still not really needed for an empty function, it makes sense
nonetheless.   It aligns the stack on a 16-byte boundary.  Which, in fact,
the computation for %eax above results in 16.

If you compile with  -O0 -mpreferred-stack-boundary=2 you will get the
results you expect.

Jon




reply via email to

[Prev in Thread] Current Thread [Next in Thread]