summaryrefslogtreecommitdiff
path: root/source/kit/atomic.h
diff options
context:
space:
mode:
authorMitya Selivanov <0x7fffff@guattari.ru>2022-08-31 03:22:54 +0400
committerMitya Selivanov <0x7fffff@guattari.ru>2022-08-31 03:22:54 +0400
commitd98e34df99adc34da0846f20fa5f13b748943873 (patch)
tree6ea2ed45f3b6b21e4ac26c118bb82e6ce79ae711 /source/kit/atomic.h
parent4d6b5fc65f22ed704f05e04d41771fb4579ee5a8 (diff)
downloadkit-d98e34df99adc34da0846f20fa5f13b748943873.zip
test
Diffstat (limited to 'source/kit/atomic.h')
-rw-r--r--source/kit/atomic.h56
1 files changed, 30 insertions, 26 deletions
diff --git a/source/kit/atomic.h b/source/kit/atomic.h
index 23962a2..012d48d 100644
--- a/source/kit/atomic.h
+++ b/source/kit/atomic.h
@@ -81,31 +81,33 @@ uint64_t kit_atomic_fetch_add_explicit_64(uint64_t volatile *var,
uint64_t value,
int memory_order);
-# define atomic_store_explicit(var_, value_, memory_order_) \
- do { \
- assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
- sizeof *(var_) == 4 || sizeof *(var_) == 8); \
- if (sizeof *(var_) == 1) \
- kit_atomic_store_explicit_8((uint8_t volatile *) (var_), \
- (uint8_t) (value_), \
- (memory_order_)); \
- if (sizeof *(var_) == 2) \
- kit_atomic_store_explicit_16((uint16_t volatile *) (var_), \
- (uint16_t) (value_), \
- (memory_order_)); \
- if (sizeof *(var_) == 4) \
- kit_atomic_store_explicit_32((uint32_t volatile *) (var_), \
- (uint32_t) (value_), \
- (memory_order_)); \
- if (sizeof *(var_) == 8) \
- kit_atomic_store_explicit_64((uint64_t volatile *) (var_), \
- (uint64_t) (value_), \
- (memory_order_)); \
+# define atomic_store_explicit(var_, value_, memory_order_) \
+ do { \
+ static_assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
+ sizeof *(var_) == 4 || sizeof *(var_) == 8, \
+ "Wrong atomic variable type"); \
+ if (sizeof *(var_) == 1) \
+ kit_atomic_store_explicit_8((uint8_t volatile *) (var_), \
+ (uint8_t) (value_), \
+ (memory_order_)); \
+ if (sizeof *(var_) == 2) \
+ kit_atomic_store_explicit_16((uint16_t volatile *) (var_), \
+ (uint16_t) (value_), \
+ (memory_order_)); \
+ if (sizeof *(var_) == 4) \
+ kit_atomic_store_explicit_32((uint32_t volatile *) (var_), \
+ (uint32_t) (value_), \
+ (memory_order_)); \
+ if (sizeof *(var_) == 8) \
+ kit_atomic_store_explicit_64((uint64_t volatile *) (var_), \
+ (uint64_t) (value_), \
+ (memory_order_)); \
} while (0)
# define atomic_load_explicit(var_, memory_order_) \
- (assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
- sizeof *(var_) == 4 || sizeof *(var_) == 8), \
+ (static_assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
+ sizeof *(var_) == 4 || sizeof *(var_) == 8, \
+ "Wrong atomic variable type"), \
(sizeof *(var_) == 1 \
? kit_atomic_load_explicit_8((uint8_t volatile *) (var_), \
(memory_order_)) \
@@ -119,8 +121,9 @@ uint64_t kit_atomic_fetch_add_explicit_64(uint64_t volatile *var,
(uint64_t volatile *) (var_), (memory_order_))))
# define atomic_exchange_explicit(var_, value_, memory_order_) \
- (assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
- sizeof *(var_) == 4 || sizeof *(var_) == 8), \
+ (static_assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
+ sizeof *(var_) == 4 || sizeof *(var_) == 8, \
+ "Wrong atomic variable type"), \
(sizeof *(var_) == 1 ? kit_atomic_exchange_explicit_8( \
(uint8_t volatile *) (var_), \
(uint8_t) (value_), (memory_order_)) \
@@ -137,8 +140,9 @@ uint64_t kit_atomic_fetch_add_explicit_64(uint64_t volatile *var,
(memory_order_))))
# define atomic_fetch_add_explicit(var_, value_, memory_order_) \
- (assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
- sizeof *(var_) == 4 || sizeof *(var_) == 8), \
+ (static_assert(sizeof *(var_) == 1 || sizeof *(var_) == 2 || \
+ sizeof *(var_) == 4 || sizeof *(var_) == 8, \
+ "Wrong atomic variable type"), \
(sizeof *(var_) == 1 ? kit_atomic_fetch_add_explicit_8( \
(uint8_t volatile *) (var_), \
(uint8_t) (value_), (memory_order_)) \