aboutsummaryrefslogtreecommitdiff
path: root/pk/atomic.h
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-09-06 17:09:40 -0700
committerAndrew Waterman <waterman@s141.Millennium.Berkeley.EDU>2010-09-06 17:09:40 -0700
commitfb6dba8fb1ac05bb1fea53cbdaa5d74c0fdb35b3 (patch)
treeeed6702dd25036ac22ecb4a35cf2f87c2845af47 /pk/atomic.h
parentdd84f5743dd5527f08df7cebb1423149926eacdc (diff)
downloadpk-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.h8
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)