Rev 1892 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1892 | Rev 3959 | ||
---|---|---|---|
Line 77... | Line 77... | ||
77 | # define _cairo_atomic_int_get(x) (*x) |
77 | # define _cairo_atomic_int_get(x) (*x) |
78 | # define _cairo_atomic_ptr_get(x) (*x) |
78 | # define _cairo_atomic_ptr_get(x) (*x) |
79 | #endif |
79 | #endif |
Line 80... | Line 80... | ||
80 | 80 | ||
- | 81 | # define _cairo_atomic_int_inc(x) ((void) __sync_fetch_and_add(x, 1)) |
|
81 | # define _cairo_atomic_int_inc(x) ((void) __sync_fetch_and_add(x, 1)) |
82 | # define _cairo_atomic_int_dec(x) ((void) __sync_fetch_and_add(x, -1)) |
82 | # define _cairo_atomic_int_dec_and_test(x) (__sync_fetch_and_add(x, -1) == 1) |
83 | # define _cairo_atomic_int_dec_and_test(x) (__sync_fetch_and_add(x, -1) == 1) |
83 | # define _cairo_atomic_int_cmpxchg(x, oldv, newv) __sync_bool_compare_and_swap (x, oldv, newv) |
84 | # define _cairo_atomic_int_cmpxchg(x, oldv, newv) __sync_bool_compare_and_swap (x, oldv, newv) |
Line 84... | Line 85... | ||
84 | # define _cairo_atomic_int_cmpxchg_return_old(x, oldv, newv) __sync_val_compare_and_swap (x, oldv, newv) |
85 | # define _cairo_atomic_int_cmpxchg_return_old(x, oldv, newv) __sync_val_compare_and_swap (x, oldv, newv) |
Line 109... | Line 110... | ||
109 | typedef AO_t cairo_atomic_int_t; |
110 | typedef AO_t cairo_atomic_int_t; |
Line 110... | Line 111... | ||
110 | 111 | ||
Line 111... | Line 112... | ||
111 | # define _cairo_atomic_int_get(x) (AO_load_full (x)) |
112 | # define _cairo_atomic_int_get(x) (AO_load_full (x)) |
- | 113 | ||
112 | 114 | # define _cairo_atomic_int_inc(x) ((void) AO_fetch_and_add1_full(x)) |
|
113 | # define _cairo_atomic_int_inc(x) ((void) AO_fetch_and_add1_full(x)) |
115 | # define _cairo_atomic_int_dec(x) ((void) AO_fetch_and_sub1_full(x)) |
Line 114... | Line 116... | ||
114 | # define _cairo_atomic_int_dec_and_test(x) (AO_fetch_and_sub1_full(x) == 1) |
116 | # define _cairo_atomic_int_dec_and_test(x) (AO_fetch_and_sub1_full(x) == 1) |
115 | # define _cairo_atomic_int_cmpxchg(x, oldv, newv) AO_compare_and_swap_full(x, oldv, newv) |
117 | # define _cairo_atomic_int_cmpxchg(x, oldv, newv) AO_compare_and_swap_full(x, oldv, newv) |
Line 138... | Line 140... | ||
138 | typedef int32_t cairo_atomic_int_t; |
140 | typedef int32_t cairo_atomic_int_t; |
Line 139... | Line 141... | ||
139 | 141 | ||
Line 140... | Line 142... | ||
140 | # define _cairo_atomic_int_get(x) (OSMemoryBarrier(), *(x)) |
142 | # define _cairo_atomic_int_get(x) (OSMemoryBarrier(), *(x)) |
- | 143 | ||
141 | 144 | # define _cairo_atomic_int_inc(x) ((void) OSAtomicIncrement32Barrier (x)) |
|
142 | # define _cairo_atomic_int_inc(x) ((void) OSAtomicIncrement32Barrier (x)) |
145 | # define _cairo_atomic_int_dec(x) ((void) OSAtomicDecrement32Barrier (x)) |
Line 143... | Line 146... | ||
143 | # define _cairo_atomic_int_dec_and_test(x) (OSAtomicDecrement32Barrier (x) == 0) |
146 | # define _cairo_atomic_int_dec_and_test(x) (OSAtomicDecrement32Barrier (x) == 0) |
144 | # define _cairo_atomic_int_cmpxchg(x, oldv, newv) OSAtomicCompareAndSwap32Barrier(oldv, newv, x) |
147 | # define _cairo_atomic_int_cmpxchg(x, oldv, newv) OSAtomicCompareAndSwap32Barrier(oldv, newv, x) |
Line 176... | Line 179... | ||
176 | typedef cairo_atomic_intptr_t cairo_atomic_int_t; |
179 | typedef cairo_atomic_intptr_t cairo_atomic_int_t; |
Line 177... | Line 180... | ||
177 | 180 | ||
178 | cairo_private void |
181 | cairo_private void |
Line -... | Line 182... | ||
- | 182 | _cairo_atomic_int_inc (cairo_atomic_int_t *x); |
|
- | 183 | ||
179 | _cairo_atomic_int_inc (cairo_atomic_int_t *x); |
184 | #define _cairo_atomic_int_dec(x) _cairo_atomic_int_dec_and_test(x) |
180 | 185 | ||
Line 181... | Line 186... | ||
181 | cairo_private cairo_bool_t |
186 | cairo_private cairo_bool_t |
182 | _cairo_atomic_int_dec_and_test (cairo_atomic_int_t *x); |
187 | _cairo_atomic_int_dec_and_test (cairo_atomic_int_t *x); |
Line 252... | Line 257... | ||
252 | #define _cairo_atomic_uint_get(x) _cairo_atomic_int_get(x) |
257 | #define _cairo_atomic_uint_get(x) _cairo_atomic_int_get(x) |
253 | #define _cairo_atomic_uint_cmpxchg(x, oldv, newv) \ |
258 | #define _cairo_atomic_uint_cmpxchg(x, oldv, newv) \ |
254 | _cairo_atomic_int_cmpxchg((cairo_atomic_int_t *)x, oldv, newv) |
259 | _cairo_atomic_int_cmpxchg((cairo_atomic_int_t *)x, oldv, newv) |
Line 255... | Line 260... | ||
255 | 260 | ||
- | 261 | #define _cairo_status_set_error(status, err) do { \ |
|
- | 262 | int ret__; \ |
|
256 | #define _cairo_status_set_error(status, err) do { \ |
263 | assert (err < CAIRO_STATUS_LAST_STATUS); \ |
257 | /* hide compiler warnings about cairo_status_t != int (gcc treats its as \ |
264 | /* hide compiler warnings about cairo_status_t != int (gcc treats its as \ |
258 | * an unsigned integer instead, and about ignoring the return value. */ \ |
265 | * an unsigned integer instead, and about ignoring the return value. */ \ |
259 | int ret__ = _cairo_atomic_int_cmpxchg ((cairo_atomic_int_t *) status, CAIRO_STATUS_SUCCESS, err); \ |
266 | ret__ = _cairo_atomic_int_cmpxchg ((cairo_atomic_int_t *) status, CAIRO_STATUS_SUCCESS, err); \ |
260 | (void) ret__; \ |
267 | (void) ret__; \ |
Line 261... | Line 268... | ||
261 | } while (0) |
268 | } while (0) |