Masao Uebayashi <[EMAIL PROTECTED]> writes:
> - 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.

> - 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.

Richard

Reply via email to