From 3a4d587b32145384beb79942f6ba1137a1409656 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 24 Jun 2004 06:10:35 +0000 Subject: [PATCH] calls.c (expand_call): Call INIT_CUMULATIVE_ARGS earlier, and pass raw n_named_args to it. * 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. From-SVN: r83583 --- gcc/ChangeLog | 7 +++++++ gcc/calls.c | 46 ++++++++++++++++++++++++++++------------------ gcc/targhooks.c | 7 ++++--- 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 + + * 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 * 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. */ -- 2.30.2