]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/jemalloc/include/jemalloc/internal/spin.h
Update jemalloc to version 5.1.0.
[FreeBSD/FreeBSD.git] / contrib / jemalloc / include / jemalloc / internal / spin.h
1 #ifndef JEMALLOC_INTERNAL_SPIN_H
2 #define JEMALLOC_INTERNAL_SPIN_H
3
4 #define SPIN_INITIALIZER {0U}
5
6 typedef struct {
7         unsigned iteration;
8 } spin_t;
9
10 static inline void
11 spin_cpu_spinwait() {
12 #  if HAVE_CPU_SPINWAIT
13         CPU_SPINWAIT;
14 #  else
15         volatile int x = 0;
16         x = x;
17 #  endif
18 }
19
20 static inline void
21 spin_adaptive(spin_t *spin) {
22         volatile uint32_t i;
23
24         if (spin->iteration < 5) {
25                 for (i = 0; i < (1U << spin->iteration); i++) {
26                         spin_cpu_spinwait();
27                 }
28                 spin->iteration++;
29         } else {
30 #ifdef _WIN32
31                 SwitchToThread();
32 #else
33                 sched_yield();
34 #endif
35         }
36 }
37
38 #undef SPIN_INLINE
39
40 #endif /* JEMALLOC_INTERNAL_SPIN_H */