(locate_and_pad_parm): Do padding before rounding
authorDoug Evans <dje@gnu.org>
Wed, 7 Dec 1994 20:58:08 +0000 (20:58 +0000)
committerDoug Evans <dje@gnu.org>
Wed, 7 Dec 1994 20:58:08 +0000 (20:58 +0000)
so pad_below knows how much is needed.

From-SVN: r8622

gcc/function.c

index 3811835b028552bb0b5fc22fc8374e67aa88a720..7e50c844b7eea5df97e1482ad29b849f12479fb8 100644 (file)
@@ -4015,15 +4015,16 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl,
     sizetree = size_int (PUSH_ROUNDING (TREE_INT_CST_LOW (sizetree)));
 #endif
 
+  /* Pad_below needs the pre-rounded size to know how much to pad below
+     so this must be done before rounding up.  */
+  if (where_pad == downward)
+    pad_below (offset_ptr, passed_mode, sizetree);
+
   if (where_pad != none
       && (TREE_CODE (sizetree) != INTEGER_CST
          || ((TREE_INT_CST_LOW (sizetree) * BITS_PER_UNIT) % PARM_BOUNDARY)))
     sizetree = round_up (sizetree, PARM_BOUNDARY / BITS_PER_UNIT);
 
-  /* This must be done after rounding sizetree, so that it will subtract
-     the same value that we explicitly add below.  */
-  if (where_pad == downward)
-    pad_below (offset_ptr, passed_mode, sizetree);
   ADD_PARM_SIZE (*arg_size_ptr, sizetree);
 #endif /* ARGS_GROW_DOWNWARD */
 }