]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/57844 (ICE: unrecognizable addqi3 insn with -msp8 and frame size of...
authorGeorg-Johann Lay <avr@gjlay.de>
Wed, 10 Jul 2013 12:39:18 +0000 (12:39 +0000)
committerGeorg-Johann Lay <gjl@gcc.gnu.org>
Wed, 10 Jul 2013 12:39:18 +0000 (12:39 +0000)
PR target/57844
* config/avr/avr.c (avr_prologue_setup_frame): Trunk -size to mode
of my_fp.

From-SVN: r200872

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

index b47090cb7f13f9881dfd0c8c5b0d5884bbda4570..e5a233f87411cbe1703e8d4a41badd195d6a8f33 100644 (file)
@@ -1,3 +1,9 @@
+2013-07-10  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/57844
+       * config/avr/avr.c (avr_prologue_setup_frame): Trunk -size to mode
+       of my_fp.
+
 2013-07-10  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/57506
index e397186398e92cd3db4e6db547b52e771b64eed9..8a602a413f8b3a025434af980cf626c80d59d357 100644 (file)
@@ -1112,7 +1112,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
@@ -1151,6 +1151,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  ************/
 
@@ -1171,7 +1172,8 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
             }
 
           insn = emit_move_insn (my_fp, plus_constant (GET_MODE (my_fp),
-                                                       my_fp, -size));
+                                                       my_fp, neg_size));
+
           if (frame_pointer_needed)
             {
               RTX_FRAME_RELATED_P (insn) = 1;