diff options
author | Andrew Waterman <waterman@s141.Millennium.Berkeley.EDU> | 2010-09-06 17:09:40 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@s141.Millennium.Berkeley.EDU> | 2010-09-06 17:09:40 -0700 |
commit | fb6dba8fb1ac05bb1fea53cbdaa5d74c0fdb35b3 (patch) | |
tree | eed6702dd25036ac22ecb4a35cf2f87c2845af47 /pk/atomic.h | |
parent | dd84f5743dd5527f08df7cebb1423149926eacdc (diff) | |
download | pk-fb6dba8fb1ac05bb1fea53cbdaa5d74c0fdb35b3.zip pk-fb6dba8fb1ac05bb1fea53cbdaa5d74c0fdb35b3.tar.gz pk-fb6dba8fb1ac05bb1fea53cbdaa5d74c0fdb35b3.tar.bz2 |
[pk] use __sync_* builtins for atomics
Diffstat (limited to 'pk/atomic.h')
-rw-r--r-- | pk/atomic.h | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/pk/atomic.h b/pk/atomic.h index 3294b6c..942c398 100644 --- a/pk/atomic.h +++ b/pk/atomic.h @@ -7,16 +7,12 @@ typedef struct { atomic_t lock; } spinlock_t; static inline long atomic_add(atomic_t* a, long inc) { - long old = a->val; - a->val += inc; - return old; + return __sync_fetch_and_add(&a->val, inc); } static inline long atomic_swap(atomic_t* a, long val) { - long old = a->val; - a->val = val; - return old; + return __sync_lock_test_and_set(&a->val, val); } static inline void atomic_set(atomic_t* a, long val) |