From: amodra Date: Thu, 24 Jun 2004 06:10:35 +0000 (+0000) Subject: * calls.c (expand_call): Call INIT_CUMULATIVE_ARGS earlier, and X-Git-Tag: upstream/4.9.2~70317 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=30a10006ad6b64c4f0db48f2387c6d970f6a74ee;p=platform%2Fupstream%2Flinaro-gcc.git * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd1c4a3..eb04bf3 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 c443542..80931003 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 c93a1a8..80ac8721 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. */