diff options
author | Ben Wagner <bungeman@chromium.org> | 2021-08-31 12:38:50 -0400 |
---|---|---|
committer | Ben Wagner <bungeman@chromium.org> | 2021-08-31 12:38:50 -0400 |
commit | 6e68763085b2a9003b3b5fab4ff6418a667124f2 (patch) | |
tree | 140f8e3d4506517bae188af7716959568c8667db /src | |
parent | 57032f489b2cbe98c8e7927f4c18738869831f41 (diff) | |
download | fontconfig-6e68763085b2a9003b3b5fab4ff6418a667124f2.tar.gz |
Add memory order constraints to C11 atomics
Reduce the strength of the C11 atomics from memory_order_seq_cst to the
actually required memory order constraints for each operation. In
addition to reflecting the already documented memory order constraints,
this should allow for better code generation.
Diffstat (limited to 'src')
-rw-r--r-- | src/fcatomic.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/fcatomic.h b/src/fcatomic.h index a41b0aa..3f4a9d3 100644 --- a/src/fcatomic.h +++ b/src/fcatomic.h @@ -57,11 +57,11 @@ typedef <type> fc_atomic_int_t; typedef atomic_int fc_atomic_int_t; #define FC_ATOMIC_INT_FORMAT "d" -#define fc_atomic_int_add(AI, V) atomic_fetch_add (&(AI), (V)) +#define fc_atomic_int_add(AI, V) atomic_fetch_add_explicit (&(AI), (V), memory_order_acq_rel) -#define fc_atomic_ptr_get(P) atomic_load ((_Atomic(void *)*) (P)) +#define fc_atomic_ptr_get(P) atomic_load_explicit ((_Atomic(void *)*) (P), memory_order_acquire) static inline FcBool _fc_atomic_ptr_cmpexch(_Atomic(void *)*P, void * O, _Atomic(void *) N) { - return atomic_compare_exchange_strong(P, &O, N); + return atomic_compare_exchange_strong_explicit(P, &O, N, memory_order_release, memory_order_relaxed); } #define fc_atomic_ptr_cmpexch(P,O,N) _fc_atomic_ptr_cmpexch ((_Atomic(void *)*) (P), (O), (N)) |