+2012-03-28 Georg-Johann Lay <avr@gjlay.de>
+
+ PR target/52741
+
+ Revert r181936 from 2011-12-02 for:
+ * config/avr/libgcc.S (__prologue_saves__, __epilogue_restores__)
+ * config/avr/avr.md (movhi_sp_r_irq_off, movhi_sp_r_irq_on)
+ * config/avr/avr.c (output_movhi, avr_file_start)
+
2012-03-28 Jakub Jelinek <jakub@redhat.com>
PR target/52736
}
else if (test_hard_reg_class (STACK_REG, src))
{
- *l = 2;
- return AVR_HAVE_8BIT_SP
- ? (AS2 (in,%A0,__SP_L__) CR_TAB
- AS1 (clr,%B0))
- : (AS2 (in,%A0,__SP_L__) CR_TAB
- AS2 (in,%B0,__SP_H__));
+ *l = 2;
+ return (AS2 (in,%A0,__SP_L__) CR_TAB
+ AS2 (in,%B0,__SP_H__));
}
if (AVR_HAVE_MOVW)
default_file_start ();
- fputs ("__SREG__ = 0x3f\n", asm_out_file);
- if (!AVR_HAVE_8BIT_SP)
- fputs ("__SP_H__ = 0x3e\n", asm_out_file);
- fputs ("__SP_L__ = 0x3d\n", asm_out_file);
+ fputs ("__SREG__ = 0x3f\n"
+ "__SP_H__ = 0x3e\n"
+ "__SP_L__ = 0x3d\n", asm_out_file);
fputs ("__tmp_reg__ = 0\n"
"__zero_reg__ = 1\n", asm_out_file);
[(set (match_operand:HI 0 "stack_register_operand" "=q")
(unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
UNSPECV_WRITE_SP_IRQ_OFF))]
- "!AVR_HAVE_8BIT_SP"
+ ""
"out __SP_H__, %B1
out __SP_L__, %A1"
[(set_attr "length" "2")
[(set (match_operand:HI 0 "stack_register_operand" "=q")
(unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
UNSPECV_WRITE_SP_IRQ_ON))]
- "!AVR_HAVE_8BIT_SP"
+ ""
"cli
out __SP_H__, %B1
sei
push r17
push r28
push r29
-#if defined (__AVR_HAVE_8BIT_SP__)
-;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
-;; so this lines are dead code. To make it work, devices without
-;; SP_H must get their own multilib(s), see PR51345.
- in r28,__SP_L__
- sub r28,r26
- clr r29
- out __SP_L__,r28
-#else
in r28,__SP_L__
in r29,__SP_H__
sub r28,r26
out __SP_H__,r29
out __SREG__,__tmp_reg__
out __SP_L__,r28
-#endif
#if defined (__AVR_HAVE_EIJMP_EICALL__)
eijmp
#else
ldd r16,Y+4
ldd r17,Y+3
ldd r26,Y+2
-#if defined (__AVR_HAVE_8BIT_SP__)
-;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
-;; so this lines are dead code. To make it work, devices without
-;; SP_H must get their own multilib(s).
- ldd r29,Y+1
- add r28,r30
- out __SP_L__,r28
- mov r28, r26
-#else
ldd r27,Y+1
add r28,r30
adc r29,__zero_reg__
out __SP_L__,r28
mov_l r28, r26
mov_h r29, r27
-#endif
ret
.endfunc
#endif /* defined (L_epilogue) */