aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1996-03-31 23:02:12 -0700
committerJeff Law <law@gcc.gnu.org>1996-03-31 23:02:12 -0700
commiteecb6f50c217cb9c7b1442da11309d77771d7162 (patch)
treeb09dd6dd3bfe0e02a2c54fe3360d2fa7eac2a7cf /gcc/calls.c
parent4cf8614f1e706a27ca33d289a0c82a9315e55926 (diff)
downloadgcc-eecb6f50c217cb9c7b1442da11309d77771d7162.zip
gcc-eecb6f50c217cb9c7b1442da11309d77771d7162.tar.gz
gcc-eecb6f50c217cb9c7b1442da11309d77771d7162.tar.bz2
calls.c (expand_call): Remove current_call_is_indirect nonsense.
* calls.c (expand_call): Remove current_call_is_indirect nonsense. Add additional argument to INIT_CUMULATIVE_ARGS. (emit_library_call): Likewise. (emit_library_call_value): Likewise. * expr.c (expand_builtin): Likewise. * function.c (assign_parms): Likewise. * config/pa/pa.h (hppa_args): New field "indirect". (INIT_CUMULATIVE_ARGS): Initialize "indirect" field. (FUNCTION_ARG): Check "indirect" field, rather than "current_call_is_indirect". * All other backends updated with new argument to INIT_CUMULATIVE_ARGS From-SVN: r11649
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 0c73490..dca4f65 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -532,7 +532,6 @@ expand_call (exp, target, ignore)
/* Nonzero if a reg parm has been scanned. */
int reg_parm_seen;
/* Nonzero if this is an indirect function call. */
- int current_call_is_indirect = 0;
/* Nonzero if we must avoid push-insns in the args for this call.
If stack space is allocated for register parameters, but not by the
@@ -816,15 +815,6 @@ expand_call (exp, target, ignore)
if (fndecl && DECL_NAME (fndecl))
name = IDENTIFIER_POINTER (DECL_NAME (fndecl));
- /* On some machines (such as the PA) indirect calls have a different
- calling convention than normal calls. FUNCTION_ARG in the target
- description can look at current_call_is_indirect to determine which
- calling convention to use. */
- current_call_is_indirect = (fndecl == 0);
-#if 0
- = TREE_CODE (TREE_OPERAND (exp, 0)) == NON_LVALUE_EXPR ? 1 : 0;
-#endif
-
#if 0
/* Unless it's a call to a specific function that isn't alloca,
if it has one argument, we must assume it might be alloca. */
@@ -913,8 +903,13 @@ expand_call (exp, target, ignore)
we make. */
push_temp_slots ();
- /* Start updating where the next arg would go. */
- INIT_CUMULATIVE_ARGS (args_so_far, funtype, NULL_RTX);
+ /* 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 last 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 == 0));
/* If struct_value_rtx is 0, it means pass the address
as if it were an extra parameter. */
@@ -2259,8 +2254,6 @@ emit_library_call VPROTO((rtx orgfun, int no_queue, enum machine_mode outmode,
struct arg *argvec;
int old_inhibit_defer_pop = inhibit_defer_pop;
rtx call_fusage = 0;
- /* library calls are never indirect calls. */
- int current_call_is_indirect = 0;
VA_START (p, nargs);
@@ -2282,7 +2275,7 @@ emit_library_call VPROTO((rtx orgfun, int no_queue, enum machine_mode outmode,
argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
- INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
+ INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0);
args_size.constant = 0;
args_size.var = 0;
@@ -2538,8 +2531,6 @@ emit_library_call_value VPROTO((rtx orgfun, rtx value, int no_queue,
rtx mem_value = 0;
int pcc_struct_value = 0;
int struct_value_size = 0;
- /* library calls are never indirect calls. */
- int current_call_is_indirect = 0;
int is_const;
VA_START (p, nargs);
@@ -2590,7 +2581,7 @@ emit_library_call_value VPROTO((rtx orgfun, rtx value, int no_queue,
argvec = (struct arg *) alloca ((nargs + 1) * sizeof (struct arg));
- INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
+ INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun, 0);
args_size.constant = 0;
args_size.var = 0;