From 3d47505ec7c6d0302929a9d4d71678d3df2bdd7d Mon Sep 17 00:00:00 2001 From: zhangyuan21 Date: Wed, 26 Apr 2023 17:07:24 +0800 Subject: [PATCH] arch/arm: Add a "cc" flag to instructions that may modify condition flag. Notify the compiler that the condition flag has changed to prevent the compiler from optimizing and reordering instructions, which may cause exceptions. Signed-off-by: zhangyuan21 --- arch/arm/include/arm/irq.h | 6 +++--- arch/arm/include/armv7-m/irq.h | 2 +- arch/arm/include/armv8-m/irq.h | 2 +- arch/arm/src/tiva/common/lm4xx_tm3c_sysctrl.c | 2 +- arch/arm/src/tiva/common/tiva_eeprom.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/arm/include/arm/irq.h b/arch/arm/include/arm/irq.h index 62cbed6a0a..2d65c735f0 100644 --- a/arch/arm/include/arm/irq.h +++ b/arch/arm/include/arm/irq.h @@ -187,7 +187,7 @@ static inline irqstate_t up_irq_save(void) "\tmsr cpsr_c, %1" : "=r" (flags), "=r" (temp) : - : "memory"); + : "cc", "memory"); return flags; } @@ -200,7 +200,7 @@ static inline void up_irq_restore(irqstate_t flags) "msr cpsr_c, %0" : : "r" (flags) - : "memory"); + : "cc", "memory"); } /* Enable IRQs and return the previous IRQ state */ @@ -216,7 +216,7 @@ static inline irqstate_t up_irq_enable(void) "\tmsr cpsr_c, %1" : "=r" (flags), "=r" (temp) : - : "memory"); + : "cc", "memory"); return flags; } #endif /* __ASSEMBLY__ */ diff --git a/arch/arm/include/armv7-m/irq.h b/arch/arm/include/armv7-m/irq.h index a3e467e3c5..626072c47d 100644 --- a/arch/arm/include/armv7-m/irq.h +++ b/arch/arm/include/armv7-m/irq.h @@ -457,7 +457,7 @@ static inline void up_irq_restore(irqstate_t flags) "1:\n" : : "r" (flags) - : "memory"); + : "cc", "memory"); #endif } diff --git a/arch/arm/include/armv8-m/irq.h b/arch/arm/include/armv8-m/irq.h index 066a575427..0c1809f13f 100644 --- a/arch/arm/include/armv8-m/irq.h +++ b/arch/arm/include/armv8-m/irq.h @@ -430,7 +430,7 @@ static inline void up_irq_restore(irqstate_t flags) "1:\n" : : "r" (flags) - : "memory"); + : "cc", "memory"); #endif } diff --git a/arch/arm/src/tiva/common/lm4xx_tm3c_sysctrl.c b/arch/arm/src/tiva/common/lm4xx_tm3c_sysctrl.c index 833d083071..22703e4f82 100644 --- a/arch/arm/src/tiva/common/lm4xx_tm3c_sysctrl.c +++ b/arch/arm/src/tiva/common/lm4xx_tm3c_sysctrl.c @@ -81,7 +81,7 @@ static inline void tiva_delay(uint32_t delay) __asm__ __volatile__("1:\n" "\tsubs %0, #1\n" "\tbne 1b\n" - : "=r"(delay) : "r"(delay)); + : "=r"(delay) : "r"(delay) : "cc"); } /**************************************************************************** diff --git a/arch/arm/src/tiva/common/tiva_eeprom.c b/arch/arm/src/tiva/common/tiva_eeprom.c index 223a9ff917..d18d66c1a3 100644 --- a/arch/arm/src/tiva/common/tiva_eeprom.c +++ b/arch/arm/src/tiva/common/tiva_eeprom.c @@ -164,7 +164,7 @@ static inline void tiva_delay(uint32_t delay) __asm__ __volatile__("1:\n" "\tsubs %0, #1\n" "\tbne 1b\n" - : "=r"(delay) : "r"(delay)); + : "=r"(delay) : "r"(delay) : "cc"); } /****************************************************************************