summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Wagner <bungeman@chromium.org>2021-08-31 12:38:50 -0400
committerBen Wagner <bungeman@chromium.org>2021-08-31 12:38:50 -0400
commit6e68763085b2a9003b3b5fab4ff6418a667124f2 (patch)
tree140f8e3d4506517bae188af7716959568c8667db /src
parent57032f489b2cbe98c8e7927f4c18738869831f41 (diff)
downloadfontconfig-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.h6
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))