31 |
31 |
32 #ifdef __cplusplus |
32 #ifdef __cplusplus |
33 extern "C" { |
33 extern "C" { |
34 #endif |
34 #endif |
35 |
35 |
36 #ifdef __gnu_linux__ |
36 #if defined(__gnu_linux__) || defined(WINDOWS) |
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) |
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) |
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) |
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 |
54 #else |
55 #else |
55 // use atomic.h |
56 // use atomic.h |
56 #include <atomic.h> |
57 #include <atomic.h> |
57 |
58 |
58 #define ws_atomic_inc32(intptr) atomic_inc_32_nv(intptr) |
59 #define ws_atomic_inc32(intptr) atomic_inc_32_nv(intptr) |