OSDN Git Service

Backport from 2013-07-10 trunk r200872.
authorgjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jul 2013 12:43:07 +0000 (12:43 +0000)
committergjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jul 2013 12:43:07 +0000 (12:43 +0000)
PR target/57844
* config/avr/avr.c (avr_prologue_setup_frame): Trunk -size to mode
of my_fp.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@200874 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/avr/avr.c

index 4a31941..907e3b7 100644 (file)
@@ -1,3 +1,11 @@
+2013-07-10  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2013-07-10 trunk r200872.
+
+       PR target/57844
+       * config/avr/avr.c (avr_prologue_setup_frame): Trunk -size to mode
+       of my_fp.
+
 2013-07-10  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
index 40a37b3..bac87e8 100644 (file)
@@ -1004,7 +1004,7 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
               leaf function and thus X has already been saved.  */
               
           int irq_state = -1;
-          HOST_WIDE_INT size_cfa = size;
+          HOST_WIDE_INT size_cfa = size, neg_size;
           rtx fp_plus_insns, fp, my_fp;
 
           gcc_assert (frame_pointer_needed
@@ -1043,6 +1043,7 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
             }
 
           size = trunc_int_for_mode (size, GET_MODE (my_fp));
+          neg_size = trunc_int_for_mode (-size, GET_MODE (my_fp));
           
           /************  Method 1: Adjust frame pointer  ************/
           
@@ -1062,7 +1063,7 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
                             gen_rtx_SET (VOIDmode, fp, stack_pointer_rtx));
             }
 
-          insn = emit_move_insn (my_fp, plus_constant (my_fp, -size));
+          insn = emit_move_insn (my_fp, plus_constant (my_fp, neg_size));
           if (frame_pointer_needed)
             {
               RTX_FRAME_RELATED_P (insn) = 1;