1 #ifndef CLIENTS_MS_ATOMIC_H
2 #define CLIENTS_MS_ATOMIC_H
4 #if defined(__SUNPRO_C)
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) */
28 #endif /* CLIENTS_MS_ATOMIC_H */