From: green Date: Sat, 8 Sep 2012 01:14:22 +0000 (+0000) Subject: Optimize moxie function prologues X-Git-Tag: upstream/4.9.2~10755 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6f37a3d6798b15c3af80f3c18667c802283560b9;p=platform%2Fupstream%2Flinaro-gcc.git Optimize moxie function prologues git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191088 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f78102c..399feaa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-09-07 Anthony Green + + * config/moxie/moxie.c (moxie_expand_prologue): Optimize prologue + for functions with large static stack requirements. + (moxie_expand_epilogue): Use $r12 instead of $r5 for pulling saved + values off of the stack. + 2012-09-07 Nick Clifton * config/v850/v850.h (DBX_DEBUGGING_INFO): Define. diff --git a/gcc/config/moxie/moxie.c b/gcc/config/moxie/moxie.c index 8d40412..97f8af0 100644 --- a/gcc/config/moxie/moxie.c +++ b/gcc/config/moxie/moxie.c @@ -1,5 +1,5 @@ /* Target Code for moxie - Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation + Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation Contributed by Anthony Green. This file is part of GCC. @@ -293,8 +293,8 @@ moxie_expand_prologue (void) if (cfun->machine->size_for_adjusting_sp > 0) { - int i = cfun->machine->size_for_adjusting_sp; - while (i > 255) + int i = cfun->machine->size_for_adjusting_sp; + while ((i >= 255) && (i <= 510)) { insn = emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, @@ -302,13 +302,23 @@ moxie_expand_prologue (void) RTX_FRAME_RELATED_P (insn) = 1; i -= 255; } - if (i > 0) + if (i <= 255) { insn = emit_insn (gen_subsi3 (stack_pointer_rtx, stack_pointer_rtx, GEN_INT (i))); RTX_FRAME_RELATED_P (insn) = 1; } + else + { + rtx reg = gen_rtx_REG (SImode, MOXIE_R12); + insn = emit_move_insn (reg, GEN_INT (i)); + RTX_FRAME_RELATED_P (insn) = 1; + insn = emit_insn (gen_subsi3 (stack_pointer_rtx, + stack_pointer_rtx, + reg)); + RTX_FRAME_RELATED_P (insn) = 1; + } } } @@ -320,7 +330,7 @@ moxie_expand_epilogue (void) if (cfun->machine->callee_saved_reg_size != 0) { - reg = gen_rtx_REG (Pmode, MOXIE_R5); + reg = gen_rtx_REG (Pmode, MOXIE_R12); if (cfun->machine->callee_saved_reg_size <= 255) { emit_move_insn (reg, hard_frame_pointer_rtx);