Fixed atomics and getline on solaris.
[awesomized/libmemcached] / clients / ms_atomic.h
1 #ifndef CLIENTS_MS_ATOMIC_H
2 #define CLIENTS_MS_ATOMIC_H
3
4 #if defined(__SUNPRO_C)
5 # define _KERNEL
6 # include <atomic.h>
7 # undef _KERNEL
8 #else
9 # define atomic_add_8(X, Y) __sync_fetch_and_add((X), (Y))
10 # define atomic_add_16(X, Y) __sync_fetch_and_add((X), (Y))
11 # define atomic_add_32(X, Y) __sync_fetch_and_add((X), (Y))
12 # define atomic_add_64(X, Y) __sync_fetch_and_add((X), (Y))
13 # define atomic_dec_8(X) __sync_fetch_and_sub((X), 1)
14 # define atomic_dec_16(X) __sync_fetch_and_sub((X), 1)
15 # define atomic_dec_32(X) __sync_fetch_and_sub((X), 1)
16 # define atomic_dec_64(X) __sync_fetch_and_sub((X), 1)
17 /* The same as above, but these return the new value instead of void */
18 # define atomic_add_8_nv(X, Y) __sync_fetch_and_add((X), (Y))
19 # define atomic_add_16_nv(X, Y) __sync_fetch_and_add((X), (Y))
20 # define atomic_add_32_nv(X, Y) __sync_fetch_and_add((X), (Y))
21 # define atomic_add_64_nv(X, Y) __sync_fetch_and_add((X), (Y))
22 # define atomic_dec_8_nv(X) __sync_fetch_and_sub((X), 1)
23 # define atomic_dec_16_nv(X) __sync_fetch_and_sub((X), 1)
24 # define atomic_dec_32_nv(X) __sync_fetch_and_sub((X), 1)
25 # define atomic_dec_64_nv(X) __sync_fetch_and_sub((X), 1)
26 #endif /* defined(__SUNPRO_C) */
27
28 #endif /* CLIENTS_MS_ATOMIC_H */