From ab389695b09d025c19fd92703f50de156fa0f53d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Mon, 13 May 2019 12:17:21 +0700 Subject: [PATCH] Add most useful relaxed and acquire-relase stdatomic convenience macros The header file now contains convenience macros for most useful explicit memory ordering for C11 stdatomics, only relaxed and acquire-release semantics is being used. These macros SHOULD be used instead of atomic__explicit functions. --- lib/isc/include/isc/atomic.h | 37 ++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/lib/isc/include/isc/atomic.h b/lib/isc/include/isc/atomic.h index 893f5526fd..98ba15d50f 100644 --- a/lib/isc/include/isc/atomic.h +++ b/lib/isc/include/isc/atomic.h @@ -21,7 +21,36 @@ * We define a few additional macros to make things easier */ -#define atomic_store_relaxed(o, v) atomic_store_explicit((o), \ - (v), \ - memory_order_relaxed) -#define atomic_load_relaxed(o) atomic_load_explicit((o), memory_order_relaxed) +/* Relaxed Memory Ordering */ + +#define atomic_store_relaxed(o, v) \ + atomic_store_explicit((o), (v), memory_order_relaxed) +#define atomic_load_relaxed(o) \ + atomic_load_explicit((o), memory_order_relaxed) +#define atomic_fetch_add_relaxed(o, v) \ + atomic_fetch_add_explicit((o), (v), memory_order_relaxed) +#define atomic_fetch_sub_relaxed(o, v) \ + atomic_fetch_sub_explicit((o), (v), memory_order_relaxed) +#define atomic_exchange_relaxed(o, v) \ + atomic_exchange_explicit((o), (v), memory_order_relaxed) +#define atomic_compare_exchange_weak_relaxed(o, e, d) \ + atomic_compare_exchange_weak_explicit((o), (e), (d), \ + memory_order_relaxed, \ + memory_order_relaxed) + +/* Acquire-Release Memory Ordering */ + +#define atomic_store_release(o, v) \ + atomic_store_explicit((o), (v), memory_order_release) +#define atomic_load_acquire(o) \ + atomic_load_explicit((o), memory_order_acquire) +#define atomic_fetch_add_acquire(o, v) \ + atomic_fetch_add_explicit((o), (v), memory_order_acquire) +#define atomic_fetch_sub_release(o, v) \ + atomic_fetch_sub_explicit((o), (v), memory_order_release) +#define atomic_exchange_acq_rel(o, v) \ + atomic_exchange_explicit((o), (v), memory_order_acq_rel) +#define atomic_compare_exchange_weak_acq_rel(o, e, d) \ + atomic_compare_exchange_weak_explicit((o), (e), (d), \ + memory_order_acq_rel, \ + memory_order_acquire)