This is the mail archive of the gcc-patches@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: [PATCH,rs6000] fix interrupt safety issue on E500 targets


On 10/3/07, Nathan Froyd <froydnj@codesourcery.com> wrote:
> Any objection to simply calling rs6000_emit_stack_tie unconditionally
> before the stack adjustment, then?  (Patch below--I don't know what
> AIX/Darwin requires here, but I can't imagine it would hurt performance
> that much.)
Inside rs6000_stack_info, we have the following comment:
  /* Determine if we need to allocate any stack frame:

     For AIX we need to push the stack if a frame pointer is needed
     (because the stack might be dynamically adjusted), if we are
     debugging, if we make calls, or if the sum of fp_save, gp_save,
     and local variables are more than the space needed to save all
     non-volatile registers: 32-bit: 18*8 + 19*4 = 220 or 64-bit: 18*8
     + 18*8 = 288 (GPR13 reserved).

     For V.4 we don't have the stack cushion that AIX uses, but assume
     that the debugger can handle stackless frames.  */

So only SVS V.4 ABI have this requirement which means PPC64-linux,
darwin or AIX have a red zone.  And yes this can worse code for OS's
with a red zone as the main reason why the movement is happening is so
the processor can handle the loads better.


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