Skip to content

Commit 021bc3a

Browse files
committed
add riscv64 atomic yield (pause with Zihintpause fallback)
1 parent e8e1e77 commit 021bc3a

1 file changed

Lines changed: 12 additions & 1 deletion

File tree

include/mimalloc/atomic.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,8 @@ static inline void mi_atomic_yield(void) {
416416
#elif (defined(__GNUC__) || defined(__clang__)) && \
417417
(defined(__x86_64__) || defined(__i386__) || \
418418
defined(__aarch64__) || defined(__arm__) || \
419-
defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(__POWERPC__))
419+
defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(__POWERPC__) || \
420+
defined(__riscv))
420421
#if defined(__x86_64__) || defined(__i386__)
421422
static inline void mi_atomic_yield(void) {
422423
__asm__ volatile ("pause" ::: "memory");
@@ -445,6 +446,16 @@ static inline void mi_atomic_yield(void) {
445446
__asm__ __volatile__ ("or 27,27,27" ::: "memory");
446447
}
447448
#endif
449+
#elif defined(__riscv)
450+
#if defined(__riscv_zihintpause)
451+
static inline void mi_atomic_yield(void) {
452+
__asm__ volatile("pause" ::: "memory");
453+
}
454+
#else
455+
static inline void mi_atomic_yield(void) {
456+
__asm__ volatile("nop" ::: "memory");
457+
}
458+
#endif
448459
#endif
449460
#elif defined(__sun)
450461
#include <synch.h>

0 commit comments

Comments
 (0)