From e296c00c3209450305f5cf270d9cba03cba38a1c Mon Sep 17 00:00:00 2001 From: David Ung Date: Fri, 26 Aug 2005 13:15:14 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/config/mips/mips.c | 21 +++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ed3aca1cc7..4cf749a4547 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-08-26 David Ung + + * 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 * config/crx/crx.md: Make doloop_end pattern usage controllable diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index af2db04f61a..154ec302afa 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -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, -- 2.30.2