From 365ca18bf02e2fe6b41e17990ea834d788a03856 Mon Sep 17 00:00:00 2001 From: Gavin Koch Date: Tue, 17 Feb 1998 18:31:03 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/mips/mips.h | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22f8817493b7..787f54626afa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Tue Feb 17 21:28:12 1998 Gavin Koch + + * 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 * rtl.h (force_line_numbers, restore_line_number_status): Declare. diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index b68d660608d9..582478f3fdb1 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -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)))