Do not generate instruction "yield" on older ARM than v6

This commit is contained in:
Jean Pierre Cimalando 2020-02-01 16:10:25 +01:00
parent c0b4a79612
commit 4f6091a7e2

View file

@ -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