diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-18 03:24:53 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-18 03:24:53 +0000 |
commit | 707ff8b16a66b8bbb1995fc8f4bb9127f1ccfb31 (patch) | |
tree | d5602a9380e9d435ec805a405cf3d2606a5aa4c2 /gcc/calls.c | |
parent | 1119ba4774f184ee34f214580be630309af652de (diff) | |
download | gcc-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.c | 9 |
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. */ |