From 27b5e13d75c58d5e32538a4b5aef65ab86f4bb38 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Fri, 3 Jan 2025 16:49:00 -0500 Subject: atomic: Add bool and safer macros Signed-off-by: Andrew Opalach --- include/al/array_typed.h | 2 -- include/al/atomic.h | 16 ++++++++++------ include/al/macros.h | 3 +++ 3 files changed, 13 insertions(+), 8 deletions(-) (limited to 'include') 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 -- cgit v1.2.3-101-g0448