2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-24 20:01:19 +08:00

mips.h (CAN_ELIMINATE): Don't eliminate the frame pointer for the stack pointer in MIPS16 and 64BIT.

* mips/mips.h (CAN_ELIMINATE): Don't eliminate the frame
	pointer for the stack pointer in MIPS16 and 64BIT.

From-SVN: r18035
This commit is contained in:
Gavin Koch 1998-02-17 18:31:03 +00:00 committed by Gavin Romig-Koch
parent 153305b05c
commit 365ca18bf0
2 changed files with 18 additions and 6 deletions
gcc
ChangeLog
config/mips

@ -1,3 +1,8 @@
Tue Feb 17 21:28:12 1998 Gavin Koch <gavin@cygnus.com>
* mips/mips.h (CAN_ELIMINATE): Don't eliminate the frame
pointer for the stack pointer in MIPS16 and 64BIT.
Tue Feb 17 21:17:30 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
* rtl.h (force_line_numbers, restore_line_number_status): Declare.

@ -2115,16 +2115,23 @@ extern struct mips_frame_info current_frame_info;
cases preventing register elimination are things that the compiler
already knows about.
We can always eliminate to the frame pointer. We can eliminate to
the stack pointer unless a frame pointer is needed. In mips16
mode, we need a frame pointer for a large frame; otherwise, reload
may be unable to compute the address of a local variable, since
there is no way to add a large constant to the stack pointer
without using a temporary register. */
When not in mips16 and mips64, we can always eliminate to the
frame pointer. We can eliminate to the stack pointer unless
a frame pointer is needed. In mips16 mode, we need a frame
pointer for a large frame; otherwise, reload may be unable
to compute the address of a local variable, since there is
no way to add a large constant to the stack pointer
without using a temporary register.
In mips16, for some instructions (eg lwu), we can't eliminate the
frame pointer for the stack pointer. These instructions are
only generated in TARGET_64BIT mode.
*/
#define CAN_ELIMINATE(FROM, TO) \
((TO) == HARD_FRAME_POINTER_REGNUM \
|| ((TO) == STACK_POINTER_REGNUM && ! frame_pointer_needed \
&& ! (TARGET_MIPS16 && TARGET_64BIT) \
&& (! TARGET_MIPS16 \
|| compute_frame_size (get_frame_size ()) < 32768)))