34 #endif |
34 #endif |
35 |
35 |
36 #ifdef __gnu_linux__ |
36 #ifdef __gnu_linux__ |
37 |
37 |
38 #define ws_atomic_inc32(intptr) __sync_fetch_and_add(intptr, 1) |
38 #define ws_atomic_inc32(intptr) __sync_fetch_and_add(intptr, 1) |
39 #define ws_atomic_dec32(intptr) __sync_fetch_and_sub(intptr, 1) |
39 #define ws_atomic_dec32(intptr) __sync_fetch_and_sub(intptr, 1) - 1 |
40 #define ws_atomic_add32(intptr, val) __sync_fetch_and_add(intptr, val) |
40 #define ws_atomic_add32(intptr, val) __sync_fetch_and_add(intptr, val) |
41 #define ws_atomic_sub32(intptr, val) __sync_fetch_and_sub(intptr, val) |
41 #define ws_atomic_sub32(intptr, val) __sync_fetch_and_sub(intptr, val) |
42 |
42 |
43 #elif defined(OSX) |
43 #elif defined(OSX) |
44 #include <libkern/OSAtomic.h> |
44 #include <libkern/OSAtomic.h> |
46 #define ws_atomic_inc32(intptr) OSAtomicIncrement32((volatile int32_t *)intptr) |
46 #define ws_atomic_inc32(intptr) OSAtomicIncrement32((volatile int32_t *)intptr) |
47 #define ws_atomic_dec32(intptr) OSAtomicDecrement32((volatile int32_t *)intptr) |
47 #define ws_atomic_dec32(intptr) OSAtomicDecrement32((volatile int32_t *)intptr) |
48 |
48 |
49 #elif defined(BSD) |
49 #elif defined(BSD) |
50 #define ws_atomic_inc32(intptr) __sync_fetch_and_add(intptr, 1) |
50 #define ws_atomic_inc32(intptr) __sync_fetch_and_add(intptr, 1) |
51 #define ws_atomic_dec32(intptr) __sync_fetch_and_sub(intptr, 1) |
51 #define ws_atomic_dec32(intptr) __sync_fetch_and_sub(intptr, 1) - 1 |
52 #define ws_atomic_add32(intptr, val) __sync_fetch_and_add(intptr, val) |
52 #define ws_atomic_add32(intptr, val) __sync_fetch_and_add(intptr, val) |
53 #define ws_atomic_sub32(intptr, val) __sync_fetch_and_sub(intptr, va |
53 #define ws_atomic_sub32(intptr, val) __sync_fetch_and_sub(intptr, va |
54 #else |
54 #else |
55 // use atomic.h |
55 // use atomic.h |
56 #include <atomic.h> |
56 #include <atomic.h> |