aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2013-07-10 12:39:18 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2013-07-10 12:39:18 +0000
commitbb6f2bacbb0d7133a1187bb394d5713b98a54942 (patch)
tree1f7ab4a200aa9f74cfa97002a7325d6550f681e9
parent5219b2325d7c60be8a7fe22565fca11093c86f9d (diff)
downloadgcc-bb6f2bacbb0d7133a1187bb394d5713b98a54942.zip
gcc-bb6f2bacbb0d7133a1187bb394d5713b98a54942.tar.gz
gcc-bb6f2bacbb0d7133a1187bb394d5713b98a54942.tar.bz2
re PR target/57844 (ICE: unrecognizable addqi3 insn with -msp8 and frame size of 128 bytes)
PR target/57844 * config/avr/avr.c (avr_prologue_setup_frame): Trunk -size to mode of my_fp. From-SVN: r200872
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/avr/avr.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b47090c..e5a233f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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
* config/avr/avr-mcus.def (atmega16hva, atmega16hva2, atmega16hvb)
(atmega16m1, atmega16u4, atmega32a, atmega32c1, atmega32hvb)
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index e397186..8a602a4 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -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;