mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 15:09:31 +03:00
Merge pull request #339 from devnexen/spin_impl_upd
Restricts cpu yield instructions a little.
This commit is contained in:
commit
03503ea4e5
1 changed files with 10 additions and 4 deletions
|
@ -282,16 +282,22 @@ static inline void mi_atomic_yield(void) {
|
||||||
YieldProcessor();
|
YieldProcessor();
|
||||||
}
|
}
|
||||||
#elif (defined(__GNUC__) || defined(__clang__)) && \
|
#elif (defined(__GNUC__) || defined(__clang__)) && \
|
||||||
(defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__))
|
(defined(__x86_64__) || defined(__i386__) || (defined(__arm__) && __ARM_ARCH__ >= 7) || defined(__aarch64__))
|
||||||
#if defined(__x86_64__) || defined(__i386__)
|
#if defined(__x86_64__) || defined(__i386__)
|
||||||
static inline void mi_atomic_yield(void) {
|
static inline void mi_atomic_yield(void) {
|
||||||
__asm__ volatile ("pause" ::: "memory");
|
__asm__ volatile ("pause" ::: "memory");
|
||||||
}
|
}
|
||||||
#elif defined(__arm__) || defined(__aarch64__)
|
#elif (defined(__arm__) && __ARM_ARCH__ >= 7) || defined(__aarch64__)
|
||||||
static inline void mi_atomic_yield(void) {
|
static inline void mi_atomic_yield(void) {
|
||||||
__asm__ volatile("yield");
|
__asm__ volatile("yield" ::: "memory");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#elif defined(__sun)
|
||||||
|
// Fallback for other archs
|
||||||
|
#include <synch.h>
|
||||||
|
static inline void mi_atomic_yield(void) {
|
||||||
|
smt_pause();
|
||||||
|
}
|
||||||
#elif defined(__wasi__)
|
#elif defined(__wasi__)
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
static inline void mi_atomic_yield(void) {
|
static inline void mi_atomic_yield(void) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue