summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-24 06:10:35 +0000
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-24 06:10:35 +0000
commit30a10006ad6b64c4f0db48f2387c6d970f6a74ee (patch)
tree43dbb623994689c18ffd4dc140e02cd4778da8e9
parent5063000d1dd5d05e86e6b44c621e953f88df5193 (diff)
downloadppe42-gcc-30a10006ad6b64c4f0db48f2387c6d970f6a74ee.tar.gz
ppe42-gcc-30a10006ad6b64c4f0db48f2387c6d970f6a74ee.zip
* calls.c (expand_call): Call INIT_CUMULATIVE_ARGS earlier, and
pass raw n_named_args to it. * targhooks.c: Formatting. (hook_bool_CUMULATIVE_ARGS_false): Correct comment. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83583 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/calls.c46
-rw-r--r--gcc/targhooks.c7
3 files changed, 39 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bd1c4a369f9..eb04bf36dc0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2004-06-24 Alan Modra <amodra@bigpond.net.au>
+
+ * calls.c (expand_call): Call INIT_CUMULATIVE_ARGS earlier, and
+ pass raw n_named_args to it.
+ * targhooks.c: Formatting.
+ (hook_bool_CUMULATIVE_ARGS_false): Correct comment.
+
2004-06-23 Richard Henderson <rth@redhat.com>
* c-gimplify.c (gimplify_decl_stmt): Push gimplify_one_sizepos inside
diff --git a/gcc/calls.c b/gcc/calls.c
index c443542fce2..80931003f92 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2275,6 +2275,26 @@ expand_call (tree exp, rtx target, int ignore)
num_actuals++;
/* Compute number of named args.
+ First, do a raw count of the args for INIT_CUMULATIVE_ARGS. */
+
+ if (type_arg_types != 0)
+ n_named_args
+ = (list_length (type_arg_types)
+ /* Count the struct value address, if it is passed as a parm. */
+ + structure_value_addr_parm);
+ else
+ /* If we know nothing, treat all args as named. */
+ n_named_args = num_actuals;
+
+ /* Start updating where the next arg would go.
+
+ On some machines (such as the PA) indirect calls have a different
+ calling convention than normal calls. The fourth argument in
+ INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
+ or not. */
+ INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, fndecl, n_named_args);
+
+ /* Now possibly adjust the number of named args.
Normally, don't include the last named arg if anonymous args follow.
We do include the last named arg if
targetm.calls.strict_argument_naming() returns nonzero.
@@ -2292,27 +2312,17 @@ expand_call (tree exp, rtx target, int ignore)
we do not have any reliable way to pass unnamed args in
registers, so we must force them into memory. */
- if ((targetm.calls.strict_argument_naming (&args_so_far)
- || ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far))
- && type_arg_types != 0)
- n_named_args
- = (list_length (type_arg_types)
- /* Don't include the last named arg. */
- - (targetm.calls.strict_argument_naming (&args_so_far) ? 0 : 1)
- /* Count the struct value address, if it is passed as a parm. */
- + structure_value_addr_parm);
+ if (type_arg_types != 0
+ && targetm.calls.strict_argument_naming (&args_so_far))
+ ;
+ else if (type_arg_types != 0
+ && ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far))
+ /* Don't include the last named arg. */
+ --n_named_args;
else
- /* If we know nothing, treat all args as named. */
+ /* Treat all args as named. */
n_named_args = num_actuals;
- /* Start updating where the next arg would go.
-
- On some machines (such as the PA) indirect calls have a different
- calling convention than normal calls. The fourth argument in
- INIT_CUMULATIVE_ARGS tells the backend if this is an indirect call
- or not. */
- INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX, fndecl, n_named_args);
-
/* Make a vector to hold all the information about each arg. */
args = alloca (num_actuals * sizeof (struct arg_data));
memset (args, 0, num_actuals * sizeof (struct arg_data));
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index c93a1a8ec66..80ac8721d21 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -113,7 +113,7 @@ default_builtin_setjmp_frame_value (void)
return virtual_stack_vars_rtx;
}
-/* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */
+/* Generic hook that takes a CUMULATIVE_ARGS pointer and returns false. */
bool
hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
@@ -122,9 +122,10 @@ hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
}
bool
-default_pretend_outgoing_varargs_named(CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
+default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
{
- return (targetm.calls.setup_incoming_varargs != default_setup_incoming_varargs);
+ return (targetm.calls.setup_incoming_varargs
+ != default_setup_incoming_varargs);
}
/* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */
OpenPOWER on IntegriCloud