]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
defaults.h (OUTGOING_REG_PARM_STACK_SPACE): Provide default.
authorKai Tietz <kai.tietz@onevision.com>
Thu, 22 Mar 2007 21:33:45 +0000 (21:33 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 22 Mar 2007 21:33:45 +0000 (14:33 -0700)
        * defaults.h (OUTGOING_REG_PARM_STACK_SPACE): Provide default.
        * calls.c (compute_argument_block_size, expand_call,
        emit_library_call_value_1): Don't ifdef OUTGOING_REG_PARM_STACK_SPACE.
        * expr.c (block_move_libcall_safe_for_call_parm): Likewise.
        * function.c (STACK_DYNAMIC_OFFSET): Likewise.
        * doc/tm.texi (OUTGOING_REG_PARM_STACK_SPACE): Update.
        * config/alpha/unicosmk.h, config/bfin/bfin.h, config/iq2000/iq2000.h,
        config/mips/mips.h, config/mn10300/mn10300.h, config/mt/mt.h,
        config/pa/pa.h, config/rs6000/rs6000.h, config/score/score.h,
        config/spu/spu.h, config/v850/v850.h (OUTGOING_REG_PARM_STACK_SPACE):
        Set to 1.

Co-Authored-By: Richard Henderson <rth@redhat.com>
From-SVN: r123135

17 files changed:
gcc/ChangeLog
gcc/calls.c
gcc/config/alpha/unicosmk.h
gcc/config/bfin/bfin.h
gcc/config/iq2000/iq2000.h
gcc/config/mips/mips.h
gcc/config/mn10300/mn10300.h
gcc/config/mt/mt.h
gcc/config/pa/pa.h
gcc/config/rs6000/rs6000.h
gcc/config/score/score.h
gcc/config/spu/spu.h
gcc/config/v850/v850.h
gcc/defaults.h
gcc/doc/tm.texi
gcc/expr.c
gcc/function.c

index 047a1ffcfe9c52efa57c3191ecc181ae65a2e733..576cba8122cf5f668390c3ef8a6d878462a9cc53 100644 (file)
@@ -1,3 +1,18 @@
+2007-03-22  Kai Tietz  <kai.tietz@onevision.com>
+           Richard Henderson  <rth@redhat.com>
+
+       * defaults.h (OUTGOING_REG_PARM_STACK_SPACE): Provide default.
+       * calls.c (compute_argument_block_size, expand_call,
+       emit_library_call_value_1): Don't ifdef OUTGOING_REG_PARM_STACK_SPACE.
+       * expr.c (block_move_libcall_safe_for_call_parm): Likewise.
+       * function.c (STACK_DYNAMIC_OFFSET): Likewise.
+       * doc/tm.texi (OUTGOING_REG_PARM_STACK_SPACE): Update.
+       * config/alpha/unicosmk.h, config/bfin/bfin.h, config/iq2000/iq2000.h,
+       config/mips/mips.h, config/mn10300/mn10300.h, config/mt/mt.h,
+       config/pa/pa.h, config/rs6000/rs6000.h, config/score/score.h,
+       config/spu/spu.h, config/v850/v850.h (OUTGOING_REG_PARM_STACK_SPACE):
+       Set to 1.
+
 2007-03-22  Joseph Myers  <joseph@codesourcery.com>
 
        * c-incpath.c (add_sysroot_to_chain): New.
index 8723e1f4fae8ccecbbc0a6bb53cfad81d4913329..9ef3b0ed125fc7b52f29d03082ab2a8c128ea8ca 100644 (file)
@@ -1222,13 +1222,12 @@ compute_argument_block_size (int reg_parm_stack_space,
            = size_binop (MAX_EXPR, args_size->var,
                          ssize_int (reg_parm_stack_space));
 
-#ifndef OUTGOING_REG_PARM_STACK_SPACE
          /* The area corresponding to register parameters is not to count in
             the size of the block we need.  So make the adjustment.  */
-         args_size->var
-           = size_binop (MINUS_EXPR, args_size->var,
-                         ssize_int (reg_parm_stack_space));
-#endif
+         if (!OUTGOING_REG_PARM_STACK_SPACE)
+           args_size->var
+             = size_binop (MINUS_EXPR, args_size->var,
+                           ssize_int (reg_parm_stack_space));
        }
     }
   else
@@ -1246,9 +1245,8 @@ compute_argument_block_size (int reg_parm_stack_space,
       args_size->constant = MAX (args_size->constant,
                                 reg_parm_stack_space);
 
-#ifndef OUTGOING_REG_PARM_STACK_SPACE
-      args_size->constant -= reg_parm_stack_space;
-#endif
+      if (!OUTGOING_REG_PARM_STACK_SPACE)
+       args_size->constant -= reg_parm_stack_space;
     }
   return unadjusted_args_size;
 }
@@ -2026,10 +2024,8 @@ expand_call (tree exp, rtx target, int ignore)
   reg_parm_stack_space = REG_PARM_STACK_SPACE (fndecl);
 #endif
 
-#ifndef OUTGOING_REG_PARM_STACK_SPACE
-  if (reg_parm_stack_space > 0 && PUSH_ARGS)
+  if (!OUTGOING_REG_PARM_STACK_SPACE && reg_parm_stack_space > 0 && PUSH_ARGS)
     must_preallocate = 1;
-#endif
 
   /* Set up a place to return a structure.  */
 
@@ -2430,12 +2426,11 @@ expand_call (tree exp, rtx target, int ignore)
                     Another approach might be to try to reorder the argument
                     evaluations to avoid this conflicting stack usage.  */
 
-#ifndef OUTGOING_REG_PARM_STACK_SPACE
                  /* Since we will be writing into the entire argument area,
                     the map must be allocated for its entire size, not just
                     the part that is the responsibility of the caller.  */
-                 needed += reg_parm_stack_space;
-#endif
+                 if (!OUTGOING_REG_PARM_STACK_SPACE)
+                   needed += reg_parm_stack_space;
 
 #ifdef ARGS_GROW_DOWNWARD
                  highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
@@ -2531,12 +2526,10 @@ expand_call (tree exp, rtx target, int ignore)
             an argument.  */
          if (stack_arg_under_construction)
            {
-#ifndef OUTGOING_REG_PARM_STACK_SPACE
-             rtx push_size = GEN_INT (reg_parm_stack_space
-                                      + adjusted_args_size.constant);
-#else
-             rtx push_size = GEN_INT (adjusted_args_size.constant);
-#endif
+             rtx push_size
+               = GEN_INT (adjusted_args_size.constant
+                          + (OUTGOING_REG_PARM_STACK_SPACE ? 0
+                             : reg_parm_stack_space));
              if (old_stack_level == 0)
                {
                  emit_stack_save (SAVE_BLOCK, &old_stack_level,
@@ -2706,11 +2699,9 @@ expand_call (tree exp, rtx target, int ignore)
       /* If register arguments require space on the stack and stack space
         was not preallocated, allocate stack space here for arguments
         passed in registers.  */
-#ifdef OUTGOING_REG_PARM_STACK_SPACE
-      if (!ACCUMULATE_OUTGOING_ARGS
+      if (OUTGOING_REG_PARM_STACK_SPACE && !ACCUMULATE_OUTGOING_ARGS
          && must_preallocate == 0 && reg_parm_stack_space > 0)
        anti_adjust_stack (GEN_INT (reg_parm_stack_space));
-#endif
 
       /* Pass the function the address in which to return a
         structure value.  */
@@ -3532,9 +3523,8 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
   args_size.constant = MAX (args_size.constant,
                            reg_parm_stack_space);
 
-#ifndef OUTGOING_REG_PARM_STACK_SPACE
-  args_size.constant -= reg_parm_stack_space;
-#endif
+  if (!OUTGOING_REG_PARM_STACK_SPACE)
+    args_size.constant -= reg_parm_stack_space;
 
   if (args_size.constant > current_function_outgoing_args_size)
     current_function_outgoing_args_size = args_size.constant;
@@ -3555,12 +3545,11 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
 
       needed = args_size.constant;
 
-#ifndef OUTGOING_REG_PARM_STACK_SPACE
       /* Since we will be writing into the entire argument area, the
         map must be allocated for its entire size, not just the part that
         is the responsibility of the caller.  */
-      needed += reg_parm_stack_space;
-#endif
+      if (!OUTGOING_REG_PARM_STACK_SPACE)
+       needed += reg_parm_stack_space;
 
 #ifdef ARGS_GROW_DOWNWARD
       highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use,
index a05b33396c04dcdd1e012a40f8622a3710d32bcd..9435e71a0c23780975b09fbea207346539de5b69 100644 (file)
@@ -116,7 +116,7 @@ Boston, MA 02110-1301, USA.  */
    in registers) are allocated.  */
 
 #define REG_PARM_STACK_SPACE(DECL) 48
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 /* If an argument can't be passed in registers even though not all argument
    registers have been used yet, it is passed on the stack in the space 
index 3085a38909d6cd8d597f8980edb27f23b65ea347..b2ee26eeaaa7f6c97198c5f9ae3381b311f63d0c 100644 (file)
@@ -180,7 +180,7 @@ extern const char *bfin_library_id_string;
 
 /* Define this if the above stack space is to be considered part of the
  * space allocated by the caller.  */
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
          
 /* Define this if the maximum size of all the outgoing args is to be
    accumulated and pushed during the prologue.  The amount can be
index 24ea3e0ba1dd1c479038419e1af1741b4a876c41..5c61bef7bca39b0612da006ef0ac0e8980088fb8 100644 (file)
@@ -375,7 +375,7 @@ enum reg_class
 
 #define REG_PARM_STACK_SPACE(FNDECL) 0
 
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) 0
 
index ef6b02c4186b6c07dcc5b297095c75f9a174f095..641772a1a99203f630d6d31fea8cfbffb715a961 100644 (file)
@@ -1807,7 +1807,7 @@ extern const enum reg_class mips_regno_to_class[];
    If `ACCUMULATE_OUTGOING_ARGS' is also defined, the only effect
    of this macro is to determine whether the space is included in
    `current_function_outgoing_args_size'.  */
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 #define STACK_BOUNDARY (TARGET_NEWABI ? 128 : 64)
 \f
index f91db27aaff2bb7e2be24d26d287b2e8c440bb7d..b49518b355488ca1cd968eaac084799ed0c3c3d2 100644 (file)
@@ -529,7 +529,7 @@ enum reg_class {
 /* We use d0/d1 for passing parameters, so allocate 8 bytes of space
    for a register flushback area.  */
 #define REG_PARM_STACK_SPACE(DECL) 8
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 #define ACCUMULATE_OUTGOING_ARGS 1
 
 /* So we can allocate space for return pointers once for the function
index 79d94d451c3d363d3a322509549b25e23f81ab9e..a4afb3c3051a193e37e9788590688b970afa74b1 100644 (file)
@@ -533,7 +533,7 @@ extern struct mt_frame_info current_frame_info;
 
 /* Define this if it is the responsibility of the caller to
    allocate the area reserved for arguments passed in registers.  */
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 /* The number of register assigned to holding function arguments.  */
 #define MT_NUM_ARG_REGS        4
index 60a724595817a246a8f84514939cf81408481a7e..b7edfe18533518d02d40c1b6db07644675febe67 100644 (file)
@@ -602,7 +602,7 @@ extern struct rtx_def *hppa_pic_save_rtx (void);
 
 /* Define this if the above stack space is to be considered part of the
    space allocated by the caller.  */
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 /* Keep the stack pointer constant throughout the function.
    This is both an optimization and a necessity: longjmp
index 386a7c1d3592eb06625ae4d8de9bee259a5cedac..8aadc43a16a5443661c5c657c5da5dbb718524a4 100644 (file)
@@ -1277,7 +1277,7 @@ extern enum rs6000_abi rs6000_current_abi;        /* available for use by subtarget */
 
 /* Define this if the above stack space is to be considered part of the
    space allocated by the caller.  */
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 /* This is the difference between the logical top of stack and the actual sp.
 
index 3ee53cfcb870b17b5337c576ca34419f3945198c..3fd079221c11fe987cf83aabf12788919a2767ba 100644 (file)
@@ -534,7 +534,7 @@ enum reg_class
    If `ACCUMULATE_OUTGOING_ARGS' is also defined, the only effect
    of this macro is to determine whether the space is included in
    `current_function_outgoing_args_size'.  */
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 #define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0
 
index 1fcc2349facdf302756ad50cf498dd3320f8a7bd..1f1547218a81c0564ca2206979a658e45604095b 100644 (file)
@@ -337,7 +337,7 @@ targetm.resolve_overloaded_builtin = spu_resolve_overloaded_builtin;        \
 
 #define REG_PARM_STACK_SPACE(FNDECL) 0
 
-#define OUTGOING_REG_PARM_STACK_SPACE 
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 #define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) (0)
 
index b6691531eaa30f1a4849c5d131cf59b0c38a03f1..b2c14cc95f379fe69dff632a846b527fdef7ab64 100644 (file)
@@ -626,7 +626,7 @@ struct cum_arg { int nbytes; int anonymous_args; };
 
 /* Define this if the above stack space is to be considered part of the
    space allocated by the caller.  */
-#define OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 1
 
 /* 1 if N is a possible register number for function argument passing.  */
 
index b17d59e19403df5a7238db536784ea9e57ae2eda..ed1ae39b9d18474b84beaa31f0e7cd285cf565d8 100644 (file)
@@ -906,4 +906,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 #define HARD_REGNO_NREGS_WITH_PADDING(REGNO, MODE) -1
 #endif
 
+#ifndef OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE 0
+#endif
+
 #endif  /* ! GCC_DEFAULTS_H */
index ca348e58670470367af71470c624711fb8000946..9cdc869198b839dd09572e2038c47519ffb991e4 100644 (file)
@@ -3730,8 +3730,8 @@ which.
 @c something, not sure if it looks good.  --mew 10feb93
 
 @defmac OUTGOING_REG_PARM_STACK_SPACE
-Define this if it is the responsibility of the caller to allocate the area
-reserved for arguments passed in registers.
+Define this to a non-zero value if it is the responsibility of the caller
+to allocate the area reserved for arguments passed in registers.
 
 If @code{ACCUMULATE_OUTGOING_ARGS} is defined, this macro controls
 whether the space for these arguments counts in the value of
index 1dc437cb8368ee32af52fc29e655775d3bd41fbd..1e22c8ca3f82377cf4404ba7a906cc63ac146730 100644 (file)
@@ -1237,13 +1237,14 @@ block_move_libcall_safe_for_call_parm (void)
 
   /* If registers go on the stack anyway, any argument is sure to clobber
      an outgoing argument.  */
-#if defined (REG_PARM_STACK_SPACE) && defined (OUTGOING_REG_PARM_STACK_SPACE)
-  {
-    tree fn = emit_block_move_libcall_fn (false);
-    (void) fn;
-    if (REG_PARM_STACK_SPACE (fn) != 0)
-      return false;
-  }
+#if defined (REG_PARM_STACK_SPACE)
+  if (OUTGOING_REG_PARM_STACK_SPACE)
+    {
+      tree fn;
+      fn = emit_block_move_libcall_fn (false);
+      if (REG_PARM_STACK_SPACE (fn) != 0)
+       return false;
+    }
 #endif
 
   /* If any argument goes in memory, then it might clobber an outgoing
index f6ebb85589868568524ef94057ae4cef727911c0..f0a2dd613927519dfa14a79bdfea7f47ce9044f8 100644 (file)
@@ -1211,12 +1211,12 @@ static int cfa_offset;
    `current_function_outgoing_args_size'.  Nevertheless, we must allow
    for it when allocating stack dynamic objects.  */
 
-#if defined(REG_PARM_STACK_SPACE) && ! defined(OUTGOING_REG_PARM_STACK_SPACE)
+#if defined(REG_PARM_STACK_SPACE)
 #define STACK_DYNAMIC_OFFSET(FNDECL)   \
 ((ACCUMULATE_OUTGOING_ARGS                                                   \
-  ? (current_function_outgoing_args_size + REG_PARM_STACK_SPACE (FNDECL)) : 0)\
+ (STACK_POINTER_OFFSET))                                                   \
-
+  ? (current_function_outgoing_args_size                                     \
    + (OUTGOING_REG_PARM_STACK_SPACE ? 0 : REG_PARM_STACK_SPACE (FNDECL)))   \
+  : 0) + (STACK_POINTER_OFFSET))
 #else
 #define STACK_DYNAMIC_OFFSET(FNDECL)   \
 ((ACCUMULATE_OUTGOING_ARGS ? current_function_outgoing_args_size : 0)        \