]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/52505 ([avr]: __memx address space reading unintentionally from RAM)
authorGeorg-Johann Lay <avr@gjlay.de>
Wed, 7 Mar 2012 10:36:30 +0000 (10:36 +0000)
committerGeorg-Johann Lay <gjl@gcc.gnu.org>
Wed, 7 Mar 2012 10:36:30 +0000 (10:36 +0000)
libgcc/
PR target/52505
* config/avr/lib1funcs.S (__xload_1): Don't read unintentionally
from RAM.

gcc/
PR target/52505
* config/avr/avr.c (avr_out_xload): Don't read unintentionally
from RAM.
* config/avr/avr.md (xload_8): Adjust insn length.

From-SVN: r185031

gcc/ChangeLog
gcc/config/avr/avr.c
gcc/config/avr/avr.md
libgcc/ChangeLog
libgcc/config/avr/lib1funcs.S

index 1ceccc4308daeebd44d78ceb3d6b6d69bd6365cc..baac09c0dcb273a4050845601f3785d0968290cf 100644 (file)
@@ -1,3 +1,10 @@
+2012-03-07  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/52505
+       * config/avr/avr.c (avr_out_xload): Don't read unintentionally
+       from RAM.
+       * config/avr/avr.md (xload_8): Adjust insn length.
+
 2012-03-07  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/52461
index ef49c738a6f504188b0d83a1e136ea3dc9510a2d..87b7e0953da8a8494dceef858eff4b097e76e614 100644 (file)
@@ -2789,8 +2789,9 @@ avr_out_xload (rtx insn ATTRIBUTE_UNUSED, rtx *op, int *plen)
   if (plen)
     *plen = 0;
 
-  avr_asm_len ("ld %3,%a2" CR_TAB
-               "sbrs %1,7", xop, plen, 2);
+  avr_asm_len ("sbrc %1,7" CR_TAB
+               "ld %3,%a2" CR_TAB
+               "sbrs %1,7", xop, plen, 3);
 
   avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, 1);
 
index bcf21af63127c064a823e324eb016c74088dd568..9a208ee0685b6b1868e5d51015424d5130f6c036 100644 (file)
 ;;========================================================================
 ;; Move stuff around
 
+;; "loadqi_libgcc"
+;; "loadhi_libgcc"
+;; "loadpsi_libgcc"    
+;; "loadsi_libgcc"    
+;; "loadsf_libgcc"    
 (define_expand "load<mode>_libgcc"
   [(set (match_dup 3)
         (match_dup 2))
     operands[1] = replace_equiv_address (operands[1], operands[3]);
     set_mem_addr_space (operands[1], ADDR_SPACE_FLASH);
   })
-    
+
+;; "load_qi_libgcc"
+;; "load_hi_libgcc"
+;; "load_psi_libgcc"    
+;; "load_si_libgcc"    
+;; "load_sf_libgcc"    
 (define_insn "load_<mode>_libgcc"
   [(set (reg:MOVMODE 22)
         (match_operand:MOVMODE 0 "memory_operand" "m,m"))]
     DONE;
   })
 
+;; "xloadqi_A"
+;; "xloadhi_A"
+;; "xloadpsi_A"
+;; "xloadsi_A"
+;; "xloadsf_A"
 (define_insn_and_split "xload<mode>_A"
   [(set (match_operand:MOVMODE 0 "register_operand" "=r")
         (match_operand:MOVMODE 1 "memory_operand"    "m"))
   {
     return avr_out_xload (insn, operands, NULL);
   }
-  [(set_attr "length" "3,4")
+  [(set_attr "length" "4,4")
    (set_attr "adjust_len" "*,xload")
    (set_attr "isa" "lpmx,lpm")
    (set_attr "cc" "none")])
index a85c6948e109b22bd5351427175b9f14a85ab4f9..950242437324c35894db51ca703418f0b893501a 100644 (file)
@@ -1,3 +1,9 @@
+2012-03-07  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/52505
+       * config/avr/lib1funcs.S (__xload_1): Don't read unintentionally
+       from RAM.
+
 2012-03-07  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/52461
index 1a8c7a1ce8b1315d4e20f8d28e59c8affda781fe..6e6c390059b58d64b3354113e6958a54ee49c51a 100644 (file)
@@ -2131,6 +2131,7 @@ ENDF __load_4
 #if defined (L_xload_1)
 DEFUN __xload_1
 #if defined (__AVR_HAVE_LPMX__) && !defined (__AVR_HAVE_ELPM__)
+    sbrc    HHI8, 7
     ld      D0, Z
     sbrs    HHI8, 7
     lpm     D0, Z