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]
Other format: [Raw text]

RE: PR65416, alloca on xtensa


augustine.sterling@gmail.com wrote:
> On Fri, Mar 13, 2015 at 7:54 AM, Max Filippov <jcmvbkbc@gmail.com> wrote:
[...]
> > 2. alloca seems to make an additional 16-bytes padding to each stack
> >   allocation: alloca(1) results in moving sp down by 32 bytes,
> >   alloca(17)
> >   moves it by 48 bytes, etc. This padding looks unnecessary to me:
> >   either
> >   this space is not used (previous register frame is not spilled), or
> >   alloca
> >   exception handler will take care about reloading or moving spilled
> >   registers
> >   to a new location. In both cases after movsp this space is just
> >   wasted.
> >   Do you know why this padding may be needed?
> 
> Answering this question definitively requires some time with the ABI
> manual, which I don't have. You may be right, but I would check what
> XCC does in this case. It is far better tested.

Other than the required 16-byte stack alignment, there's nothing in
the ABI that requires these extra 16 bytes.  Perhaps there was a bad
implementation of the alloca exception handler at some point a long
time ago that prompted the extra 16 bytes?

Today XCC doesn't add the extra 16 bytes.  alloca(n) with n in a2
comes out as this:

   0x60000490 <+12>:    movi.n  a8, -16
   0x60000492 <+14>:    addi.n  a3, a2, 15
   0x60000494 <+16>:    and     a3, a3, a8
   0x60000497 <+19>:    sub     a3, a1, a3
   0x6000049a <+22>:    movsp   a1, a3

which just rounds up to 16 bytes.

-Marc

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