+2001-07-17 Richard Henderson <rth@redhat.com>
+
+ * 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.
+
2001-07-17 Chandrakala Chavva <cchavva@redhat.com>
- * config.gcc: For *-*-chorusos triplet, get chorus.h file from
- config directory.
- * config/i386/chorus.h: Move up.
- * config/sparc/chorus.h: Likewise.
- * config/rs6000/chorus.h: Likewise.
- * config/chorus.h: Moved here.
+ * config.gcc: For *-*-chorusos triplet, get chorus.h file from
+ config directory.
+ * config/i386/chorus.h: Move up.
+ * config/sparc/chorus.h: Likewise.
+ * config/rs6000/chorus.h: Likewise.
+ * config/chorus.h: Moved here.
2001-07-17 Andreas Schwab <schwab@suse.de>
}
/* All arguments and registers used for the call are set up by now! */
- function = prepare_call_address (function, NULL_TREE, &call_fusage, 0);
+ function = prepare_call_address (function, NULL_TREE, &call_fusage, 0, 0);
/* Ensure address is valid. SYMBOL_REF is already valid, so no need,
and we don't want to load it into a register as an optimization,
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;
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)
}
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);
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. */
in its original home. This becomes invalid if any more code is emitted. */
extern rtx hard_function_value PARAMS ((tree, tree, int));
-extern rtx prepare_call_address PARAMS ((rtx, tree, rtx *, int));
+extern rtx prepare_call_address PARAMS ((rtx, tree, rtx *, int, int));
extern rtx expand_call PARAMS ((tree, rtx, int));