OSDN Git Service

PR target/15417
authordenisc <denisc@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Aug 2004 20:25:32 +0000 (20:25 +0000)
committerdenisc <denisc@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Aug 2004 20:25:32 +0000 (20:25 +0000)
* config/avr/avr.c (avr_hard_regno_mode_ok): Enable usage of
frame pointer register only in Pmode while reload in progress.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@86842 138bc75d-0d04-0410-961f-82ee72b054a4

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

index bc2d7bd..26916e8 100644 (file)
@@ -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
index 26d6fdb..5099805 100644 (file)
@@ -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)