2011-05-04 Stuart Henderson <shenders@gcc.gnu.org>
authorStuart Henderson <shenders@gcc.gnu.org>
Wed, 4 May 2011 10:42:59 +0000 (10:42 +0000)
committerStuart Henderson <shenders@gcc.gnu.org>
Wed, 4 May 2011 10:42:59 +0000 (10:42 +0000)
        From Jie Zhang
        * config/bfin/bfin.c (bfin_expand_prologue): Don't clobber P2.

From-SVN: r173364

gcc/ChangeLog
gcc/config/bfin/bfin.c

index 6f30c3113acf706471fb0188049b983463a1e79f..3722fe5e6f8d5581f8a54fc287f3a830ecf1de86 100644 (file)
@@ -1,3 +1,8 @@
+2011-05-04  Stuart Henderson  <shenders@gcc.gnu.org>
+
+       From Jie Zhang
+       * config/bfin/bfin.c (bfin_expand_prologue): Don't clobber P2.
+
 2011-05-04  Nick Clifton  <nickc@redhat.com>
 
        * config/mn10300/mn10300.c: Include cfgloop.h.
index e046789eec6944b68931d86a2271ed95d7362b62..596042d139e8eff807f37accd6cc380c20b8635d 100644 (file)
@@ -1341,8 +1341,10 @@ bfin_expand_prologue (void)
        = bfin_initial_elimination_offset (ARG_POINTER_REGNUM,
                                           STACK_POINTER_REGNUM);
       rtx lim = crtl->limit_stack ? stack_limit_rtx : NULL_RTX;
+      rtx tmp = gen_rtx_REG (Pmode, REG_R3);
       rtx p2reg = gen_rtx_REG (Pmode, REG_P2);
 
+      emit_move_insn (tmp, p2reg);
       if (!lim)
        {
          emit_move_insn (p2reg, gen_int_mode (0xFFB00000, SImode));
@@ -1379,6 +1381,7 @@ bfin_expand_prologue (void)
        }
       emit_insn (gen_compare_lt (bfin_cc_rtx, spreg, lim));
       emit_insn (gen_trapifcc ());
+      emit_move_insn (p2reg, tmp);
     }
   expand_prologue_reg_save (spreg, all, false);