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: MIPS stack frame question


> > - In gcc/config/mips/mips.c:mips_compute_frame_info() you do
> >
> > 	  /* Move above the GPR save area.  */
> > 	  if (frame->num_gp > 0)
> > 	    {
> > 	      offset += MIPS_STACK_ALIGN (frame->num_gp * UNITS_PER_WORD);
> > 	      frame->gp_sp_offset = offset - UNITS_PER_WORD;
> > 	    }
> >
> >   So what is "- UNITS_PER_WORD" for?
> 
> Well, the fields are defined as follows:
> 
>   /* The offset of the topmost GPR and FPR save slots from the top of
>      the frame, or zero if no such slots are needed.  */
>   HOST_WIDE_INT gp_save_offset;
>   HOST_WIDE_INT fp_save_offset;
> 
>   /* Likewise, but giving offsets from the bottom of the frame.  */
>   HOST_WIDE_INT gp_sp_offset;
>   HOST_WIDE_INT fp_sp_offset;
> 
> so the "- UNITS_PER_WORD" converts the offset of the end/top of the save
> slot area to the offset of the topmost save slot.

Understood, thanks.

And now I look at the Figure 7-2 in [1], it's clearly explained there.
I should have read carefully.

> > - Why do you put MIPS_STACK_ALIGN in many places?
> 
> TBH, I just blindly kept these when doing the rewrite.  Some of them
> aren't needed, as you say; I'll try to fix that sometime.
> 
> It isn't just the bottom of the stack that needs to be aligned though.
> Addressable regions like the local variables and the varargs save area
> must also be aligned, so that the alignment attributes work correctly.

Understood too.

(If it's the only reason, GPR and FPR save don't need alignment - but
who cares? :)

Masao


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