]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add most useful relaxed and acquire-relase stdatomic convenience macros
authorOndřej Surý <ondrej@sury.org>
Mon, 13 May 2019 05:17:21 +0000 (12:17 +0700)
committerOndřej Surý <ondrej@sury.org>
Mon, 13 May 2019 05:17:21 +0000 (12:17 +0700)
The header file <isc/atomic.h> 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_<func>_explicit functions.

lib/isc/include/isc/atomic.h

index 893f5526fd09891ed48f0d51e90c1d6c43ed41cc..98ba15d50fb5c86f83cce5bd8fadb914045a9483 100644 (file)
  * 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)