aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>2001-07-17 20:24:53 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-07-17 20:24:53 -0700
commit3affaf29346bfaea9af3b75fcb0e8acaa26a6eb8 (patch)
treed5602a9380e9d435ec805a405cf3d2606a5aa4c2 /gcc/calls.c
parent2bd2bdd9d2890d459bb896e320c47f09d5bce054 (diff)
downloadgcc-3affaf29346bfaea9af3b75fcb0e8acaa26a6eb8.zip
gcc-3affaf29346bfaea9af3b75fcb0e8acaa26a6eb8.tar.gz
gcc-3affaf29346bfaea9af3b75fcb0e8acaa26a6eb8.tar.bz2
calls.c (prepare_call_address): New parameter SIBCALLP.
* calls.c (prepare_call_address): New parameter SIBCALLP. If true, don't force the function address into a register. (expand_call, emit_library_call_value_1): Update callers. * builtins.c (expand_builtin_apply): Likewise. * expr.h (prepare_call_address): Update decl. From-SVN: r44095
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 7421d34..045c9f9 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -355,11 +355,12 @@ calls_function_1 (exp, which)
CALL_INSN_FUNCTION_USAGE information. */
rtx
-prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
+prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen, sibcallp)
rtx funexp;
tree fndecl;
rtx *call_fusage;
int reg_parm_seen;
+ int sibcallp;
{
rtx static_chain_value = 0;
@@ -377,7 +378,7 @@ prepare_call_address (funexp, fndecl, call_fusage, reg_parm_seen)
funexp = ((SMALL_REGISTER_CLASSES && reg_parm_seen)
? force_not_mem (memory_address (FUNCTION_MODE, funexp))
: memory_address (FUNCTION_MODE, funexp));
- else
+ else if (! sibcallp)
{
#ifndef NO_FUNCTION_CSE
if (optimize && ! flag_no_function_cse)
@@ -3038,7 +3039,7 @@ expand_call (exp, target, ignore)
}
funexp = prepare_call_address (funexp, fndecl, &call_fusage,
- reg_parm_seen);
+ reg_parm_seen, pass == 0);
load_register_parameters (args, num_actuals, &call_fusage, flags);
@@ -4005,7 +4006,7 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
else
argnum = 0;
- fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0);
+ fun = prepare_call_address (fun, NULL_TREE, &call_fusage, 0, 0);
/* Now load any reg parms into their regs. */