diff options
-rw-r--r-- | sys/include/sys/atomic.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/include/sys/atomic.h b/sys/include/sys/atomic.h index 1cc0e1c..17b1b68 100644 --- a/sys/include/sys/atomic.h +++ b/sys/include/sys/atomic.h @@ -54,6 +54,30 @@ atomic_sub_int_nv(volatile unsigned int *p, unsigned int v) return __sync_sub_and_fetch(p, v); } +static inline unsigned int +atomic_load_int_nv(volatile unsigned int *p, unsigned int v) +{ + return __atomic_load_n(p, v); +} + +static inline unsigned int +atomic_load_long_nv(volatile unsigned long *p, unsigned int v) +{ + return __atomic_load_n(p, v); +} + +static inline void +atomic_store_int_nv(volatile unsigned int *p, int nv, unsigned int v) +{ + __atomic_store_n(p, nv, v); +} + +static inline void +atomic_store_long_nv(volatile unsigned long *p, long nv, unsigned int v) +{ + __atomic_store_n(p, nv, v); +} + /* Atomic increment (and fetch) operations */ #define atoimc_inc_long(P) atomic_add_long_nv((P), 1) #define atomic_inc_int(P) atomic_add_int_nv((P), 1) @@ -62,4 +86,12 @@ atomic_sub_int_nv(volatile unsigned int *p, unsigned int v) #define atomic_dec_long(P) atomic_sub_long_nv((P), 1) #define atomic_dec_int(P) atomic_sub_int_nv((P), 1) +/* Atomic load operations */ +#define atomic_load_int(P) atomic_load_int_nv((P), __ATOMIC_SEQ_CST) +#define atomic_load_long(P) atomic_load_long_nv((P), __ATOMIC_SEQ_CST) + +/* Atomic store operations */ +#define atomic_store_int(P, NV) atomic_store_int_nv((P), (NV), __ATOMIC_SEQ_CST) +#define atomic_store_long(P, NV) atomic_store_long_nv((P), (NV), __ATOMIC_SEQ_CST) + #endif /* !_SYS_ATOMIC_H_ */ |