28 static inline bool cmp_swap (T &ptr, T o, T n) {
return __sync_bool_compare_and_swap (&ptr, o, n); }
32 static inline T add (T &ptr, T v) {
return __sync_add_and_fetch (&ptr, v); }
36 static inline T sub (T &ptr, T v) {
return __sync_sub_and_fetch (&ptr, v); }
40 static inline void set_mask (T &ptr, T v) { __sync_or_and_fetch (&ptr, v); }
44 static inline void clr_mask (T &ptr, T v) { __sync_and_and_fetch (&ptr, ~v); }
48 static inline bool test_set_bit (T &val,
unsigned long bit)
51 asm volatile (
"lock; bts%z1 %2, %1; setc %0" :
"=q" (ret),
"+m" (val) :
"ir" (bit) :
"cc");
57 static inline bool test_clr_bit (T &val,
unsigned long bit)
60 asm volatile (
"lock; btr%z1 %2, %1; setc %0" :
"=q" (ret),
"+m" (val) :
"ir" (bit) :
"cc");