Skip to content

Commit 3352ccf

Browse files
authored
split asm volatile back out (#1420)
1 parent 7119978 commit 3352ccf

File tree

3 files changed

+19
-16
lines changed
  • src/rp2_common

3 files changed

+19
-16
lines changed

src/rp2_common/hardware_divider/include/hardware/divider.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ static inline void hw_divider_wait_ready(void) {
8585
// we use one less register and instruction than gcc which uses a TST instruction
8686

8787
uint32_t tmp; // allow compiler to pick scratch register
88-
pico_default_asm (
88+
pico_default_asm_volatile (
8989
"hw_divider_result_loop_%=:"
9090
"ldr %0, [%1, %2]\n\t"
9191
"lsrs %0, %0, #1\n\t"
@@ -296,7 +296,7 @@ static inline int32_t hw_divider_remainder_s32(int32_t a, int32_t b) {
296296
* \ingroup hardware_divider
297297
*/
298298
static inline void hw_divider_pause(void) {
299-
pico_default_asm (
299+
pico_default_asm_volatile(
300300
"b _1_%=\n"
301301
"_1_%=:\n"
302302
"b _2_%=\n"
@@ -305,7 +305,7 @@ static inline void hw_divider_pause(void) {
305305
"_3_%=:\n"
306306
"b _4_%=\n"
307307
"_4_%=:\n"
308-
:: : );
308+
:::);
309309
}
310310

311311
/*! \brief Do a hardware unsigned HW divide, wait for result, return quotient

src/rp2_common/hardware_sync/include/hardware/sync.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ typedef volatile uint32_t spin_lock_t;
116116
*/
117117
#if !__has_builtin(__sev)
118118
__force_inline static void __sev(void) {
119-
pico_default_asm ("sev");
119+
pico_default_asm_volatile ("sev");
120120
}
121121
#endif
122122

@@ -128,7 +128,7 @@ __force_inline static void __sev(void) {
128128
*/
129129
#if !__has_builtin(__wfe)
130130
__force_inline static void __wfe(void) {
131-
pico_default_asm ("wfe");
131+
pico_default_asm_volatile ("wfe");
132132
}
133133
#endif
134134

@@ -139,7 +139,7 @@ __force_inline static void __wfe(void) {
139139
*/
140140
#if !__has_builtin(__wfi)
141141
__force_inline static void __wfi(void) {
142-
pico_default_asm ("wfi");
142+
pico_default_asm_volatile("wfi");
143143
}
144144
#endif
145145

@@ -150,7 +150,7 @@ __force_inline static void __wfi(void) {
150150
* instruction will be observed before any explicit access after the instruction.
151151
*/
152152
__force_inline static void __dmb(void) {
153-
pico_default_asm ("dmb" : : : "memory");
153+
pico_default_asm_volatile("dmb" : : : "memory");
154154
}
155155

156156
/*! \brief Insert a DSB instruction in to the code path.
@@ -161,7 +161,7 @@ __force_inline static void __dmb(void) {
161161
* accesses before this instruction complete.
162162
*/
163163
__force_inline static void __dsb(void) {
164-
pico_default_asm ("dsb" : : : "memory");
164+
pico_default_asm_volatile("dsb" : : : "memory");
165165
}
166166

167167
/*! \brief Insert a ISB instruction in to the code path.
@@ -172,7 +172,7 @@ __force_inline static void __dsb(void) {
172172
* the ISB instruction has been completed.
173173
*/
174174
__force_inline static void __isb(void) {
175-
pico_default_asm ("isb");
175+
pico_default_asm_volatile("isb" ::: "memory");
176176
}
177177

178178
/*! \brief Acquire a memory fence
@@ -213,8 +213,10 @@ __force_inline static void __mem_fence_release(void) {
213213
*/
214214
__force_inline static uint32_t save_and_disable_interrupts(void) {
215215
uint32_t status;
216-
pico_default_asm ("mrs %0, PRIMASK" : "=r" (status)::);
217-
pico_default_asm ("cpsid i");
216+
pico_default_asm_volatile(
217+
"mrs %0, PRIMASK\n"
218+
"cpsid i"
219+
: "=r" (status) ::);
218220
return status;
219221
}
220222

@@ -224,7 +226,7 @@ __force_inline static uint32_t save_and_disable_interrupts(void) {
224226
* \param status Previous interrupt status from save_and_disable_interrupts()
225227
*/
226228
__force_inline static void restore_interrupts(uint32_t status) {
227-
pico_default_asm ("msr PRIMASK,%0"::"r" (status) : );
229+
pico_default_asm_volatile("msr PRIMASK,%0"::"r" (status) : );
228230
}
229231

230232
/*! \brief Get HW Spinlock instance from number

src/rp2_common/pico_platform/include/pico/platform.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,8 @@ extern "C" {
335335
#define MIN(a, b) ((b)>(a)?(a):(b))
336336
#endif
337337

338-
#define pico_default_asm(...) __asm volatile (".syntax unified\n" __VA_ARGS__)
338+
#define pico_default_asm(...) __asm (".syntax unified\n" __VA_ARGS__)
339+
#define pico_default_asm_volatile(...) __asm volatile (".syntax unified\n" __VA_ARGS__)
339340

340341
/*! \brief Execute a breakpoint instruction
341342
* \ingroup pico_platform
@@ -357,7 +358,7 @@ static inline void __breakpoint(void) {
357358
* might - even above the memory store!)
358359
*/
359360
__force_inline static void __compiler_memory_barrier(void) {
360-
pico_default_asm ("" : : : "memory");
361+
pico_default_asm_volatile ("" : : : "memory");
361362
}
362363

363364
/*! \brief Macro for converting memory addresses to 32 bit addresses suitable for DMA
@@ -479,7 +480,7 @@ __force_inline static int32_t __mul_instruction(int32_t a, int32_t b) {
479480
*/
480481
static __force_inline uint __get_current_exception(void) {
481482
uint exception;
482-
pico_default_asm ("mrs %0, ipsr" : "=l" (exception));
483+
pico_default_asm( "mrs %0, ipsr" : "=l" (exception));
483484
return exception;
484485
}
485486

@@ -501,7 +502,7 @@ static __force_inline uint __get_current_exception(void) {
501502
* \param minimum_cycles the minimum number of system clock cycles to delay for
502503
*/
503504
static inline void busy_wait_at_least_cycles(uint32_t minimum_cycles) {
504-
pico_default_asm (
505+
pico_default_asm_volatile(
505506
"1: subs %0, #3\n"
506507
"bcs 1b\n"
507508
: "+l" (minimum_cycles) : : "memory"

0 commit comments

Comments
 (0)