PR target/45263
        * config/avr/libgcc.S (__do_global_ctors, __do_global_dtors): Don't use
        r20 around calls of __tablejump_elpm__

http://gcc.gnu.org/viewcvs?view=revision&revision=172384
http://gcc.gnu.org/viewcvs?view=revision&revision=172385




Index: config/avr/libgcc.S
===================================================================
--- config/avr/libgcc.S	(Revision 172258)
+++ config/avr/libgcc.S	(Arbeitskopie)
@@ -791,22 +791,22 @@ __do_clear_bss:
 #if defined(__AVR_HAVE_RAMPZ__)
 __do_global_ctors:
 	ldi	r17, hi8(__ctors_start)
-	ldi	r16, hh8(__ctors_start)
 	ldi	r28, lo8(__ctors_end)
 	ldi	r29, hi8(__ctors_end)
-	ldi	r20, hh8(__ctors_end)
+	ldi	r16, hh8(__ctors_end)
 	rjmp	.L__do_global_ctors_start
 .L__do_global_ctors_loop:
 	sbiw	r28, 2
-	sbc     r20, __zero_reg__
+	sbc     r16, __zero_reg__
 	mov_h	r31, r29
 	mov_l	r30, r28
-	out     __RAMPZ__, r20
+	out     __RAMPZ__, r16
 	XCALL	__tablejump_elpm__
 .L__do_global_ctors_start:
 	cpi	r28, lo8(__ctors_start)
 	cpc	r29, r17
-	cpc	r20, r16
+	ldi	r24, hh8(__ctors_start)
+	cpc	r16, r24
 	brne	.L__do_global_ctors_loop
 #else
 __do_global_ctors:
@@ -832,22 +832,22 @@ __do_global_ctors:
 #if defined(__AVR_HAVE_RAMPZ__)
 __do_global_dtors:
 	ldi	r17, hi8(__dtors_end)
-	ldi	r16, hh8(__dtors_end)
 	ldi	r28, lo8(__dtors_start)
 	ldi	r29, hi8(__dtors_start)
-	ldi	r20, hh8(__dtors_start)
+	ldi	r16, hh8(__dtors_start)
 	rjmp	.L__do_global_dtors_start
 .L__do_global_dtors_loop:
 	sbiw	r28, 2
-	sbc     r20, __zero_reg__
+	sbc     r16, __zero_reg__
 	mov_h	r31, r29
 	mov_l	r30, r28
-	out     __RAMPZ__, r20
+	out     __RAMPZ__, r16
 	XCALL	__tablejump_elpm__
 .L__do_global_dtors_start:
 	cpi	r28, lo8(__dtors_end)
 	cpc	r29, r17
-	cpc	r20, r16
+	ldi	r24, hh8(__dtors_end)
+	cpc	r16, r24
 	brne	.L__do_global_dtors_loop
 #else
 __do_global_dtors:

Reply via email to