OSDN Git Service

Backport from 2012-04-19 mainline r186588.
authorgjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Apr 2012 11:33:01 +0000 (11:33 +0000)
committergjl <gjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Apr 2012 11:33:01 +0000 (11:33 +0000)
PR target/53033
* config/avr/avr.c (avr_out_load_psi): Fix assembler template for
the case *(X+const).

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

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

index 8679687..c82d939 100644 (file)
@@ -1,3 +1,11 @@
+2012-04-19  Georg-Johann Lay  <avr@gjlay.de>
+
+       Backport from 2012-04-19 mainline r186588.
+
+       PR target/53033
+       * config/avr/avr.c (avr_out_load_psi): Fix assembler template for
+       the case *(X+const).
+
 2012-04-18  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/alpha/sync.md (fetchop_name): Change ior attribute to "or".
index c25f898..af00aee 100644 (file)
@@ -3476,15 +3476,16 @@ avr_out_load_psi (rtx insn, rtx *op, int *plen)
                                   "mov r27,__tmp_reg__", op, plen, -6);
             }
           
-            avr_asm_len ("adiw r26,%o1"      CR_TAB
-                         "ld r24,X+"         CR_TAB
-                         "ld r25,X+"         CR_TAB
-                         "ld r26,X", op, plen, -4);
+          avr_asm_len ("adiw r26,%o1" CR_TAB
+                       "ld %A0,X+"    CR_TAB
+                       "ld %B0,X+"    CR_TAB
+                       "ld %C0,X", op, plen, -4);
 
-            if (reg_dest != REG_X - 2)
-              avr_asm_len ("sbiw r26,%o1+2", op, plen, 1);
+          if (reg_dest != REG_W
+              && !reg_unused_after (insn, XEXP (base, 0)))
+            avr_asm_len ("sbiw r26,%o1+2", op, plen, 1);
 
-            return "";
+          return "";
         }
       
       if (reg_dest == reg_base)