From 77991fccee115731001d6fbe7284232d687355ee Mon Sep 17 00:00:00 2001 From: Jim Huang Date: Sun, 23 Jun 2019 16:53:00 +0800 Subject: [PATCH] Implement ARM/Aarch64 atomic_yield fastpath --- include/mimalloc-atomic.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/mimalloc-atomic.h b/include/mimalloc-atomic.h index d46e8515..f994b0c3 100644 --- a/include/mimalloc-atomic.h +++ b/include/mimalloc-atomic.h @@ -156,10 +156,17 @@ static inline uintptr_t mi_atomic_exchange(volatile uintptr_t* p, uintptr_t exch static inline void mi_atomic_yield() { std::this_thread::yield(); } -#elif (defined(__GNUC__) || defined(__clang__)) && (defined(__x86_64__) || defined(__i386__)) +#elif (defined(__GNUC__) || defined(__clang__)) && \ + (defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__)) +#if defined(__x86_64__) || defined(__i386__) static inline void mi_atomic_yield() { asm volatile ("pause" ::: "memory"); } +#elif defined(__arm__) || defined(__aarch64__) + static inline void mi_atomic_yield() { + asm volatile("yield"); + } +#endif #else #include static inline void mi_atomic_yield() {