nuttx/atomic.h: use _Atomic define atomic_t.
Some checks are pending
Build Documentation / build-html (push) Waiting to run
MemBrowse Memory Report / changes-filter (push) Waiting to run
MemBrowse Memory Report / load-targets (push) Waiting to run
MemBrowse Memory Report / identical (push) Blocked by required conditions
MemBrowse Memory Report / analyze (push) Blocked by required conditions

1. use _atomic as wrapper because if _Atomic empty, may affects the compilation of other files:

2. for clang builtin function, it donot accept param with keyword "_Atomic"

Signed-off-by: zhangyu117 <zhangyu117@xiaomi.com>
This commit is contained in:
zhangyu117 2026-08-12 15:28:17 +08:00 committed by Xiang Xiao
parent d7771b6158
commit 95fe3e8680
3 changed files with 35 additions and 39 deletions

View file

@ -159,9 +159,8 @@
* Public Types
****************************************************************************/
typedef volatile int32_t atomic_t;
typedef volatile int64_t atomic64_t;
typedef __Atomic(int32_t) atomic_t;
typedef __Atomic(int64_t) atomic64_t;
/****************************************************************************
* Public Function Prototypes

View file

@ -79,6 +79,15 @@
# define CONFIG_HAVE_CXX14 1
#endif
/* Keyword about _Atomic */
#if defined(__cplusplus) || defined(__clang__) || \
!defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
# define __Atomic(t) t
#else
# define __Atomic(t) _Atomic(t)
#endif
/* Green Hills Software definitions *****************************************/
#if defined(__ghs__)
@ -1383,44 +1392,28 @@
/* Atomic functions. */
# ifdef CONFIG_LIBC_ATOMIC_TOOLCHAIN
# define atomic_store_4(obj, val, memorder) \
__c11_atomic_store((FAR volatile _Atomic int32_t*)obj, val, memorder)
# define atomic_store_8(obj, val, memorder) \
__c11_atomic_store((FAR volatile _Atomic int64_t*)obj, val, memorder)
# define atomic_load_4(obj, memorder) \
__c11_atomic_load((FAR volatile _Atomic int32_t*)obj, memorder)
# define atomic_load_8(obj, memorder) \
__c11_atomic_load((FAR volatile _Atomic int64_t*)obj, memorder)
# define atomic_fetch_add_4(obj, val, memorder) \
__c11_atomic_fetch_add((FAR volatile _Atomic int32_t*)obj, val, memorder)
# define atomic_fetch_add_8(obj, val, memorder) \
__c11_atomic_fetch_add((FAR volatile _Atomic int64_t*)obj, val, memorder)
# define atomic_fetch_sub_4(obj, val, memorder) \
__c11_atomic_fetch_sub((FAR volatile _Atomic int32_t*)obj, val, memorder)
# define atomic_fetch_sub_8(obj, val, memorder) \
__c11_atomic_fetch_sub((FAR volatile _Atomic int64_t*)obj, val, memorder)
# define atomic_fetch_and_4(obj, val, memorder) \
__c11_atomic_fetch_and((FAR volatile _Atomic int32_t*)obj, val, memorder)
# define atomic_fetch_and_8(obj, val, memorder) \
__c11_atomic_fetch_and((FAR volatile _Atomic int64_t*)obj, val, memorder)
# define atomic_fetch_or_4(obj, val, memorder) \
__c11_atomic_fetch_or((FAR volatile _Atomic int32_t*)obj, val, memorder)
# define atomic_fetch_or_8(obj, val, memorder) \
__c11_atomic_fetch_or((FAR volatile _Atomic int64_t*)obj, val, memorder)
# define atomic_fetch_xor_4(obj, val, memorder) \
__c11_atomic_fetch_xor((FAR volatile _Atomic int32_t*)obj, val, memorder)
# define atomic_fetch_xor_8(obj, val, memorder) \
__c11_atomic_fetch_xor((FAR volatile _Atomic int64_t*)obj, val, memorder)
# define atomic_exchange_4(obj, val, memorder) \
__c11_atomic_exchange((FAR volatile _Atomic int32_t*)obj, val, memorder)
# define atomic_exchange_8(obj, val, memorder) \
__c11_atomic_exchange((FAR volatile _Atomic int64_t*)obj, val, memorder)
# define atomic_store_4(obj, val, memorder) __c11_atomic_store(obj, val, memorder)
# define atomic_store_8(obj, val, memorder) __c11_atomic_store(obj, val, memorder)
# define atomic_load_4(obj, memorder) __c11_atomic_load(obj, memorder)
# define atomic_load_8(obj, memorder) __c11_atomic_load(obj, memorder)
# define atomic_fetch_add_4(obj, val, memorder) __c11_atomic_add(obj, val, memorder)
# define atomic_fetch_add_8(obj, val, memorder) __c11_atomic_add(obj, val, memorder)
# define atomic_fetch_sub_4(obj, val, memorder) __c11_atomic_sub(obj, val, memorder)
# define atomic_fetch_sub_8(obj, val, memorder) __c11_atomic_sub(obj, val, memorder)
# define atomic_fetch_and_4(obj, val, memorder) __c11_atomic_and(obj, val, memorder)
# define atomic_fetch_and_8(obj, val, memorder) __c11_atomic_and(obj, val, memorder)
# define atomic_fetch_or_4(obj, val, memorder) __c11_atomic_or(obj, val, memorder)
# define atomic_fetch_or_8(obj, val, memorder) __c11_atomic_or(obj, val, memorder)
# define atomic_fetch_xor_4(obj, val, memorder) __c11_atomic_xor(obj, val, memorder)
# define atomic_fetch_xor_8(obj, val, memorder) __c11_atomic_xor(obj, val, memorder)
# define atomic_exchange_4(obj, val, memorder) __c11_atomic_exchange(obj, val, memorder)
# define atomic_exchange_8(obj, val, memorder) __c11_atomic_exchange(obj, val, memorder)
# define atomic_compare_exchange_4(obj, expected, desired, weak, success, failure) \
((weak) ? __c11_atomic_compare_exchange_weak((FAR volatile _Atomic int32_t*)obj, expected, desired, success, failure) \
: __c11_atomic_compare_exchange_strong((FAR volatile _Atomic int32_t*)obj, expected, desired, success, failure))
((weak) ? __c11_atomic_compare_exchange_weak(obj, expected, desired, success, failure) \
: __c11_atomic_compare_exchange_strong(obj, expected, desired, success, failure))
# define atomic_compare_exchange_8(obj, expected, desired, weak, success, failure) \
((weak) ? __c11_atomic_compare_exchange_weak((FAR volatile _Atomic int64_t*)obj, expected, desired, success, failure) \
: __c11_atomic_compare_exchange_strong((FAR volatile _Atomic int64_t*)obj, expected, desired, success, failure))
((weak) ? __c11_atomic_compare_exchange_weak(obj, expected, desired, success, failure) \
: __c11_atomic_compare_exchange_strong(obj, expected, desired, success, failure))
# endif
/* Unknown compiler *********************************************************/

View file

@ -365,6 +365,10 @@ static const char *g_white_content_list[] =
"_Atomic",
/* Ref: include/nuttx/atomic.h */
"__Atomic",
/* Ref: https://en.cppreference.com/w/c/keyword/_Thread_local */
"_Thread_local",