* mips.c (mips_expand_prologue): Handle large frame with no outgoing
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Jan 1998 10:45:59 +0000 (10:45 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 Jan 1998 10:45:59 +0000 (10:45 +0000)
        arguments for mips16.
        (mips_expand_epilogue): Pass "orig_tsize" to save_restore_insns.
        Don't lose if tsize is zero after handling large stack for mips16.
        * mips.md (return): For trivial return, return address is in $31.

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

gcc/ChangeLog
gcc/config/mips/mips.c
gcc/config/mips/mips.h
gcc/config/mips/mips.md

index 06b3897..f4c63a9 100644 (file)
@@ -1,3 +1,11 @@
+Mon Jan  5 11:39:49 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * mips.c (mips_expand_prologue): Handle large frame with no outgoing
+       arguments for mips16.
+       (mips_expand_epilogue): Pass "orig_tsize" to save_restore_insns.
+       Don't lose if tsize is zero after handling large stack for mips16.
+       * mips.md (return): For trivial return, return address is in $31.
+
 Sun Jan  4 20:24:00 1998  Nigel Stephens  <nigel@algor.co.uk>
 
        *  mips/mips16.S: Various changes to make it work with -msingle-float
index 6ea2659..ebcf0fb 100644 (file)
@@ -1,5 +1,5 @@
 /* Subroutines for insn-output.c for MIPS
-   Copyright (C) 1989, 90, 91, 93-96, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1989, 90, 91, 93-97, 1998 Free Software Foundation, Inc.
    Contributed by A. Lichnewsky, lich@inria.inria.fr.
    Changes by Michael Meissner, meissner@osf.org.
    64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and
@@ -6559,9 +6559,10 @@ mips_expand_prologue ()
          else if (TARGET_64BIT)
            insn = emit_insn (gen_movdi (hard_frame_pointer_rtx, stack_pointer_rtx));
          else
-           insn= emit_insn (gen_movsi (hard_frame_pointer_rtx, stack_pointer_rtx));
+           insn = emit_insn (gen_movsi (hard_frame_pointer_rtx, stack_pointer_rtx));
 
-         RTX_FRAME_RELATED_P (insn) = 1;
+         if (insn)
+           RTX_FRAME_RELATED_P (insn) = 1;
        }
 
       if (TARGET_ABICALLS && mips_abi != ABI_32)
@@ -6749,7 +6750,7 @@ mips_expand_epilogue ()
                   & (1L << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST))))
        emit_insn (gen_blockage ());
 
-      save_restore_insns (FALSE, tmp_rtx, tsize, (FILE *)0);
+      save_restore_insns (FALSE, tmp_rtx, orig_tsize, (FILE *)0);
 
       /* In mips16 mode with a large frame, we adjust the stack
          pointer before restoring the registers.  In this case, we
@@ -6759,10 +6760,10 @@ mips_expand_epilogue ()
        abort ();
 
       emit_insn (gen_blockage ());
-      if (TARGET_LONG64)
+      if (TARGET_LONG64 && tsize != 0)
        emit_insn (gen_adddi3 (stack_pointer_rtx, stack_pointer_rtx,
                               tsize_rtx));
-      else
+      else if (tsize != 0)
        emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
                               tsize_rtx));
     }
index e0b9cc3..76b8644 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions of target machine for GNU compiler.  MIPS version.
-   Copyright (C) 1989, 90-6, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1989, 90-97, 1998 Free Software Foundation, Inc.
    Contributed by A. Lichnewsky (lich@inria.inria.fr).
    Changed by Michael Meissner (meissner@osf.org).
    64 bit r4000 support by Ian Lance Taylor (ian@cygnus.com) and
index 8fd4dfd..bf44a6f 100644 (file)
@@ -3,7 +3,7 @@
 ;;  Changes by       Michael Meissner, meissner@osf.org
 ;;  64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and
 ;;  Brendan Eich, brendan@microunity.com.
-;;  Copyright (C) 1989, 90-96, 1997 Free Software Foundation, Inc.
+;;  Copyright (C) 1989, 90-97, 1998 Free Software Foundation, Inc.
 
 ;; This file is part of GNU CC.
 
@@ -8790,12 +8790,7 @@ move\\t%0,%z4\\n\\
 (define_insn "return"
   [(return)]
   "mips_can_use_return_insn ()"
-  "*
-{
-  if (TARGET_MIPS16)
-    return \"%*j\\t$7\";
-  return \"%*j\\t$31\";
-}"
+  "%*j\\t$31"
   [(set_attr "type"    "jump")
    (set_attr "mode"    "none")
    (set_attr "length"  "1")])