From 4f6091a7e2bfafcc760162dc7d73b39500ed099b Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sat, 1 Feb 2020 16:10:25 +0100 Subject: [PATCH] Do not generate instruction "yield" on older ARM than v6 --- src/external/atomic_queue/defs.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/external/atomic_queue/defs.h b/src/external/atomic_queue/defs.h index 1f721f6c..49d7d615 100644 --- a/src/external/atomic_queue/defs.h +++ b/src/external/atomic_queue/defs.h @@ -20,7 +20,21 @@ static inline void spin_loop_pause() noexcept { namespace atomic_queue { constexpr int CACHE_LINE_SIZE = 64; static inline void spin_loop_pause() noexcept { - __asm__ __volatile__("yield"); +#if (defined(__ARM_ARCH_6K__) || \ + defined(__ARM_ARCH_6Z__) || \ + defined(__ARM_ARCH_6ZK__) || \ + defined(__ARM_ARCH_6T2__) || \ + defined(__ARM_ARCH_7__) || \ + defined(__ARM_ARCH_7A__) || \ + defined(__ARM_ARCH_7R__) || \ + defined(__ARM_ARCH_7M__) || \ + defined(__ARM_ARCH_7S__) || \ + defined(__ARM_ARCH_8A__) || \ + defined(__aarch64__)) + asm volatile ("yield" ::: "memory"); +#else + asm volatile ("nop" ::: "memory"); +#endif } } // namespace atomic_queue #else