1 #ifndef _MACHINE_INSTR_H
2 #define _MACHINE_INSTR_H
6 extern pthread_mutex_t _atomic_add_lock;
7 extern pthread_mutex_t _cas_lock;
8 extern pthread_mutex_t _mb_lock;
11 static inline void atomic_add(volatile int *mem, int val)
13 pthread_mutex_lock(&_atomic_add_lock);
15 /* do the atomic add */
18 pthread_mutex_unlock(&_atomic_add_lock);
22 static inline long compare_and_swap(volatile long *p, long oldval, long newval)
26 pthread_mutex_lock(&_cas_lock);
28 /* do the compare-and-swap */
35 pthread_mutex_unlock(&_cas_lock);
41 #define MEMORY_BARRIER() (pthread_mutex_lock(&_mb_lock), \
42 pthread_mutex_unlock(&_mb_lock))
43 #define STORE_ORDER_BARRIER() MEMORY_BARRIER()
44 #define MEMORY_BARRIER_BEFORE_ATOMIC() /* nothing */
45 #define MEMORY_BARRIER_AFTER_ATOMIC() /* nothing */
47 #endif /* _MACHINE_INSTR_H */