aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/avr/avr.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bc2d7bd..26916e8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-31 Denis Chertykov <denisc@overta.ru>
+
+ PR target/15417
+ * config/avr/avr.c (avr_hard_regno_mode_ok): Enable usage of
+ frame pointer register only in Pmode while reload in progress.
+
2004-08-31 Stephane Carrez <stcarrez@nerim.fr>
PR target/15334
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 26d6fdb..5099805 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -5125,6 +5125,12 @@ avr_hard_regno_mode_ok (int regno, enum machine_mode mode)
if (regno == REG_Y + 1)
return 0;
+ /* Reload can use r28:r29 for reload register and for frame pointer
+ in one insn. It's wrong. We must disable it. */
+ if (mode != Pmode && reload_in_progress && frame_pointer_required_p ()
+ && regno <= REG_Y && (regno + GET_MODE_SIZE (mode)) >= (REG_Y + 1))
+ return 0;
+
if (mode == QImode)
return 1;
/* if (regno < 24 && !AVR_ENHANCED)