- #define IRQ_SAVE_DISABLE(x) \
- do { \
- asm volatile ( \
- "mrs %0, cpsr\n\t" \
- "orr r0, %0, #0xc0\n\t" \
- "msr cpsr_c, r0" \
- : "=r" (x) \
- : /* no inputs */ \
- : "r0" \
- ); \
+ #define IRQ_SAVE_DISABLE(x) \
+ do { \
+ cpu_flags_t sreg; \
+ (void) (&sreg == &x); \
+ asm volatile ( \
+ "mrs %0, cpsr\n\t" \
+ "orr %1, %0, #0xc0\n\t" \
+ "msr cpsr_c, %1\n\t" \
+ : "=r" (x), "=r" (sreg) \
+ : : "memory", "cc"); \