This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit aee6fa1462e9e0480fc137d12e2e8f0655747b82
Author: zhangyu117 <[email protected]>
AuthorDate: Wed Aug 19 12:13:03 2026 +0800

    nuttx/atomic: use toolchain builtin atomic function
    
    The reason for using builtin atomic is that in C++, when include <atomic> 
in <nuttx/atomic.h> easily conflicts with third-party function libraries. We 
wanted to completely separate the implementation of <nuttx/atomic.h>.
    
    There are two points:
    1. use builtin function directly.
    2. Without the standard library implementation, need implement 
"atomic_fetch_xxx", leading conflicts with the standard library used by 
third-party programs, introducing redefinition issues and requiring name 
changes.
    
    Signed-off-by: zhangyu117 <[email protected]>
---
 include/nuttx/atomic.h                  | 321 +++++++++++++-------------------
 libs/libc/machine/arch_atomic64.c       |  20 +-
 libs/libc/machine/arch_atomic_irq.c     |  20 +-
 libs/libc/machine/tricore/arch_atomic.c |  30 +--
 4 files changed, 166 insertions(+), 225 deletions(-)

diff --git a/include/nuttx/atomic.h b/include/nuttx/atomic.h
index d2ea13d9e44..9f466ff7dd4 100644
--- a/include/nuttx/atomic.h
+++ b/include/nuttx/atomic.h
@@ -29,53 +29,9 @@
 
 #include <stdbool.h>
 
-#define NEED_ATOMIC_MACROS
-#if defined(__has_include)
-#  if __has_include(<atomic>) && defined(__cplusplus)
-#    undef NEED_ATOMIC_MACROS
-#  endif
-#endif
-
-#if defined(CONFIG_LIBC_ATOMIC_TOOLCHAIN)
-#  if __has_include(<atomic>) && defined(__cplusplus)
-extern "C++"
-{
-#    include <atomic>
-#    define ATOMIC_FUNC(f, n) atomic_##f##_explicit
-
-  using std::atomic_load_explicit;
-  using std::atomic_store_explicit;
-  using std::atomic_exchange_explicit;
-  using std::atomic_compare_exchange_strong_explicit;
-  using std::atomic_compare_exchange_weak_explicit;
-  using std::atomic_fetch_add_explicit;
-  using std::atomic_fetch_sub_explicit;
-  using std::atomic_fetch_and_explicit;
-  using std::atomic_fetch_or_explicit;
-  using std::atomic_fetch_xor_explicit;
-
-  typedef volatile int32_t atomic_t;
-  typedef volatile int64_t atomic64_t;
-}
-#  elif ((defined(__cplusplus) && __cplusplus >= 201103L) || \
-         (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L)) && \
-         !defined(__STDC_NO_ATOMICS__)
-#    if !defined(__clang__) && defined(__cplusplus)
-#      define _Atomic
-#    endif
-#    include <stdatomic.h>
-#    define ATOMIC_FUNC(f, n) atomic_##f##_explicit
-
-#    if defined(__cplusplus)
-#      define __auto_type auto
-typedef _Atomic int32_t atomic_t;
-typedef _Atomic int64_t atomic64_t;
-#    else
-typedef volatile _Atomic int32_t atomic_t;
-typedef volatile _Atomic int64_t atomic64_t;
-#    endif
-#  endif
-#endif
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
 
 #ifndef __ATOMIC_RELAXED
 #  define __ATOMIC_RELAXED 0
@@ -101,130 +57,111 @@ typedef volatile _Atomic int64_t atomic64_t;
 #  define __ATOMIC_SEQ_CST 5
 #endif
 
-#ifndef ATOMIC_FUNC
-
-#  define ATOMIC_FUNC(f, n) nx_atomic_##f##_##n
-
-#  define nx_atomic_compare_exchange_weak_4(obj, expect, desired, success, 
failure) \
-     nx_atomic_compare_exchange_4(obj, expect, desired, true, success, failure)
-#  define nx_atomic_compare_exchange_weak_8(obj, expect, desired, success, 
failure) \
-     nx_atomic_compare_exchange_8(obj, expect, desired, true, success, failure)
-#  define nx_atomic_compare_exchange_strong_4(obj, expect, desired, success, 
failure) \
-     nx_atomic_compare_exchange_4(obj, expect, desired, false, success, 
failure)
-#  define nx_atomic_compare_exchange_strong_8(obj, expect, desired, success, 
failure) \
-     nx_atomic_compare_exchange_8(obj, expect, desired, false, success, 
failure)
-
-typedef volatile int32_t atomic_t;
-typedef volatile int64_t atomic64_t;
-#endif
-
-/****************************************************************************
- * Pre-processor Definitions
- ****************************************************************************/
-
-#ifdef NEED_ATOMIC_MACROS
-
-#define atomic_set(obj, val)                  ATOMIC_FUNC(store, 4)(obj, val, 
__ATOMIC_RELAXED)
-#define atomic_set_release(obj, val)          ATOMIC_FUNC(store, 4)(obj, val, 
__ATOMIC_RELEASE)
-#define atomic64_set(obj, val)                ATOMIC_FUNC(store, 8)(obj, val, 
__ATOMIC_RELAXED)
-#define atomic64_set_release(obj, val)        ATOMIC_FUNC(store, 8)(obj, val, 
__ATOMIC_RELEASE)
-
-#define atomic_read(obj)                      ATOMIC_FUNC(load, 4)(obj, 
__ATOMIC_RELAXED)
-#define atomic_read_acquire(obj)              ATOMIC_FUNC(load, 4)(obj, 
__ATOMIC_ACQUIRE)
-#define atomic64_read(obj)                    ATOMIC_FUNC(load, 8)(obj, 
__ATOMIC_RELAXED)
-#define atomic64_read_acquire(obj)            ATOMIC_FUNC(load, 8)(obj, 
__ATOMIC_ACQUIRE)
-
-#define atomic_fetch_add(obj, val)            ATOMIC_FUNC(fetch_add, 4)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic_fetch_add_acquire(obj, val)    ATOMIC_FUNC(fetch_add, 4)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic_fetch_add_release(obj, val)    ATOMIC_FUNC(fetch_add, 4)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic_fetch_add_relaxed(obj, val)    ATOMIC_FUNC(fetch_add, 4)(obj, 
val, __ATOMIC_RELAXED)
-#define atomic64_fetch_add(obj, val)          ATOMIC_FUNC(fetch_add, 8)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic64_fetch_add_acquire(obj, val)  ATOMIC_FUNC(fetch_add, 8)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic64_fetch_add_release(obj, val)  ATOMIC_FUNC(fetch_add, 8)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic64_fetch_add_relaxed(obj, val)  ATOMIC_FUNC(fetch_add, 8)(obj, 
val, __ATOMIC_RELAXED)
-
-#define atomic_fetch_sub(obj, val)            ATOMIC_FUNC(fetch_sub, 4)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic_fetch_sub_acquire(obj, val)    ATOMIC_FUNC(fetch_sub, 4)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic_fetch_sub_release(obj, val)    ATOMIC_FUNC(fetch_sub, 4)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic_fetch_sub_relaxed(obj, val)    ATOMIC_FUNC(fetch_sub, 4)(obj, 
val, __ATOMIC_RELAXED)
-#define atomic64_fetch_sub(obj, val)          ATOMIC_FUNC(fetch_sub, 8)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic64_fetch_sub_acquire(obj, val)  ATOMIC_FUNC(fetch_sub, 8)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic64_fetch_sub_release(obj, val)  ATOMIC_FUNC(fetch_sub, 8)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic64_fetch_sub_relaxed(obj, val)  ATOMIC_FUNC(fetch_sub, 8)(obj, 
val, __ATOMIC_RELAXED)
-
-#define atomic_fetch_and(obj, val)            ATOMIC_FUNC(fetch_and, 4)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic_fetch_and_acquire(obj, val)    ATOMIC_FUNC(fetch_and, 4)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic_fetch_and_release(obj, val)    ATOMIC_FUNC(fetch_and, 4)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic_fetch_and_relaxed(obj, val)    ATOMIC_FUNC(fetch_and, 4)(obj, 
val, __ATOMIC_RELAXED)
-#define atomic64_fetch_and(obj, val)          ATOMIC_FUNC(fetch_and, 8)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic64_fetch_and_acquire(obj, val)  ATOMIC_FUNC(fetch_and, 8)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic64_fetch_and_release(obj, val)  ATOMIC_FUNC(fetch_and, 8)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic64_fetch_and_relaxed(obj, val)  ATOMIC_FUNC(fetch_and, 8)(obj, 
val, __ATOMIC_RELAXED)
-
-#define atomic_fetch_or(obj, val)             ATOMIC_FUNC(fetch_or, 4)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic_fetch_or_acquire(obj, val)     ATOMIC_FUNC(fetch_or, 4)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic_fetch_or_release(obj, val)     ATOMIC_FUNC(fetch_or, 4)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic_fetch_or_relaxed(obj, val)     ATOMIC_FUNC(fetch_or, 4)(obj, 
val, __ATOMIC_RELAXED)
-#define atomic64_fetch_or(obj, val)           ATOMIC_FUNC(fetch_or, 8)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic64_fetch_or_acquire(obj, val)   ATOMIC_FUNC(fetch_or, 8)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic64_fetch_or_release(obj, val)   ATOMIC_FUNC(fetch_or, 8)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic64_fetch_or_relaxed(obj, val)   ATOMIC_FUNC(fetch_or, 8)(obj, 
val, __ATOMIC_RELAXED)
-
-#define atomic_fetch_xor(obj, val)            ATOMIC_FUNC(fetch_xor, 4)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic_fetch_xor_acquire(obj, val)    ATOMIC_FUNC(fetch_xor, 4)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic_fetch_xor_release(obj, val)    ATOMIC_FUNC(fetch_xor, 4)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic_fetch_xor_relaxed(obj, val)    ATOMIC_FUNC(fetch_xor, 4)(obj, 
val, __ATOMIC_RELAXED)
-#define atomic64_fetch_xor(obj, val)          ATOMIC_FUNC(fetch_xor, 8)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic64_fetch_xor_acquire(obj, val)  ATOMIC_FUNC(fetch_xor, 8)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic64_fetch_xor_release(obj, val)  ATOMIC_FUNC(fetch_xor, 8)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic64_fetch_xor_relaxed(obj, val)  ATOMIC_FUNC(fetch_xor, 8)(obj, 
val, __ATOMIC_RELAXED)
-
-#define atomic_xchg(obj, val)                 ATOMIC_FUNC(exchange, 4)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic_xchg_acquire(obj, val)         ATOMIC_FUNC(exchange, 4)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic_xchg_release(obj, val)         ATOMIC_FUNC(exchange, 4)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic_xchg_relaxed(obj, val)         ATOMIC_FUNC(exchange, 4)(obj, 
val, __ATOMIC_RELAXED)
-#define atomic64_xchg(obj, val)               ATOMIC_FUNC(exchange, 8)(obj, 
val, __ATOMIC_ACQ_REL)
-#define atomic64_xchg_acquire(obj, val)       ATOMIC_FUNC(exchange, 8)(obj, 
val, __ATOMIC_ACQUIRE)
-#define atomic64_xchg_release(obj, val)       ATOMIC_FUNC(exchange, 8)(obj, 
val, __ATOMIC_RELEASE)
-#define atomic64_xchg_relaxed(obj, val)       ATOMIC_FUNC(exchange, 8)(obj, 
val, __ATOMIC_RELAXED)
+#define atomic_set(obj, val)            atomic_store_4(obj, val, 
__ATOMIC_RELAXED)
+#define atomic_set_release(obj, val)    atomic_store_4(obj, val, 
__ATOMIC_RELEASE)
+#define atomic64_set(obj, val)          atomic_store_8(obj, val, 
__ATOMIC_RELAXED)
+#define atomic64_set_release(obj, val)  atomic_store_8(obj, val, 
__ATOMIC_RELEASE)
+
+#define atomic_read(obj)                atomic_load_4(obj, __ATOMIC_RELAXED)
+#define atomic_read_acquire(obj)        atomic_load_4(obj, __ATOMIC_ACQUIRE)
+#define atomic64_read(obj)              atomic_load_8(obj, __ATOMIC_RELAXED)
+#define atomic64_read_acquire(obj)      atomic_load_8(obj, __ATOMIC_ACQUIRE)
+
+#define atomic_add(obj, val)            atomic_fetch_add_4(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic_add_acquire(obj, val)    atomic_fetch_add_4(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic_add_release(obj, val)    atomic_fetch_add_4(obj, val, 
__ATOMIC_RELEASE)
+#define atomic_add_relaxed(obj, val)    atomic_fetch_add_4(obj, val, 
__ATOMIC_RELAXED)
+#define atomic64_add(obj, val)          atomic_fetch_add_8(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic64_add_acquire(obj, val)  atomic_fetch_add_8(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic64_add_release(obj, val)  atomic_fetch_add_8(obj, val, 
__ATOMIC_RELEASE)
+#define atomic64_add_relaxed(obj, val)  atomic_fetch_add_8(obj, val, 
__ATOMIC_RELAXED)
+
+#define atomic_sub(obj, val)            atomic_fetch_sub_4(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic_sub_acquire(obj, val)    atomic_fetch_sub_4(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic_sub_release(obj, val)    atomic_fetch_sub_4(obj, val, 
__ATOMIC_RELEASE)
+#define atomic_sub_relaxed(obj, val)    atomic_fetch_sub_4(obj, val, 
__ATOMIC_RELAXED)
+#define atomic64_sub(obj, val)          atomic_fetch_sub_8(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic64_sub_acquire(obj, val)  atomic_fetch_sub_8(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic64_sub_release(obj, val)  atomic_fetch_sub_8(obj, val, 
__ATOMIC_RELEASE)
+#define atomic64_sub_relaxed(obj, val)  atomic_fetch_sub_8(obj, val, 
__ATOMIC_RELAXED)
+
+#define atomic_and(obj, val)            atomic_fetch_and_4(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic_and_acquire(obj, val)    atomic_fetch_and_4(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic_and_release(obj, val)    atomic_fetch_and_4(obj, val, 
__ATOMIC_RELEASE)
+#define atomic_and_relaxed(obj, val)    atomic_fetch_and_4(obj, val, 
__ATOMIC_RELAXED)
+#define atomic64_and(obj, val)          atomic_fetch_and_8(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic64_and_acquire(obj, val)  atomic_fetch_and_8(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic64_and_release(obj, val)  atomic_fetch_and_8(obj, val, 
__ATOMIC_RELEASE)
+#define atomic64_and_relaxed(obj, val)  atomic_fetch_and_8(obj, val, 
__ATOMIC_RELAXED)
+
+#define atomic_or(obj, val)             atomic_fetch_or_4(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic_or_acquire(obj, val)     atomic_fetch_or_4(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic_or_release(obj, val)     atomic_fetch_or_4(obj, val, 
__ATOMIC_RELEASE)
+#define atomic_or_relaxed(obj, val)     atomic_fetch_or_4(obj, val, 
__ATOMIC_RELAXED)
+#define atomic64_or(obj, val)           atomic_fetch_or_8(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic64_or_acquire(obj, val)   atomic_fetch_or_8(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic64_or_release(obj, val)   atomic_fetch_or_8(obj, val, 
__ATOMIC_RELEASE)
+#define atomic64_or_relaxed(obj, val)   atomic_fetch_or_8(obj, val, 
__ATOMIC_RELAXED)
+
+#define atomic_xor(obj, val)            atomic_fetch_xor_4(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic_xor_acquire(obj, val)    atomic_fetch_xor_4(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic_xor_release(obj, val)    atomic_fetch_xor_4(obj, val, 
__ATOMIC_RELEASE)
+#define atomic_xor_relaxed(obj, val)    atomic_fetch_xor_4(obj, val, 
__ATOMIC_RELAXED)
+#define atomic64_xor(obj, val)          atomic_fetch_xor_8(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic64_xor_acquire(obj, val)  atomic_fetch_xor_8(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic64_xor_release(obj, val)  atomic_fetch_xor_8(obj, val, 
__ATOMIC_RELEASE)
+#define atomic64_xor_relaxed(obj, val)  atomic_fetch_xor_8(obj, val, 
__ATOMIC_RELAXED)
+
+#define atomic_xchg(obj, val)           atomic_exchange_4(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic_xchg_acquire(obj, val)   atomic_exchange_4(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic_xchg_release(obj, val)   atomic_exchange_4(obj, val, 
__ATOMIC_RELEASE)
+#define atomic_xchg_relaxed(obj, val)   atomic_exchange_4(obj, val, 
__ATOMIC_RELAXED)
+#define atomic64_xchg(obj, val)         atomic_exchange_8(obj, val, 
__ATOMIC_ACQ_REL)
+#define atomic64_xchg_acquire(obj, val) atomic_exchange_8(obj, val, 
__ATOMIC_ACQUIRE)
+#define atomic64_xchg_release(obj, val) atomic_exchange_8(obj, val, 
__ATOMIC_RELEASE)
+#define atomic64_xchg_relaxed(obj, val) atomic_exchange_8(obj, val, 
__ATOMIC_RELAXED)
 
 #define atomic_cmpxchg(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 4)(obj, (FAR int32_t *)expected, 
desired, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, false, 
__ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
 #define atomic_cmpxchg_acquire(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 4)(obj, (FAR int32_t *)expected, 
desired, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, false, 
__ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
 #define atomic_cmpxchg_release(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 4)(obj, (FAR int32_t *)expected, 
desired, __ATOMIC_RELEASE, __ATOMIC_RELAXED)
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, false, 
__ATOMIC_RELEASE, __ATOMIC_RELAXED)
 #define atomic_cmpxchg_relaxed(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 4)(obj, (FAR int32_t *)expected, 
desired, __ATOMIC_RELAXED, __ATOMIC_RELAXED)
-
-#define atomic_try_cmpxchg(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_weak, 4)(obj, (FAR int32_t *)expected, desired, 
__ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
-#define atomic_try_cmpxchg_acquire(obj, expected, desired)   \
-  ATOMIC_FUNC(compare_exchange_weak, 4)(obj, (FAR int32_t *)expected, desired, 
__ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
-#define atomic_try_cmpxchg_release(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_weak, 4)(obj, (FAR int32_t *)expected, desired, 
__ATOMIC_RELEASE, __ATOMIC_RELAXED)
-#define atomic_try_cmpxchg_relaxed(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_weak, 4)(obj, (FAR int32_t *)expected, desired, 
__ATOMIC_RELAXED, __ATOMIC_RELAXED)
-
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, false, 
__ATOMIC_RELAXED, __ATOMIC_RELAXED)
 #define atomic64_cmpxchg(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 8)(obj, (FAR int64_t *)expected, 
desired, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, false, 
__ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
 #define atomic64_cmpxchg_acquire(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 8)(obj, (FAR int64_t *)expected, 
desired, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, false, 
__ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
 #define atomic64_cmpxchg_release(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 8)(obj, (FAR int64_t *)expected, 
desired, __ATOMIC_RELEASE, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, false, 
__ATOMIC_RELEASE, __ATOMIC_RELAXED)
 #define atomic64_cmpxchg_relaxed(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_strong, 8)(obj, (FAR int64_t *)expected, 
desired, __ATOMIC_RELAXED, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, false, 
__ATOMIC_RELAXED, __ATOMIC_RELAXED)
 
+#define atomic_try_cmpxchg(obj, expected, desired) \
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, true, 
__ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
+#define atomic_try_cmpxchg_acquire(obj, expected, desired) \
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, true, 
__ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
+#define atomic_try_cmpxchg_release(obj, expected, desired) \
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, true, 
__ATOMIC_RELEASE, __ATOMIC_RELAXED)
+#define atomic_try_cmpxchg_relaxed(obj, expected, desired) \
+  atomic_compare_exchange_4(obj, (FAR int32_t *)expected, desired, true, 
__ATOMIC_RELAXED, __ATOMIC_RELAXED)
 #define atomic64_try_cmpxchg(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_weak, 8)(obj, (FAR int64_t *)expected, desired, 
__ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, true, 
__ATOMIC_ACQ_REL, __ATOMIC_RELAXED)
 #define atomic64_try_cmpxchg_acquire(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_weak, 8)(obj, (FAR int64_t *)expected, desired, 
__ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, true, 
__ATOMIC_ACQUIRE, __ATOMIC_RELAXED)
 #define atomic64_try_cmpxchg_release(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_weak, 8)(obj, (FAR int64_t *)expected, desired, 
__ATOMIC_RELEASE, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, true, 
__ATOMIC_RELEASE, __ATOMIC_RELAXED)
 #define atomic64_try_cmpxchg_relaxed(obj, expected, desired) \
-  ATOMIC_FUNC(compare_exchange_weak, 8)(obj, (FAR int64_t *)expected, desired, 
__ATOMIC_RELAXED, __ATOMIC_RELAXED)
+  atomic_compare_exchange_8(obj, (FAR int64_t *)expected, desired, true, 
__ATOMIC_RELAXED, __ATOMIC_RELAXED)
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+typedef volatile int32_t atomic_t;
+typedef volatile int64_t atomic64_t;
 
-#endif
 
 /****************************************************************************
  * Public Function Prototypes
@@ -239,40 +176,44 @@ extern "C"
 #define EXTERN extern
 #endif
 
-void nx_atomic_store_4(FAR volatile void *ptr, int32_t value, int memorder);
-void nx_atomic_store_8(FAR volatile void *ptr, int64_t value, int memorder);
-int32_t nx_atomic_load_4(FAR const volatile void *ptr, int memorder);
-int64_t nx_atomic_load_8(FAR const volatile void *ptr, int memorder);
-int32_t nx_atomic_exchange_4(FAR volatile void *ptr, int32_t value,
-                             int memorder);
-int64_t nx_atomic_exchange_8(FAR volatile void *ptr, int64_t value,
-                             int memorder);
-bool nx_atomic_compare_exchange_4(FAR volatile void *ptr, FAR void *expect,
-                                  int32_t desired, bool weak,
-                                  int success, int failure);
-bool nx_atomic_compare_exchange_8(FAR volatile void *ptr, FAR void *expect,
-                                  int64_t desired, bool weak,
-                                  int success, int failure);
-int32_t nx_atomic_fetch_add_4(FAR volatile void *ptr, int32_t value,
-                              int memorder);
-int64_t nx_atomic_fetch_add_8(FAR volatile void *ptr, int64_t value,
-                              int memorder);
-int32_t nx_atomic_fetch_sub_4(FAR volatile void *ptr, int32_t value,
-                              int memorder);
-int64_t nx_atomic_fetch_sub_8(FAR volatile void *ptr, int64_t value,
-                              int memorder);
-int32_t nx_atomic_fetch_and_4(FAR volatile void *ptr, int32_t value,
-                              int memorder);
-int64_t nx_atomic_fetch_and_8(FAR volatile void *ptr, int64_t value,
-                              int memorder);
-int32_t nx_atomic_fetch_or_4(FAR volatile void *ptr, int32_t value,
-                             int memorder);
-int64_t nx_atomic_fetch_or_8(FAR volatile void *ptr, int64_t value,
-                             int memorder);
-int32_t nx_atomic_fetch_xor_4(FAR volatile void *ptr, int32_t value,
-                              int memorder);
-int64_t nx_atomic_fetch_xor_8(FAR volatile void *ptr, int64_t value,
-                              int memorder);
+#ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
+void atomic_store_4(FAR volatile void *ptr, int32_t value, int memorder);
+void atomic_store_8(FAR volatile void *ptr, int64_t value, int memorder);
+int32_t atomic_load_4(FAR const volatile void *ptr, int memorder);
+int64_t atomic_load_8(FAR const volatile void *ptr, int memorder);
+int32_t atomic_exchange_4(FAR volatile void *ptr, int32_t value,
+                          int memorder);
+int64_t atomic_exchange_8(FAR volatile void *ptr, int64_t value,
+                          int memorder);
+bool atomic_compare_exchange_4(FAR volatile void *ptr,
+                               FAR volatile void *expect,
+                               int32_t desired, bool weak,
+                               int success, int failure);
+bool atomic_compare_exchange_8(FAR volatile void *ptr,
+                               FAR volatile void *expect,
+                               int64_t desired, bool weak,
+                               int success, int failure);
+int32_t atomic_fetch_add_4(FAR volatile void *ptr, int32_t value,
+                           int memorder);
+int64_t atomic_fetch_add_8(FAR volatile void *ptr, int64_t value,
+                           int memorder);
+int32_t atomic_fetch_sub_4(FAR volatile void *ptr, int32_t value,
+                           int memorder);
+int64_t atomic_fetch_sub_8(FAR volatile void *ptr, int64_t value,
+                           int memorder);
+int32_t atomic_fetch_and_4(FAR volatile void *ptr, int32_t value,
+                           int memorder);
+int64_t atomic_fetch_and_8(FAR volatile void *ptr, int64_t value,
+                           int memorder);
+int32_t atomic_fetch_or_4(FAR volatile void *ptr, int32_t value,
+                          int memorder);
+int64_t atomic_fetch_or_8(FAR volatile void *ptr, int64_t value,
+                          int memorder);
+int32_t atomic_fetch_xor_4(FAR volatile void *ptr, int32_t value,
+                           int memorder);
+int64_t atomic_fetch_xor_8(FAR volatile void *ptr, int64_t value,
+                           int memorder);
+#endif
 
 #undef EXTERN
 #if defined(__cplusplus)
diff --git a/libs/libc/machine/arch_atomic64.c 
b/libs/libc/machine/arch_atomic64.c
index 5b222915fdb..41cdeafeaf0 100644
--- a/libs/libc/machine/arch_atomic64.c
+++ b/libs/libc/machine/arch_atomic64.c
@@ -60,7 +60,7 @@ static inline void atomic_unlock(irqstate_t flags)
 
 STORE(__atomic_store_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-STORE(nx_atomic_store_, 8, int64_t)
+STORE(atomic_store_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -69,7 +69,7 @@ STORE(nx_atomic_store_, 8, int64_t)
 
 LOAD(__atomic_load_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-LOAD(nx_atomic_load_, 8, int64_t)
+LOAD(atomic_load_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -78,7 +78,7 @@ LOAD(nx_atomic_load_, 8, int64_t)
 
 EXCHANGE(__atomic_exchange_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-EXCHANGE(nx_atomic_exchange_, 8, int64_t)
+EXCHANGE(atomic_exchange_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -87,7 +87,7 @@ EXCHANGE(nx_atomic_exchange_, 8, int64_t)
 
 CMP_EXCHANGE(__atomic_compare_exchange_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-CMP_EXCHANGE(nx_atomic_compare_exchange_, 8, int64_t)
+CMP_EXCHANGE(atomic_compare_exchange_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -96,7 +96,7 @@ CMP_EXCHANGE(nx_atomic_compare_exchange_, 8, int64_t)
 
 FLAG_TEST_AND_SET(__atomic_flags_test_and_set_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-FLAG_TEST_AND_SET(nx_atomic_flags_test_and_set_, 8, int64_t)
+FLAG_TEST_AND_SET(atomic_flags_test_and_set_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -105,7 +105,7 @@ FLAG_TEST_AND_SET(nx_atomic_flags_test_and_set_, 8, int64_t)
 
 FETCH_ADD(__atomic_fetch_add_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-FETCH_ADD(nx_atomic_fetch_add_, 8, int64_t)
+FETCH_ADD(atomic_fetch_add_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -114,7 +114,7 @@ FETCH_ADD(nx_atomic_fetch_add_, 8, int64_t)
 
 FETCH_SUB(__atomic_fetch_sub_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-FETCH_SUB(nx_atomic_fetch_sub_, 8, int64_t)
+FETCH_SUB(atomic_fetch_sub_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -123,7 +123,7 @@ FETCH_SUB(nx_atomic_fetch_sub_, 8, int64_t)
 
 FETCH_AND(__atomic_fetch_and_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-FETCH_AND(nx_atomic_fetch_and_, 8, int64_t)
+FETCH_AND(atomic_fetch_and_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -132,7 +132,7 @@ FETCH_AND(nx_atomic_fetch_and_, 8, int64_t)
 
 FETCH_OR(__atomic_fetch_or_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-FETCH_OR(nx_atomic_fetch_or_, 8, int64_t)
+FETCH_OR(atomic_fetch_or_, 8, int64_t)
 #endif
 
 /****************************************************************************
@@ -141,7 +141,7 @@ FETCH_OR(nx_atomic_fetch_or_, 8, int64_t)
 
 FETCH_XOR(__atomic_fetch_xor_, 8, uint64_t)
 #ifndef CONFIG_LIBC_ATOMIC_TOOLCHAIN
-FETCH_XOR(nx_atomic_fetch_xor_, 8, int64_t)
+FETCH_XOR(atomic_fetch_xor_, 8, int64_t)
 #endif
 
 /* Clang define the __sync builtins, add #ifndef to avoid
diff --git a/libs/libc/machine/arch_atomic_irq.c 
b/libs/libc/machine/arch_atomic_irq.c
index 4a50d0aa2fb..483d7b1fed3 100644
--- a/libs/libc/machine/arch_atomic_irq.c
+++ b/libs/libc/machine/arch_atomic_irq.c
@@ -68,7 +68,7 @@ STORE(__atomic_store_, 2, uint16_t)
  ****************************************************************************/
 
 STORE(__atomic_store_, 4, uint32_t)
-STORE(nx_atomic_store_, 4, int32_t)
+STORE(atomic_store_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_load_1
@@ -87,7 +87,7 @@ LOAD(__atomic_load_, 2, uint16_t)
  ****************************************************************************/
 
 LOAD(__atomic_load_, 4, uint32_t)
-LOAD(nx_atomic_load_, 4, int32_t)
+LOAD(atomic_load_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_exchange_1
@@ -106,7 +106,7 @@ EXCHANGE(__atomic_exchange_, 2, uint16_t)
  ****************************************************************************/
 
 EXCHANGE(__atomic_exchange_, 4, uint32_t)
-EXCHANGE(nx_atomic_exchange_, 4, int32_t)
+EXCHANGE(atomic_exchange_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_compare_exchange_1
@@ -125,7 +125,7 @@ CMP_EXCHANGE(__atomic_compare_exchange_, 2, uint16_t)
  ****************************************************************************/
 
 CMP_EXCHANGE(__atomic_compare_exchange_, 4, uint32_t)
-CMP_EXCHANGE(nx_atomic_compare_exchange_, 4, int32_t)
+CMP_EXCHANGE(atomic_compare_exchange_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_flag_test_and_set_1
@@ -144,7 +144,7 @@ FLAG_TEST_AND_SET(__atomic_flags_test_and_set_, 2, uint16_t)
  ****************************************************************************/
 
 FLAG_TEST_AND_SET(__atomic_flags_test_and_set_, 4, uint32_t)
-FLAG_TEST_AND_SET(nx_atomic_flags_test_and_set_, 4, int32_t)
+FLAG_TEST_AND_SET(atomic_flags_test_and_set_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_fetch_add_1
@@ -163,7 +163,7 @@ FETCH_ADD(__atomic_fetch_add_, 2, uint16_t)
  ****************************************************************************/
 
 FETCH_ADD(__atomic_fetch_add_, 4, uint32_t)
-FETCH_ADD(nx_atomic_fetch_add_, 4, int32_t)
+FETCH_ADD(atomic_fetch_add_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_fetch_sub_1
@@ -182,7 +182,7 @@ FETCH_SUB(__atomic_fetch_sub_, 2, uint16_t)
  ****************************************************************************/
 
 FETCH_SUB(__atomic_fetch_sub_, 4, uint32_t)
-FETCH_SUB(nx_atomic_fetch_sub_, 4, int32_t)
+FETCH_SUB(atomic_fetch_sub_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_fetch_and_1
@@ -201,7 +201,7 @@ FETCH_AND(__atomic_fetch_and_, 2, uint16_t)
  ****************************************************************************/
 
 FETCH_AND(__atomic_fetch_and_, 4, uint32_t)
-FETCH_AND(nx_atomic_fetch_and_, 4, int32_t)
+FETCH_AND(atomic_fetch_and_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_fetch_or_1
@@ -220,7 +220,7 @@ FETCH_OR(__atomic_fetch_or_, 2, uint16_t)
  ****************************************************************************/
 
 FETCH_OR(__atomic_fetch_or_, 4, uint32_t)
-FETCH_OR(nx_atomic_fetch_or_, 4, int32_t)
+FETCH_OR(atomic_fetch_or_, 4, int32_t)
 
 /****************************************************************************
  * Name: __atomic_fetch_xor_1
@@ -239,7 +239,7 @@ FETCH_XOR(__atomic_fetch_xor_, 2, uint16_t)
  ****************************************************************************/
 
 FETCH_XOR(__atomic_fetch_xor_, 4, uint32_t)
-FETCH_XOR(nx_atomic_fetch_xor_, 4, int32_t)
+FETCH_XOR(atomic_fetch_xor_, 4, int32_t)
 
 /* Clang define the __sync builtins, add #ifndef to avoid
  * redefined/redeclared problem.
diff --git a/libs/libc/machine/tricore/arch_atomic.c 
b/libs/libc/machine/tricore/arch_atomic.c
index 7f10fa0f079..970f90e6e10 100644
--- a/libs/libc/machine/tricore/arch_atomic.c
+++ b/libs/libc/machine/tricore/arch_atomic.c
@@ -89,7 +89,7 @@
                                                                         \
     do                                                                  \
       {                                                                 \
-        old_val = nx_atomic_load_4(ptr, memorder);                      \
+        old_val = atomic_load_4(ptr, memorder);                         \
       }                                                                 \
     while (__cmpAndSwap(ptr, old_val + value, old_val) != old_val);     \
                                                                         \
@@ -104,7 +104,7 @@
                                                                         \
     do                                                                  \
       {                                                                 \
-        old_val = nx_atomic_load_4(ptr, memorder);                      \
+        old_val = atomic_load_4(ptr, memorder);                         \
       }                                                                 \
     while (__cmpAndSwap(ptr, old_val - value, old_val) != old_val);     \
                                                                         \
@@ -119,7 +119,7 @@
                                                                         \
     do                                                                  \
       {                                                                 \
-        old_val = nx_atomic_load_4(ptr, memorder);                      \
+        old_val = atomic_load_4(ptr, memorder);                         \
       }                                                                 \
     while (__cmpAndSwap(ptr, old_val & value, old_val) != old_val);     \
                                                                         \
@@ -134,7 +134,7 @@
                                                                         \
     do                                                                  \
       {                                                                 \
-        old_val = nx_atomic_load_4(ptr, memorder);                      \
+        old_val = atomic_load_4(ptr, memorder);                         \
       }                                                                 \
     while (__cmpAndSwap(ptr, old_val | value, old_val) != old_val);     \
                                                                         \
@@ -149,7 +149,7 @@
                                                                         \
     do                                                                  \
       {                                                                 \
-        old_val = nx_atomic_load_4(ptr, memorder);                      \
+        old_val = atomic_load_4(ptr, memorder);                         \
       }                                                                 \
     while (__cmpAndSwap(ptr, old_val ^ value, old_val) != old_val);     \
                                                                         \
@@ -165,67 +165,67 @@
  ****************************************************************************/
 
 ARCH_ATOMIC_STORE_4(__atomic_store_4)
-ARCH_ATOMIC_STORE_4(nx_atomic_store_4)
+ARCH_ATOMIC_STORE_4(atomic_store_4)
 
 /****************************************************************************
  * Name: atomic_load_4
  ****************************************************************************/
 
 ARCH_ATOMIC_LOAD_4(__atomic_load_4)
-ARCH_ATOMIC_LOAD_4(nx_atomic_load_4)
+ARCH_ATOMIC_LOAD_4(atomic_load_4)
 
 /****************************************************************************
  * Name: atomic_exchange_4
  ****************************************************************************/
 
 ARCH_ATOMIC_EXCHANGE_4(__atomic_exchange_4)
-ARCH_ATOMIC_EXCHANGE_4(nx_atomic_exchange_4)
+ARCH_ATOMIC_EXCHANGE_4(atomic_exchange_4)
 
 /****************************************************************************
  * Name: atomic_compare_exchange_4
  ****************************************************************************/
 
 ARCH_ATOMIC_COMPARE_EXCHANGE_4(__atomic_compare_exchange_4)
-ARCH_ATOMIC_COMPARE_EXCHANGE_4(nx_atomic_compare_exchange_4)
+ARCH_ATOMIC_COMPARE_EXCHANGE_4(atomic_compare_exchange_4)
 
 /****************************************************************************
  * Name: atomic_flag_test_and_set_4
  ****************************************************************************/
 
 ARCH_ATOMIC_FLAGS_TEST_AND_SET_4(__atomic_flags_test_and_set_4)
-ARCH_ATOMIC_FLAGS_TEST_AND_SET_4(nx_atomic_flags_test_and_set_4)
+ARCH_ATOMIC_FLAGS_TEST_AND_SET_4(atomic_flags_test_and_set_4)
 
 /****************************************************************************
  * Name: atomic_fetch_add_4
  ****************************************************************************/
 
 ARCH_ATOMIC_FETCH_ADD_4(__atomic_fetch_add_4)
-ARCH_ATOMIC_FETCH_ADD_4(nx_atomic_fetch_add_4)
+ARCH_ATOMIC_FETCH_ADD_4(atomic_fetch_add_4)
 
 /****************************************************************************
  * Name: atomic_fetch_sub_4
  ****************************************************************************/
 
 ARCH_ATOMIC_FETCH_SUB_4(__atomic_fetch_sub_4)
-ARCH_ATOMIC_FETCH_SUB_4(nx_atomic_fetch_sub_4)
+ARCH_ATOMIC_FETCH_SUB_4(atomic_fetch_sub_4)
 
 /****************************************************************************
  * Name: atomic_fetch_and_4
  ****************************************************************************/
 
 ARCH_ATOMIC_FETCH_AND_4(__atomic_fetch_and_4)
-ARCH_ATOMIC_FETCH_AND_4(nx_atomic_fetch_and_4)
+ARCH_ATOMIC_FETCH_AND_4(atomic_fetch_and_4)
 
 /****************************************************************************
  * Name: atomic_fetch_or_4
  ****************************************************************************/
 
 ARCH_ATOMIC_FETCH_OR_4(__atomic_fetch_or_4)
-ARCH_ATOMIC_FETCH_OR_4(nx_atomic_fetch_or_4)
+ARCH_ATOMIC_FETCH_OR_4(atomic_fetch_or_4)
 
 /****************************************************************************
  * Name: atomic_fetch_xor_4
  ****************************************************************************/
 
 ARCH_ATOMIC_FETCH_XOR_4(__atomic_fetch_xor_4)
-ARCH_ATOMIC_FETCH_XOR_4(nx_atomic_fetch_xor_4)
+ARCH_ATOMIC_FETCH_XOR_4(atomic_fetch_xor_4)

Reply via email to