aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2007-03-22 21:33:45 +0000
committerRichard Henderson <rth@redhat.com>2007-03-22 21:33:45 +0000
commitee8ea39d1be89c11a51e89684d1e36015949f687 (patch)
treeace680a722a0e53efec5b1c5ed875f52981efc95
parent515b8072b2589cfe7e3515cd4027bd31f27df922 (diff)
* 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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@123135 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/calls.c47
-rw-r--r--gcc/config/alpha/unicosmk.h2
-rw-r--r--gcc/config/bfin/bfin.h2
-rw-r--r--gcc/config/iq2000/iq2000.h2
-rw-r--r--gcc/config/mips/mips.h2
-rw-r--r--gcc/config/mn10300/mn10300.h2
-rw-r--r--gcc/config/mt/mt.h2
-rw-r--r--gcc/config/pa/pa.h2
-rw-r--r--gcc/config/rs6000/rs6000.h2
-rw-r--r--gcc/config/score/score.h2
-rw-r--r--gcc/config/spu/spu.h2
-rw-r--r--gcc/config/v850/v850.h2
-rw-r--r--gcc/defaults.h4
-rw-r--r--gcc/doc/tm.texi4
-rw-r--r--gcc/expr.c15
-rw-r--r--gcc/function.c8
17 files changed, 62 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 047a1ffcfe9..576cba8122c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/calls.c b/gcc/calls.c
index 8723e1f4fae..9ef3b0ed125 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -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,
diff --git a/gcc/config/alpha/unicosmk.h b/gcc/config/alpha/unicosmk.h
index a05b33396c0..9435e71a0c2 100644
--- a/gcc/config/alpha/unicosmk.h
+++ b/gcc/config/alpha/unicosmk.h
@@ -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
diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h
index 3085a38909d..b2ee26eeaaa 100644
--- a/gcc/config/bfin/bfin.h
+++ b/gcc/config/bfin/bfin.h
@@ -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
diff --git a/gcc/config/iq2000/iq2000.h b/gcc/config/iq2000/iq2000.h
index 24ea3e0ba1d..5c61bef7bca 100644
--- a/gcc/config/iq2000/iq2000.h
+++ b/gcc/config/iq2000/iq2000.h
@@ -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
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index ef6b02c4186..641772a1a99 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -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)
diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h
index f91db27aaff..b49518b3554 100644
--- a/gcc/config/mn10300/mn10300.h
+++ b/gcc/config/mn10300/mn10300.h
@@ -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
diff --git a/gcc/config/mt/mt.h b/gcc/config/mt/mt.h
index 79d94d451c3..a4afb3c3051 100644
--- a/gcc/config/mt/mt.h
+++ b/gcc/config/mt/mt.h
@@ -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
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 60a72459581..b7edfe18533 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -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
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 386a7c1d359..8aadc43a16a 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -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.
diff --git a/gcc/config/score/score.h b/gcc/config/score/score.h
index 3ee53cfcb87..3fd079221c1 100644
--- a/gcc/config/score/score.h
+++ b/gcc/config/score/score.h
@@ -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
diff --git a/gcc/config/spu/spu.h b/gcc/config/spu/spu.h
index 1fcc2349fac..1f1547218a8 100644
--- a/gcc/config/spu/spu.h
+++ b/gcc/config/spu/spu.h
@@ -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)
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index b6691531eaa..b2c14cc95f3 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -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. */
diff --git a/gcc/defaults.h b/gcc/defaults.h
index b17d59e1940..ed1ae39b9d1 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -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 */
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index ca348e58670..9cdc869198b 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -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
diff --git a/gcc/expr.c b/gcc/expr.c
index 1dc437cb836..1e22c8ca3f8 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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
diff --git a/gcc/function.c b/gcc/function.c
index f6ebb855898..f0a2dd61392 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -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) \