summaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-18 03:24:53 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-18 03:24:53 +0000
commit707ff8b16a66b8bbb1995fc8f4bb9127f1ccfb31 (patch)
treed5602a9380e9d435ec805a405cf3d2606a5aa4c2 /gcc/calls.c
parent1119ba4774f184ee34f214580be630309af652de (diff)
downloadgcc-707ff8b16a66b8bbb1995fc8f4bb9127f1ccfb31.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44095 138bc75d-0d04-0410-961f-82ee72b054a4
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 7421d340cd1..045c9f9e1a2 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. */