]> gcc.gnu.org Git - gcc.git/commitdiff
integrate.c (copy_rtx_and_substitute): If FRAME_GROWS_DOWNWARD and regno == VIRTUAL_S...
authorDoug Evans <dje@gnu.org>
Sun, 13 Apr 1997 21:24:37 +0000 (21:24 +0000)
committerDoug Evans <dje@gnu.org>
Sun, 13 Apr 1997 21:24:37 +0000 (21:24 +0000)
* integrate.c (copy_rtx_and_substitute): If FRAME_GROWS_DOWNWARD
and regno == VIRTUAL_STACK_VARS_REGNUM, round size of stack slot up
before calling assign_stack_temp.

From-SVN: r13895

gcc/integrate.c

index 831a69599979515a15fa9381af41d570f2813da0..693304ab3d1bdd0e90d1ae5702242a87d464214c 100644 (file)
@@ -2196,18 +2196,22 @@ copy_rtx_and_substitute (orig, map)
            {
              rtx loc, seq;
              int size = DECL_FRAME_SIZE (map->fndecl);
-             int rounded;
 
+#ifdef FRAME_GROWS_DOWNWARD
+             /* In this case, virtual_stack_vars_rtx points to one byte
+                higher than the top of the frame area.  So make sure we
+                allocate a big enough chunk to keep the frame pointer
+                aligned like a real one.  */
+             size = CEIL_ROUND (size, BIGGEST_ALIGNMENT / BITS_PER_UNIT);
+#endif
              start_sequence ();
              loc = assign_stack_temp (BLKmode, size, 1);
              loc = XEXP (loc, 0);
 #ifdef FRAME_GROWS_DOWNWARD
              /* In this case, virtual_stack_vars_rtx points to one byte
                 higher than the top of the frame area.  So compute the offset
-                to one byte higher than our substitute frame.
-                Keep the fake frame pointer aligned like a real one.  */
-             rounded = CEIL_ROUND (size, BIGGEST_ALIGNMENT / BITS_PER_UNIT);
-             loc = plus_constant (loc, rounded);
+                to one byte higher than our substitute frame.  */
+             loc = plus_constant (loc, size);
 #endif
              map->reg_map[regno] = temp
                = force_reg (Pmode, force_operand (loc, NULL_RTX));
This page took 0.065411 seconds and 5 git commands to generate.