Hi, for families avrxmega5/7 after ELPM the reset of RAMPZ to
zero was missing in some situations due to  shortcut-return in
avr_out_lpm which which bypassed that reset.

Ok to apply and backport?

Johann

        PR target/86040
        * config/avr/avr.c (avr_out_lpm): Do not shortcut-return.
Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c	(revision 276704)
+++ config/avr/avr.c	(working copy)
@@ -3780,13 +3780,14 @@ avr_out_lpm (rtx_insn *insn, rtx *op, in
           gcc_unreachable();
 
         case 1:
-          return avr_asm_len ("%4lpm %0,%a2", xop, plen, 1);
+          avr_asm_len ("%4lpm %0,%a2", xop, plen, 1);
+          break;
 
         case 2:
           if (REGNO (dest) == REG_Z)
-            return avr_asm_len ("%4lpm %5,%a2+" CR_TAB
-                                "%4lpm %B0,%a2" CR_TAB
-                                "mov %A0,%5", xop, plen, 3);
+            avr_asm_len ("%4lpm %5,%a2+" CR_TAB
+                         "%4lpm %B0,%a2" CR_TAB
+                         "mov %A0,%5", xop, plen, 3);
           else
             {
               avr_asm_len ("%4lpm %A0,%a2+" CR_TAB
@@ -3815,9 +3816,9 @@ avr_out_lpm (rtx_insn *insn, rtx *op, in
                        "%4lpm %B0,%a2+", xop, plen, 2);
 
           if (REGNO (dest) == REG_Z - 2)
-            return avr_asm_len ("%4lpm %5,%a2+" CR_TAB
-                                "%4lpm %C0,%a2" CR_TAB
-                                "mov %D0,%5", xop, plen, 3);
+            avr_asm_len ("%4lpm %5,%a2+" CR_TAB
+                         "%4lpm %C0,%a2" CR_TAB
+                         "mov %D0,%5", xop, plen, 3);
           else
             {
               avr_asm_len ("%4lpm %C0,%a2+" CR_TAB

Reply via email to