(expand_function_start): Delay copying static chain.

From-SVN: r6979
This commit is contained in:
Richard Kenner 1994-04-06 07:21:12 -04:00
parent 8b0f91011f
commit f0c51a1e34
1 changed files with 16 additions and 1 deletions

View File

@ -4860,7 +4860,13 @@ expand_function_start (subr, parms_have_cleanups)
if (current_function_needs_context)
{
last_ptr = assign_stack_local (Pmode, GET_MODE_SIZE (Pmode), 0);
emit_move_insn (last_ptr, static_chain_incoming_rtx);
#ifdef SMALL_REGISTER_CLASSES
/* Delay copying static chain if it is not a register to avoid
conflicts with regs used for parameters. */
if (GET_CODE (static_chain_incoming_rtx) == REG)
#endif
emit_move_insn (last_ptr, static_chain_incoming_rtx);
}
/* If the parameters of this function need cleaning up, get a label
@ -4976,6 +4982,15 @@ expand_function_start (subr, parms_have_cleanups)
assign_parms (subr, 0);
#ifdef SMALL_REGISTER_CLASSES
/* Copy the static chain now if it wasn't a register. The delay is to
avoid conflicts with the parameter passing registers. */
if (current_function_needs_context)
if (GET_CODE (static_chain_incoming_rtx) != REG)
emit_move_insn (last_ptr, static_chain_incoming_rtx);
#endif
/* The following was moved from init_function_start.
The move is supposed to make sdb output more accurate. */
/* Indicate the beginning of the function body,