Without this change, GCC thinks it's OK to clobber r13. It doesn't do it
very often, but it's enough if it does it once and it turns out
acpi_bus_receive_event() had code that would trigger this issue.
Fix by declaring r13 as a global register variable.
extern void ia64_bad_param_for_setreg (void);
extern void ia64_bad_param_for_getreg (void);
+register unsigned long ia64_r13 asm ("r13");
+
#define ia64_setreg(regnum, val) \
({ \
switch (regnum) { \
asm volatile ("mov %0=psr" : "=r"(ia64_intri_res)); \
break; \
case _IA64_REG_TP: /* for current() */ \
- { \
- register __u64 ia64_r13 asm ("r13"); \
- ia64_intri_res = ia64_r13; \
- } \
+ ia64_intri_res = ia64_r13; \
break; \
case _IA64_REG_AR_KR0 ... _IA64_REG_AR_EC: \
asm volatile ("mov %0=ar%1" : "=r" (ia64_intri_res) \