OSDN Git Service

* mips/mips.h (CAN_ELIMINATE): Don't eliminate the frame
authorgavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Feb 1998 18:31:03 +0000 (18:31 +0000)
committergavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Feb 1998 18:31:03 +0000 (18:31 +0000)
pointer for the stack pointer in MIPS16 and 64BIT.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@18035 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.h

index 22f8817..787f546 100644 (file)
@@ -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.
index b68d660..582478f 100644 (file)
@@ -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)))