mips.c (compute_frame_size): Restore the original gp_sp_offset for !GENERATE_MIPS16E_SAVE_RESTORE and remove...

gcc/
	* config/mips/mips.c (compute_frame_size): Restore the original
	gp_sp_offset for !GENERATE_MIPS16E_SAVE_RESTORE and remove the
	fp_size term from the GENERATE_MIPS16E_SAVE_RESTORE calculation.
	Document why the difference is needed.

From-SVN: r126406
This commit is contained in:
Richard Sandiford 2007-07-06 09:27:10 +00:00 committed by Richard Sandiford
parent b5119fa139
commit 713df81003
2 changed files with 17 additions and 6 deletions

View File

@ -1,3 +1,10 @@
2007-07-06 Richard Sandiford <richard@codesourcery.com>
* config/mips/mips.c (compute_frame_size): Restore the original
gp_sp_offset for !GENERATE_MIPS16E_SAVE_RESTORE and remove the
fp_size term from the GENERATE_MIPS16E_SAVE_RESTORE calculation.
Document why the difference is needed.
2007-07-06 Richard Guenther <rguenther@suse.de>
* c-common.c (boolean_increment): Use correctly typed

View File

@ -6781,12 +6781,16 @@ compute_frame_size (HOST_WIDE_INT size)
{
HOST_WIDE_INT offset;
/* MIPS16e SAVE and RESTORE instructions require the GP save area
to be aligned at the high end with any padding at the low end,
so do it that way all the time. */
offset = (total_size
- MIPS_STACK_ALIGN (fp_reg_size)
- GET_MODE_SIZE (gpr_mode));
if (GENERATE_MIPS16E_SAVE_RESTORE)
/* MIPS16e SAVE and RESTORE instructions require the GP save area
to be aligned at the high end with any padding at the low end.
It is only safe to use this calculation for o32, where we never
have pretend arguments, and where any varargs will be saved in
the caller-allocated area rather than at the top of the frame. */
offset = (total_size - GET_MODE_SIZE (gpr_mode));
else
offset = (args_size + cprestore_size + var_size
+ gp_reg_size - GET_MODE_SIZE (gpr_mode));
cfun->machine->frame.gp_sp_offset = offset;
cfun->machine->frame.gp_save_offset = offset - total_size;
}