This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Question about -mpreferred-stack-boundary


On 03 Feb 2001 14:56:06 +0100, Andreas Jaeger wrote:

  I should have descripted the problem in more detail: glibc's startup
  code aligns the stack to 32 bytes - and then calls a function.  Now,
  if you tell me that the stack has to be aligned (e.g. to 32 bytes)
  *after* the push of the return address, then glibc is wrong - but if
  it has to be aligned *before* the push of the return address, we might
  have a bug in GCC.

I was going to raise this issue, but decided not to make my previous
mail more confusing than necessary :-) As I described, the main reason
for using the preferred stack boundary is to (try to) have arguments
that are passed by value on the stack properly aligned.

Consider a function f that takes two long float values as arguments 
x and y. Long floats are passed by value and reading them from addresses 
that are not 8-byte aligned is costly. The i386 ABI requires the stack
to look as follows when control is transferred to f:

               ....
16(%esp)        y (hi)
12(%esp)        y (lo)
 8(%esp)        x (hi)
 4(%esp)        x (lo)
 0(%esp)     [return address]

So you'd like 4(%esp) to be 8-byte aligned. So %esp should be 8-byte
aligned before calling the function.

  -Geert



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]