OSDN Git Service

* config/i960/i960.c (i960_function_prologue): Compute size of
authordj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Mar 2001 23:14:10 +0000 (23:14 +0000)
committerdj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 Mar 2001 23:14:10 +0000 (23:14 +0000)
frame according to number of registers actually saved there.

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

gcc/ChangeLog
gcc/config/i960/i960.c

index e2878ac..c426cb6 100644 (file)
@@ -1,3 +1,9 @@
+2001-03-14  DJ Delorie  <dj@redhat.com>
+           Vladimir Makarov  <vmakarov@redhat.com>
+
+       * config/i960/i960.c (i960_function_prologue): Compute size of
+       frame according to number of registers actually saved there.
+
 2001-03-14  Richard Henderson  <rth@redhat.com>
 
        * expr.c (emit_move_insn_1): Fix else if around #endif.
index 21753a2..1f885fe 100644 (file)
@@ -1474,7 +1474,7 @@ i960_function_prologue (file, size)
        lnw = i960_split_reg_group (l, lnw, g->length);
     }
 
-  actual_fsize = compute_frame_size (size);
+  actual_fsize = compute_frame_size (size) + 4 * n_remaining_saved_regs;
 #if 0
   /* ??? The 1.2.1 compiler does this also.  This is meant to round the frame
      size up to the nearest multiple of 16.  I don't know whether this is
@@ -1526,7 +1526,7 @@ i960_function_prologue (file, size)
 
   /* Take hardware register save area created by the call instruction
      into account, but store them before the argument block area.  */
-  lvar_size = actual_fsize - compute_frame_size (0) - n_saved_regs * 4;
+  lvar_size = actual_fsize - compute_frame_size (0) - n_remaining_saved_regs * 4;
   offset = STARTING_FRAME_OFFSET + lvar_size;
   /* Save registers on stack if needed.  */
   /* ??? Is it worth to use the same algorithm as one for saving