2 * mono-membar.h: Memory barrier inline functions
5 * Mark Probst (mark.probst@gmail.com)
10 #ifndef _MONO_UTILS_MONO_MEMBAR_H_
11 #define _MONO_UTILS_MONO_MEMBAR_H_
20 static inline void mono_memory_barrier (void)
25 static inline void mono_memory_read_barrier (void)
30 static inline void mono_memory_write_barrier (void)
34 #elif defined(USE_GCC_ATOMIC_OPS)
35 static inline void mono_memory_barrier (void)
37 __sync_synchronize ();
40 static inline void mono_memory_read_barrier (void)
42 mono_memory_barrier ();
45 static inline void mono_memory_write_barrier (void)
47 mono_memory_barrier ();
49 #elif defined(sparc) || defined(__sparc__)
50 static inline void mono_memory_barrier (void)
52 __asm__ __volatile__ ("membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad" : : : "memory");
55 static inline void mono_memory_read_barrier (void)
57 __asm__ __volatile__ ("membar #LoadLoad" : : : "memory");
60 static inline void mono_memory_write_barrier (void)
62 __asm__ __volatile__ ("membar #StoreStore" : : : "memory");
64 #elif defined(__s390__)
65 static inline void mono_memory_barrier (void)
67 __asm__ __volatile__ ("bcr 15,0" : : : "memory");
70 static inline void mono_memory_read_barrier (void)
72 mono_memory_barrier ();
75 static inline void mono_memory_write_barrier (void)
77 mono_memory_barrier ();
79 #elif defined(__ia64__)
80 static inline void mono_memory_barrier (void)
82 __asm__ __volatile__ ("mf" : : : "memory");
85 static inline void mono_memory_read_barrier (void)
87 mono_memory_barrier ();
90 static inline void mono_memory_write_barrier (void)
92 mono_memory_barrier ();
94 #elif defined(MONO_CROSS_COMPILE)
95 static inline void mono_memory_barrier (void)
99 static inline void mono_memory_read_barrier (void)
103 static inline void mono_memory_write_barrier (void)
108 #endif /* _MONO_UTILS_MONO_MEMBAR_H_ */