@@ -73,8 +73,6 @@ extern "C++"
7373# define __ATOMIC_ACQ_REL 4
7474# define __ATOMIC_SEQ_CST 5
7575
76- # define USE_ARCH_ATOMIC 1
77-
7876# define ATOMIC_FUNC (f, n ) nx_atomic_##f##_##n
7977
8078# define nx_atomic_compare_exchange_weak_4 (obj, expect, desired, success, failure ) \
@@ -104,6 +102,7 @@ typedef volatile int64_t atomic64_t;
104102#define atomic64_read (obj ) ATOMIC_FUNC(load, 8 )(obj, __ATOMIC_RELAXED)
105103#define atomic64_read_acquire (obj ) ATOMIC_FUNC(load, 8 )(obj, __ATOMIC_ACQUIRE)
106104
105+ #define atomic_fetch_add (obj, val ) ATOMIC_FUNC(fetch_add, 4 )(obj, val, __ATOMIC_ACQ_REL)
107106#define atomic_fetch_add_acquire (obj, val ) ATOMIC_FUNC(fetch_add, 4 )(obj, val, __ATOMIC_ACQUIRE)
108107#define atomic_fetch_add_release (obj, val ) ATOMIC_FUNC(fetch_add, 4 )(obj, val, __ATOMIC_RELEASE)
109108#define atomic_fetch_add_relaxed (obj, val ) ATOMIC_FUNC(fetch_add, 4 )(obj, val, __ATOMIC_RELAXED)
@@ -112,6 +111,7 @@ typedef volatile int64_t atomic64_t;
112111#define atomic64_fetch_add_release (obj, val ) ATOMIC_FUNC(fetch_add, 8 )(obj, val, __ATOMIC_RELEASE)
113112#define atomic64_fetch_add_relaxed (obj, val ) ATOMIC_FUNC(fetch_add, 8 )(obj, val, __ATOMIC_RELAXED)
114113
114+ #define atomic_fetch_sub (obj, val ) ATOMIC_FUNC(fetch_sub, 4 )(obj, val, __ATOMIC_ACQ_REL)
115115#define atomic_fetch_sub_acquire (obj, val ) ATOMIC_FUNC(fetch_sub, 4 )(obj, val, __ATOMIC_ACQUIRE)
116116#define atomic_fetch_sub_release (obj, val ) ATOMIC_FUNC(fetch_sub, 4 )(obj, val, __ATOMIC_RELEASE)
117117#define atomic_fetch_sub_relaxed (obj, val ) ATOMIC_FUNC(fetch_sub, 4 )(obj, val, __ATOMIC_RELAXED)
@@ -120,6 +120,7 @@ typedef volatile int64_t atomic64_t;
120120#define atomic64_fetch_sub_release (obj, val ) ATOMIC_FUNC(fetch_sub, 8 )(obj, val, __ATOMIC_RELEASE)
121121#define atomic64_fetch_sub_relaxed (obj, val ) ATOMIC_FUNC(fetch_sub, 8 )(obj, val, __ATOMIC_RELAXED)
122122
123+ #define atomic_fetch_and (obj, val ) ATOMIC_FUNC(fetch_and, 4 )(obj, val, __ATOMIC_ACQ_REL)
123124#define atomic_fetch_and_acquire (obj, val ) ATOMIC_FUNC(fetch_and, 4 )(obj, val, __ATOMIC_ACQUIRE)
124125#define atomic_fetch_and_release (obj, val ) ATOMIC_FUNC(fetch_and, 4 )(obj, val, __ATOMIC_RELEASE)
125126#define atomic_fetch_and_relaxed (obj, val ) ATOMIC_FUNC(fetch_and, 4 )(obj, val, __ATOMIC_RELAXED)
@@ -128,6 +129,7 @@ typedef volatile int64_t atomic64_t;
128129#define atomic64_fetch_and_release (obj, val ) ATOMIC_FUNC(fetch_and, 8 )(obj, val, __ATOMIC_RELEASE)
129130#define atomic64_fetch_and_relaxed (obj, val ) ATOMIC_FUNC(fetch_and, 8 )(obj, val, __ATOMIC_RELAXED)
130131
132+ #define atomic_fetch_or (obj, val ) ATOMIC_FUNC(fetch_or, 4 )(obj, val, __ATOMIC_ACQ_REL)
131133#define atomic_fetch_or_acquire (obj, val ) ATOMIC_FUNC(fetch_or, 4 )(obj, val, __ATOMIC_ACQUIRE)
132134#define atomic_fetch_or_release (obj, val ) ATOMIC_FUNC(fetch_or, 4 )(obj, val, __ATOMIC_RELEASE)
133135#define atomic_fetch_or_relaxed (obj, val ) ATOMIC_FUNC(fetch_or, 4 )(obj, val, __ATOMIC_RELAXED)
@@ -136,6 +138,7 @@ typedef volatile int64_t atomic64_t;
136138#define atomic64_fetch_or_release (obj, val ) ATOMIC_FUNC(fetch_or, 8 )(obj, val, __ATOMIC_RELEASE)
137139#define atomic64_fetch_or_relaxed (obj, val ) ATOMIC_FUNC(fetch_or, 8 )(obj, val, __ATOMIC_RELAXED)
138140
141+ #define atomic_fetch_xor (obj, val ) ATOMIC_FUNC(fetch_xor, 4 )(obj, val, __ATOMIC_ACQ_REL)
139142#define atomic_fetch_xor_acquire (obj, val ) ATOMIC_FUNC(fetch_xor, 4 )(obj, val, __ATOMIC_ACQUIRE)
140143#define atomic_fetch_xor_release (obj, val ) ATOMIC_FUNC(fetch_xor, 4 )(obj, val, __ATOMIC_RELEASE)
141144#define atomic_fetch_xor_relaxed (obj, val ) ATOMIC_FUNC(fetch_xor, 4 )(obj, val, __ATOMIC_RELAXED)
@@ -161,6 +164,7 @@ typedef volatile int64_t atomic64_t;
161164 ATOMIC_FUNC (compare_exchange_strong, 4 )(obj, (FAR int32_t *)expected, desired, __ATOMIC_RELEASE, __ATOMIC_RELAXED)
162165#define atomic_cmpxchg_relaxed (obj, expected, desired ) \
163166 ATOMIC_FUNC (compare_exchange_strong, 4 )(obj, (FAR int32_t *)expected, desired, __ATOMIC_RELAXED, __ATOMIC_RELAXED)
167+
164168#define atomic_try_cmpxchg (obj, expected, desired ) \
165169 ATOMIC_FUNC (compare_exchange_weak, 4 )(obj, (FAR int32_t *)expected, desired, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
166170#define atomic_try_cmpxchg_acquire (obj, expected, desired ) \
@@ -169,6 +173,7 @@ typedef volatile int64_t atomic64_t;
169173 ATOMIC_FUNC (compare_exchange_weak, 4 )(obj, (FAR int32_t *)expected, desired, __ATOMIC_RELEASE, __ATOMIC_RELAXED)
170174#define atomic_try_cmpxchg_relaxed (obj, expected, desired ) \
171175 ATOMIC_FUNC (compare_exchange_weak, 4 )(obj, (FAR int32_t *)expected, desired, __ATOMIC_RELAXED, __ATOMIC_RELAXED)
176+
172177#define atomic64_cmpxchg (obj, expected, desired ) \
173178 ATOMIC_FUNC (compare_exchange_strong, 8 )(obj, (FAR int64_t *)expected, desired, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
174179#define atomic64_cmpxchg_acquire (obj, expected, desired ) \
@@ -177,6 +182,7 @@ typedef volatile int64_t atomic64_t;
177182 ATOMIC_FUNC (compare_exchange_strong, 8 )(obj, (FAR int64_t *)expected, desired, __ATOMIC_RELEASE, __ATOMIC_RELAXED)
178183#define atomic64_cmpxchg_relaxed (obj, expected, desired ) \
179184 ATOMIC_FUNC (compare_exchange_strong, 8 )(obj, (FAR int64_t *)expected, desired, __ATOMIC_RELAXED, __ATOMIC_RELAXED)
185+
180186#define atomic64_try_cmpxchg (obj, expected, desired ) \
181187 ATOMIC_FUNC (compare_exchange_weak, 8 )(obj, (FAR int64_t *)expected, desired, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
182188#define atomic64_try_cmpxchg_acquire (obj, expected, desired ) \
@@ -234,33 +240,6 @@ int32_t nx_atomic_fetch_xor_4(FAR volatile void *ptr, int32_t value,
234240int64_t nx_atomic_fetch_xor_8 (FAR volatile void *ptr, int64_t value,
235241 int memorder);
236242
237- #ifdef USE_ARCH_ATOMIC
238- static inline int32_t atomic_fetch_add (FAR volatile void *obj, int32_t val)
239- {
240- return nx_atomic_fetch_add_4 (obj, val, __ATOMIC_ACQ_REL);
241- }
242-
243- static inline int32_t atomic_fetch_sub (FAR volatile void *obj, int32_t val)
244- {
245- return nx_atomic_fetch_sub_4 (obj, val, __ATOMIC_ACQ_REL);
246- }
247-
248- static inline int32_t atomic_fetch_and (FAR volatile void *obj, int32_t val)
249- {
250- return nx_atomic_fetch_and_4 (obj, val, __ATOMIC_ACQ_REL);
251- }
252-
253- static inline int32_t atomic_fetch_or (FAR volatile void *obj, int32_t val)
254- {
255- return nx_atomic_fetch_or_4 (obj, val, __ATOMIC_ACQ_REL);
256- }
257-
258- static inline int32_t atomic_fetch_xor (FAR volatile void *obj, int32_t val)
259- {
260- return nx_atomic_fetch_xor_4 (obj, val, __ATOMIC_ACQ_REL);
261- }
262- #endif
263-
264243#undef EXTERN
265244#if defined(__cplusplus)
266245}
0 commit comments