summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/al/array_typed.h2
-rw-r--r--include/al/atomic.h16
-rw-r--r--include/al/macros.h3
3 files changed, 13 insertions, 8 deletions
diff --git a/include/al/array_typed.h b/include/al/array_typed.h
index 076f58f..75b9d83 100644
--- a/include/al/array_typed.h
+++ b/include/al/array_typed.h
@@ -7,8 +7,6 @@
#include "macros.h"
-#define AL_PASTER_EVALUATOR(X, Y) X##_##Y
-#define AL_PASTER(X, Y) AL_PASTER_EVALUATOR(X, Y)
#define AL_EMPTY_DEFAULT_1(FUNC, T, S, ...) FUNC(T, S)
#define AL_EMPTY_DEFAULT(...) AL_EMPTY_DEFAULT_1(__VA_ARGS__, , )
diff --git a/include/al/atomic.h b/include/al/atomic.h
index 39b0c25..adb25c0 100644
--- a/include/al/atomic.h
+++ b/include/al/atomic.h
@@ -12,13 +12,16 @@
#define AL_ATOMIC_ACQ_REL c89atomic_memory_order_acq_rel
#define AL_ATOMIC_SEQ_CST c89atomic_memory_order_seq_cst
-#define atomic(T) _al_atomic_##T
+#define AL_PASTER_EVALUATOR(X, Y) X##_##Y
+#define AL_PASTER(X, Y) AL_PASTER_EVALUATOR(X, Y)
-#define al_atomic_load(T) _al_atomic_load_##T
-#define al_atomic_store(T) _al_atomic_store_##T
-#define al_atomic_add(T) _al_atomic_add_##T
-#define al_atomic_sub(T) _al_atomic_sub_##T
-#define al_atomic_compare_and_swap(T) _al_atomic_compare_and_swap_##T
+#define atomic(T) AL_PASTER(_al_atomic, T)
+
+#define al_atomic_load(T) AL_PASTER(_al_atomic_load, T)
+#define al_atomic_store(T) AL_PASTER(_al_atomic_store, T)
+#define al_atomic_add(T) AL_PASTER(_al_atomic_add, T)
+#define al_atomic_sub(T) AL_PASTER(_al_atomic_sub, T)
+#define al_atomic_compare_and_swap(T) AL_PASTER(_al_atomic_compare_and_swap, T)
// Special case for pointers.
#define _al_atomic_load_void(p, order) c89atomic_load_explicit_ptr((volatile void **)p, order)
@@ -71,6 +74,7 @@ AL_ATOMIC_DEFINE(u8, uint8, 8);
AL_ATOMIC_DEFINE(s8, int8, i8);
AL_ATOMIC_DEFINE(f64, f64, f64);
AL_ATOMIC_DEFINE(f32, f32, f32);
+AL_ATOMIC_DEFINE(bool, bool, 8);
static inline f32 _al_atomic_add_f32(atomic(f32) *a, f32 value, s32 order)
{
diff --git a/include/al/macros.h b/include/al/macros.h
index 477eef3..81fb581 100644
--- a/include/al/macros.h
+++ b/include/al/macros.h
@@ -3,6 +3,9 @@
#define AL_MACRO_WRAP(c) do { c } while(0)
+#define AL_PASTER_EVALUATOR(X, Y) X##_##Y
+#define AL_PASTER(X, Y) AL_PASTER_EVALUATOR(X, Y)
+
#if defined LIKELY || defined UNLIKELY
#error "Conflicting definitions for LIKELY/UNLIKELY"
#endif