mips.c (mips_expand_prologue): Handle case when generating for MIPS16 and the outgoing argument area is more...

* config/mips/mips.c (mips_expand_prologue): Handle case when
generating for MIPS16 and the outgoing argument area is more than
SMALL_OPERAND. Use the frame pointer as temporary to generate the
add instruction.

From-SVN: r103519
This commit is contained in:
David Ung 2005-08-26 13:15:14 +00:00 committed by David Ung
parent 55d61dbacc
commit e296c00c32
2 changed files with 24 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2005-08-26 David Ung <davidu@mips.com>
* config/mips/mips.c (mips_expand_prologue): Handle case when
generating for MIPS16 and the outgoing argument area is more than
SMALL_OPERAND. Use the frame pointer as temporary to generate the
add instruction.
2005-08-26 Paul Woegerer <paul.woegerer@nsc.com>
* config/crx/crx.md: Make doloop_end pattern usage controllable

View file

@ -6736,10 +6736,23 @@ mips_expand_prologue (void)
if (TARGET_MIPS16 && cfun->machine->frame.args_size != 0)
{
rtx offset = GEN_INT (cfun->machine->frame.args_size);
RTX_FRAME_RELATED_P
(emit_insn (gen_add3_insn (hard_frame_pointer_rtx,
stack_pointer_rtx,
offset))) = 1;
if (SMALL_OPERAND (cfun->machine->frame.args_size))
RTX_FRAME_RELATED_P
(emit_insn (gen_add3_insn (hard_frame_pointer_rtx,
stack_pointer_rtx,
offset))) = 1;
else
{
emit_move_insn (MIPS_PROLOGUE_TEMP (Pmode), offset);
emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx);
emit_insn (gen_add3_insn (hard_frame_pointer_rtx,
hard_frame_pointer_rtx,
MIPS_PROLOGUE_TEMP (Pmode)));
mips_set_frame_expr
(gen_rtx_SET (VOIDmode, hard_frame_pointer_rtx,
plus_constant (stack_pointer_rtx,
cfun->machine->frame.args_size)));
}
}
else
RTX_FRAME_RELATED_P (emit_move_insn (hard_frame_pointer_rtx,