Skip to content

Commit 4e4cd77

Browse files
libc: Change atomic_fetch_cxx to macro
to align with atomic64_fetch_cxx function prototype Signed-off-by: Xiang Xiao <[email protected]>
1 parent 9af2f0e commit 4e4cd77

File tree

1 file changed

+8
-29
lines changed

1 file changed

+8
-29
lines changed

include/nuttx/atomic.h

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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,
234240
int64_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

Comments
 (0)