[cfe-commits] [libcxx] r116742 - in /libcxx/trunk: include/atomic src/atomic.cpp www/atomic_design_a.html

Howard Hinnant hhinnant at apple.com
Mon Oct 18 13:39:07 PDT 2010


Author: hhinnant
Date: Mon Oct 18 15:39:07 2010
New Revision: 116742

URL: http://llvm.org/viewvc/llvm-project?rev=116742&view=rev
Log:
Changing <atomic> to follow Design A

Removed:
    libcxx/trunk/src/atomic.cpp
Modified:
    libcxx/trunk/include/atomic
    libcxx/trunk/www/atomic_design_a.html

Modified: libcxx/trunk/include/atomic
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/atomic?rev=116742&r1=116741&r2=116742&view=diff
==============================================================================
--- libcxx/trunk/include/atomic (original)
+++ libcxx/trunk/include/atomic Mon Oct 18 15:39:07 2010
@@ -2411,8 +2411,6 @@
 */
 
 #include <__config>
-#include <__mutex_base>
-#include <cstring>
 
 #pragma GCC system_header
 
@@ -2432,9953 +2430,9 @@
     return __y;
 }
 
-_LIBCPP_VISIBLE
-mutex& __not_atomic_mut();
-
-// load
-
-template <class _Tp>
-_Tp
-__load_seq_cst(_Tp const volatile* __obj)
-{
-    unique_lock<mutex> _(__not_atomic_mut());
-    return *__obj;
-}
-
-// load bool
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_load_seq_cst(bool const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_b)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_load_acquire(bool const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_b)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_load_consume(bool const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_b)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_load_relaxed(bool const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_b)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load char
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_load_seq_cst(char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_c)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_load_acquire(char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_c)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_load_consume(char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_c)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_load_relaxed(char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_c)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load signed char
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_load_seq_cst(signed char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_a)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_load_acquire(signed char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_a)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_load_consume(signed char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_a)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_load_relaxed(signed char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_a)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load unsigned char
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_load_seq_cst(unsigned char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_h)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_load_acquire(unsigned char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_h)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_load_consume(unsigned char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_h)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_load_relaxed(unsigned char const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_h)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// load char16_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_load_seq_cst(char16_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_Ds)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_load_acquire(char16_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_Ds)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_load_consume(char16_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_Ds)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_load_relaxed(char16_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_Ds)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load char32_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_load_seq_cst(char32_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_Di)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_load_acquire(char32_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_Di)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_load_consume(char32_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_Di)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_load_relaxed(char32_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_Di)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// load wchar_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_load_seq_cst(wchar_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_w)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_load_acquire(wchar_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_w)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_load_consume(wchar_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_w)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_load_relaxed(wchar_t const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_w)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load short
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_load_seq_cst(short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_s)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_load_acquire(short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_s)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_load_consume(short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_s)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_load_relaxed(short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_s)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load unsigned short
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_load_seq_cst(unsigned short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_t)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_load_acquire(unsigned short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_t)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_load_consume(unsigned short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_t)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_load_relaxed(unsigned short const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_t)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load int
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_load_seq_cst(int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_i)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_load_acquire(int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_i)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_load_consume(int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_i)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_load_relaxed(int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_i)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load unsigned int
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_load_seq_cst(unsigned int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_j)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_load_acquire(unsigned int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_j)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_load_consume(unsigned int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_j)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_load_relaxed(unsigned int const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_j)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load long
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_load_seq_cst(long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_l)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_load_acquire(long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_l)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_load_consume(long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_l)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_load_relaxed(long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_l)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load unsigned long
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_load_seq_cst(unsigned long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_m)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_load_acquire(unsigned long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_m)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_load_consume(unsigned long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_m)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_load_relaxed(unsigned long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_m)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_load_seq_cst(long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_x)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_load_acquire(long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_x)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_load_consume(long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_x)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_load_relaxed(long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_x)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load unsigned long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_load_seq_cst(unsigned long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_y)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_load_acquire(unsigned long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_y)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_load_consume(unsigned long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_y)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_load_relaxed(unsigned long long const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_y)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// load void*
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_load_seq_cst(void* const volatile* __obj)
-{
-#if __has_feature(__atomic_load_seq_cst_Py)
-    return __atomic_load_seq_cst(__obj);
-#else
-    return __load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_load_acquire(void* const volatile* __obj)
-{
-#if __has_feature(__atomic_load_acquire_Py)
-    return __atomic_load_acquire(__obj);
-#else
-    return __choose_load_seq_cst(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_load_consume(void* const volatile* __obj)
-{
-#if __has_feature(__atomic_load_consume_Py)
-    return __atomic_load_consume(__obj);
-#else
-    return __choose_load_acquire(__obj);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_load_relaxed(void* const volatile* __obj)
-{
-#if __has_feature(__atomic_load_relaxed_Py)
-    return __atomic_load_relaxed(__obj);
-#else
-    return __choose_load_consume(__obj);
-#endif
-}
-
-// store
-
-template <class _Tp>
-void
-__store_seq_cst(_Tp volatile* __obj, _Tp __desr)
-{
-    unique_lock<mutex> _(__not_atomic_mut());
-    *__obj = __desr;
-}
-
-// store bool
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_b)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_store_release_b)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_store_relaxed_b)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store char
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_c)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_store_release_c)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_store_relaxed_c)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store signed char
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_a)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_store_release_a)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_store_relaxed_a)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store unsigned char
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_h)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_store_release_h)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_store_relaxed_h)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// store char16_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_Ds)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_store_release_Ds)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_store_relaxed_Ds)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store char32_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_Di)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_store_release_Di)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_store_relaxed_Di)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// store wchar_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_w)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_store_release_w)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_store_relaxed_w)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store short
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_s)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_store_release_s)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_store_relaxed_s)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store unsigned short
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_t)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_store_release_t)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_store_relaxed_t)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store int
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_i)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_store_release_i)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_store_relaxed_i)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store unsigned int
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_j)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_store_release_j)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_store_relaxed_j)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store long
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_l)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_store_release_l)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_store_relaxed_l)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store unsigned long
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_m)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_store_release_m)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_store_relaxed_m)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_x)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_store_release_x)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_store_relaxed_x)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store unsigned long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_y)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_store_release_y)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_store_relaxed_y)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// store void*
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_seq_cst(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_store_seq_cst_Py)
-    __atomic_store_seq_cst(__obj, __desr);
-#else
-    __store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_release(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_store_release_Py)
-    __atomic_store_release(__obj, __desr);
-#else
-    __choose_store_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void
-__choose_store_relaxed(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_store_relaxed_Py)
-    __atomic_store_relaxed(__obj, __desr);
-#else
-    __choose_store_release(__obj, __desr);
-#endif
-}
-
-// exchange
-
-template <class _Tp>
-_Tp
-__exchange_seq_cst(_Tp volatile* __obj, _Tp __desr)
-{
-    unique_lock<mutex> _(__not_atomic_mut());
-    _Tp __r = *__obj;
-    *__obj = __desr;
-    return __r;
-}
-
-// exchange bool
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_exchange_seq_cst(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_b)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_exchange_acq_rel(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_b)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_exchange_release(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_exchange_release_b)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_exchange_acquire(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_b)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_exchange_consume(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_exchange_consume_b)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_exchange_relaxed(bool volatile* __obj, bool __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_b)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange char
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_exchange_seq_cst(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_c)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_exchange_acq_rel(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_c)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_exchange_release(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_exchange_release_c)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_exchange_acquire(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_c)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_exchange_consume(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_exchange_consume_c)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char
-__choose_exchange_relaxed(char volatile* __obj, char __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_c)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange signed char
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_exchange_seq_cst(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_a)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_exchange_acq_rel(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_a)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_exchange_release(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_exchange_release_a)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_exchange_acquire(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_a)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_exchange_consume(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_exchange_consume_a)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-signed char
-__choose_exchange_relaxed(signed char volatile* __obj, signed char __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_a)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange unsigned char
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_exchange_seq_cst(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_h)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_exchange_acq_rel(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_h)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_exchange_release(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_exchange_release_h)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_exchange_acquire(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_h)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_exchange_consume(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_exchange_consume_h)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned char
-__choose_exchange_relaxed(unsigned char volatile* __obj, unsigned char __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_h)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// exchange char16_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_exchange_seq_cst(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_Ds)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_exchange_acq_rel(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_Ds)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_exchange_release(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_exchange_release_Ds)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_exchange_acquire(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_Ds)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_exchange_consume(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_exchange_consume_Ds)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char16_t
-__choose_exchange_relaxed(char16_t volatile* __obj, char16_t __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_Ds)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange char32_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_exchange_seq_cst(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_Di)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_exchange_acq_rel(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_Di)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_exchange_release(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_exchange_release_Di)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_exchange_acquire(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_Di)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_exchange_consume(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_exchange_consume_Di)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-char32_t
-__choose_exchange_relaxed(char32_t volatile* __obj, char32_t __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_Di)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// exchange wchar_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_exchange_seq_cst(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_w)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_exchange_acq_rel(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_w)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_exchange_release(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_exchange_release_w)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_exchange_acquire(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_w)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_exchange_consume(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_exchange_consume_w)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-wchar_t
-__choose_exchange_relaxed(wchar_t volatile* __obj, wchar_t __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_w)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange short
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_exchange_seq_cst(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_s)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_exchange_acq_rel(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_s)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_exchange_release(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_exchange_release_s)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_exchange_acquire(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_s)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_exchange_consume(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_exchange_consume_s)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-short
-__choose_exchange_relaxed(short volatile* __obj, short __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_s)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange unsigned short
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_exchange_seq_cst(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_t)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_exchange_acq_rel(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_t)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_exchange_release(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_exchange_release_t)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_exchange_acquire(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_t)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_exchange_consume(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_exchange_consume_t)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned short
-__choose_exchange_relaxed(unsigned short volatile* __obj, unsigned short __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_t)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange int
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_exchange_seq_cst(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_i)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_exchange_acq_rel(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_i)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_exchange_release(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_exchange_release_i)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_exchange_acquire(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_i)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_exchange_consume(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_exchange_consume_i)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-int
-__choose_exchange_relaxed(int volatile* __obj, int __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_i)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange unsigned int
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_exchange_seq_cst(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_j)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_exchange_acq_rel(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_j)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_exchange_release(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_exchange_release_j)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_exchange_acquire(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_j)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_exchange_consume(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_exchange_consume_j)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned int
-__choose_exchange_relaxed(unsigned int volatile* __obj, unsigned int __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_j)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange long
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_exchange_seq_cst(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_l)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_exchange_acq_rel(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_l)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_exchange_release(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_exchange_release_l)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_exchange_acquire(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_l)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_exchange_consume(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_exchange_consume_l)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long
-__choose_exchange_relaxed(long volatile* __obj, long __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_l)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange unsigned long
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_exchange_seq_cst(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_m)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_exchange_acq_rel(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_m)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_exchange_release(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_exchange_release_m)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_exchange_acquire(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_m)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_exchange_consume(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_exchange_consume_m)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long
-__choose_exchange_relaxed(unsigned long volatile* __obj, unsigned long __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_m)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_exchange_seq_cst(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_x)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_exchange_acq_rel(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_x)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_exchange_release(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_exchange_release_x)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_exchange_acquire(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_x)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_exchange_consume(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_exchange_consume_x)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-long long
-__choose_exchange_relaxed(long long volatile* __obj, long long __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_x)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange unsigned long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_exchange_seq_cst(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_y)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_exchange_acq_rel(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_y)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_exchange_release(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_exchange_release_y)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_exchange_acquire(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_y)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_exchange_consume(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_exchange_consume_y)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-unsigned long long
-__choose_exchange_relaxed(unsigned long long volatile* __obj, unsigned long long __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_y)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// exchange void*
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_exchange_seq_cst(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_exchange_seq_cst_Py)
-    return __atomic_exchange_seq_cst(__obj, __desr);
-#else
-    return __exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_exchange_acq_rel(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_exchange_acq_rel_Py)
-    return __atomic_exchange_acq_rel(__obj, __desr);
-#else
-    return __choose_exchange_seq_cst(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_exchange_release(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_exchange_release_Py)
-    return __atomic_exchange_release(__obj, __desr);
-#else
-    return __choose_exchange_acq_rel(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_exchange_acquire(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_exchange_acquire_Py)
-    return __atomic_exchange_acquire(__obj, __desr);
-#else
-    return __choose_exchange_release(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_exchange_consume(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_exchange_consume_Py)
-    return __atomic_exchange_consume(__obj, __desr);
-#else
-    return __choose_exchange_acquire(__obj, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void*
-__choose_exchange_relaxed(void* volatile* __obj, void* __desr)
-{
-#if __has_feature(__atomic_exchange_relaxed_Py)
-    return __atomic_exchange_relaxed(__obj, __desr);
-#else
-    return __choose_exchange_consume(__obj, __desr);
-#endif
-}
-
-// compare_exchange_strong
-
-template <class _Tp>
-bool
-__compare_exchange_strong_seq_cst_seq_cst(_Tp volatile* __obj, _Tp* __exp,
-                                                                     _Tp __desr)
-{
-    unique_lock<mutex> _(__not_atomic_mut());
-    if (_STD::memcmp(const_cast<_Tp*>(__obj), __exp, sizeof(_Tp)) == 0)
-    {
-        _STD::memcpy(const_cast<_Tp*>(__obj), &__desr, sizeof(_Tp));
-        return true;
-    }
-    _STD::memcpy(__exp, const_cast<_Tp*>(__obj), sizeof(_Tp));
-    return false;
-}
-
-// compare_exchange_strong bool
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_b)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_b)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_b)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_b)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_b)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_b)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_b)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_b)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_b)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_b)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_b)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_b)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_b)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_b)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_b)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(bool volatile* __obj,
-                                                 bool* __exp,
-                                                 bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_b)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong char
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_c)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_c)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_c)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_c)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_c)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_c)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_c)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_c)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_c)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_c)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_c)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_c)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_c)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_c)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_c)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(char volatile* __obj,
-                                                 char* __exp,
-                                                 char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_c)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong signed char
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_a)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_a)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_a)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_a)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_a)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_a)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_a)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_a)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_a)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_a)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_a)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_a)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_a)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_a)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_a)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(signed char volatile* __obj,
-                                                 signed char* __exp,
-                                                 signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_a)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong unsigned char
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_h)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_h)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_h)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_h)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_h)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_h)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_h)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_h)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_h)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_h)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_h)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_h)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_h)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_h)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_h)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(unsigned char volatile* __obj,
-                                                 unsigned char* __exp,
-                                                 unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_h)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// compare_exchange_strong char16_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_Ds)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_Ds)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_Ds)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_Ds)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_Ds)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_Ds)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_Ds)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_Ds)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_Ds)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_Ds)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_Ds)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_Ds)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_Ds)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_Ds)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_Ds)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(char16_t volatile* __obj,
-                                                 char16_t* __exp,
-                                                 char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_Ds)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong char32_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_Di)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_Di)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_Di)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_Di)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_Di)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_Di)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_Di)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_Di)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_Di)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_Di)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_Di)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_Di)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_Di)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_Di)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_Di)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(char32_t volatile* __obj,
-                                                 char32_t* __exp,
-                                                 char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_Di)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// compare_exchange_strong wchar_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_w)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_w)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_w)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_w)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_w)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_w)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_w)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_w)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_w)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_w)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_w)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_w)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_w)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_w)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_w)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(wchar_t volatile* __obj,
-                                                 wchar_t* __exp,
-                                                 wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_w)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong short
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_s)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_s)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_s)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_s)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_s)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_s)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_s)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_s)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_s)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_s)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_s)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_s)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_s)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_s)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_s)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(short volatile* __obj,
-                                                 short* __exp,
-                                                 short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_s)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong unsigned short
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_t)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_t)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_t)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_t)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_t)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_t)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_t)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_t)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_t)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_t)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_t)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_t)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_t)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_t)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_t)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(unsigned short volatile* __obj,
-                                                 unsigned short* __exp,
-                                                 unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_t)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong int
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_i)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_i)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_i)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_i)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_i)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_i)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_i)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_i)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_i)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_i)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_i)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_i)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_i)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_i)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_i)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(int volatile* __obj,
-                                                 int* __exp,
-                                                 int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_i)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong unsigned int
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_j)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_j)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_j)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_j)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_j)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_j)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_j)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_j)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_j)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_j)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_j)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_j)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_j)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_j)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_j)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(unsigned int volatile* __obj,
-                                                 unsigned int* __exp,
-                                                 unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_j)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_l)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_l)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_l)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_l)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_l)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_l)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_l)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_l)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_l)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_l)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_l)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_l)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_l)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_l)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_l)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(long volatile* __obj,
-                                                 long* __exp,
-                                                 long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_l)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong unsigned long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_m)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_m)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_m)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_m)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_m)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_m)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_m)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_m)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_m)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_m)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_m)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_m)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_m)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_m)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_m)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(unsigned long volatile* __obj,
-                                                 unsigned long* __exp,
-                                                 unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_m)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_x)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_x)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_x)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_x)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_x)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_x)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_x)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_x)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_x)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_x)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_x)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_x)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_x)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_x)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_x)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(long long volatile* __obj,
-                                                 long long* __exp,
-                                                 long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_x)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong unsigned long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_y)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_y)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_y)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_y)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_y)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_y)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_y)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_y)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_y)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_y)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_y)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_y)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_y)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_y)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_y)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(unsigned long long volatile* __obj,
-                                                 unsigned long long* __exp,
-                                                 unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_y)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_strong void*
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_seq_cst_Py)
-    return __atomic_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __compare_exchange_strong_seq_cst_seq_cst(__obj, __exp, __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_acquire(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_acquire_Py)
-    return __atomic_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_consume(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_consume_Py)
-    return __atomic_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_seq_cst_relaxed(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_seq_cst_relaxed_Py)
-    return __atomic_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_acquire(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_acquire_Py)
-    return __atomic_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_consume(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_consume_Py)
-    return __atomic_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acq_rel_relaxed(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acq_rel_relaxed_Py)
-    return __atomic_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_acquire(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_acquire_Py)
-    return __atomic_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_consume(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_consume_Py)
-    return __atomic_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_release_relaxed(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_release_relaxed_Py)
-    return __atomic_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_acquire(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_acquire_Py)
-    return __atomic_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_consume(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_consume_Py)
-    return __atomic_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_acquire_relaxed(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_acquire_relaxed_Py)
-    return __atomic_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_consume(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_consume_Py)
-    return __atomic_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_consume_relaxed(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_consume_relaxed_Py)
-    return __atomic_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_strong_relaxed_relaxed(void* volatile* __obj,
-                                                 void** __exp,
-                                                 void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_strong_relaxed_relaxed_Py)
-    return __atomic_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak bool
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_b)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_b)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_b)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_b)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_b)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_b)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_b)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_b)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_b)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_b)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_b)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_b)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_b)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_b)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_b)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(bool volatile* __obj,
-                                               bool* __exp,
-                                               bool __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_b)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak signed char
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_a)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_a)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_a)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_a)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_a)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_a)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_a)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_a)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_a)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_a)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_a)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_a)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_a)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_a)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_a)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(signed char volatile* __obj,
-                                               signed char* __exp,
-                                               signed char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_a)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak unsigned char
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_h)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_h)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_h)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_h)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_h)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_h)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_h)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_h)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_h)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_h)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_h)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_h)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_h)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_h)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_h)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(unsigned char volatile* __obj,
-                                               unsigned char* __exp,
-                                               unsigned char __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_h)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// compare_exchange_weak char16_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_Ds)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_Ds)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_Ds)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_Ds)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_Ds)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_Ds)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_Ds)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_Ds)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_Ds)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_Ds)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_Ds)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_Ds)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_Ds)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_Ds)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_Ds)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(char16_t volatile* __obj,
-                                               char16_t* __exp,
-                                               char16_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_Ds)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak char32_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_Di)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_Di)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_Di)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_Di)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_Di)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_Di)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_Di)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_Di)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_Di)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_Di)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_Di)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_Di)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_Di)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_Di)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_Di)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(char32_t volatile* __obj,
-                                               char32_t* __exp,
-                                               char32_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_Di)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
-
-// compare_exchange_weak wchar_t
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_w)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_w)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_w)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_w)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_w)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_w)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_w)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_w)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_w)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_w)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_w)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_w)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_w)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_w)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_w)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(wchar_t volatile* __obj,
-                                               wchar_t* __exp,
-                                               wchar_t __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_w)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak short
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_s)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_s)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_s)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_s)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_s)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_s)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_s)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_s)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_s)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_s)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_s)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_s)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_s)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_s)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_s)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(short volatile* __obj,
-                                               short* __exp,
-                                               short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_s)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak unsigned short
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_t)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_t)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_t)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_t)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_t)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_t)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_t)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_t)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_t)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_t)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_t)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_t)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_t)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_t)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_t)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(unsigned short volatile* __obj,
-                                               unsigned short* __exp,
-                                               unsigned short __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_t)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak int
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_i)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_i)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_i)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_i)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_i)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_i)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_i)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_i)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_i)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_i)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_i)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_i)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_i)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_i)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_i)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(int volatile* __obj,
-                                               int* __exp,
-                                               int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_i)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak unsigned int
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_j)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_j)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_j)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_j)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_j)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_j)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_j)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_j)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_j)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_j)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_j)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_j)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_j)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_j)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_j)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(unsigned int volatile* __obj,
-                                               unsigned int* __exp,
-                                               unsigned int __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_j)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_l)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_l)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_l)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_l)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_l)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_l)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_l)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_l)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_l)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_l)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_l)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_l)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_l)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_l)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_l)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(long volatile* __obj,
-                                               long* __exp,
-                                               long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_l)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak unsigned long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_m)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_m)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_m)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_m)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_m)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_m)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_m)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_m)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_m)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_m)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_m)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_m)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_m)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_m)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_m)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(unsigned long volatile* __obj,
-                                               unsigned long* __exp,
-                                               unsigned long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_m)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_x)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_x)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_x)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_x)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_x)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_x)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_x)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_x)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_x)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_x)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_x)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_x)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_x)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_x)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_x)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(long long volatile* __obj,
-                                               long long* __exp,
-                                               long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_x)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak unsigned long long
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_y)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_y)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_y)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_y)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_y)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_y)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_y)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_y)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_y)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_y)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_y)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_y)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_y)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_y)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_y)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(unsigned long long volatile* __obj,
-                                               unsigned long long* __exp,
-                                               unsigned long long __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_y)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-// compare_exchange_weak void*
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_seq_cst(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_seq_cst_Py)
-    return __atomic_compare_exchange_weak_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_acquire(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_acquire_Py)
-    return __atomic_compare_exchange_weak_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_consume(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_consume_Py)
-    return __atomic_compare_exchange_weak_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_seq_cst_relaxed(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_seq_cst_relaxed_Py)
-    return __atomic_compare_exchange_weak_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_seq_cst_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_acquire(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_acquire_Py)
-    return __atomic_compare_exchange_weak_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_consume(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_consume_Py)
-    return __atomic_compare_exchange_weak_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acq_rel_relaxed(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acq_rel_relaxed_Py)
-    return __atomic_compare_exchange_weak_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acq_rel_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_acquire(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_acquire_Py)
-    return __atomic_compare_exchange_weak_release_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_consume(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_consume_Py)
-    return __atomic_compare_exchange_weak_release_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_release_relaxed(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_release_relaxed_Py)
-    return __atomic_compare_exchange_weak_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_release_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_acquire(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_acquire_Py)
-    return __atomic_compare_exchange_weak_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_acquire(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_consume(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_consume_Py)
-    return __atomic_compare_exchange_weak_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_acquire_relaxed(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_acquire_relaxed_Py)
-    return __atomic_compare_exchange_weak_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_acquire_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_consume(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_consume_Py)
-    return __atomic_compare_exchange_weak_consume_consume(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_consume(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_consume_relaxed(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_consume_relaxed_Py)
-    return __atomic_compare_exchange_weak_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_consume_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool
-__choose_compare_exchange_weak_relaxed_relaxed(void* volatile* __obj,
-                                               void** __exp,
-                                               void* __desr)
-{
-#if __has_feature(__atomic_compare_exchange_weak_relaxed_relaxed_Py)
-    return __atomic_compare_exchange_weak_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#else
-    return __choose_compare_exchange_strong_relaxed_relaxed(__obj, __exp,
-                                                                        __desr);
-#endif
-}
-
 // flag type and operations
 
-#if !__has_feature(__atomic_flag)
-    typedef bool __atomic_flag__;
-#endif
+typedef bool __atomic_flag__;
 
 struct atomic_flag;
 
@@ -12396,29 +2450,17 @@
     __atomic_flag__ __flg_;
 
     _LIBCPP_INLINE_VISIBILITY
-    bool test_and_set() volatile
-        {return atomic_flag_test_and_set(this);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool test_and_set(memory_order __o) volatile
+    bool test_and_set(memory_order __o = memory_order_seq_cst) volatile
         {return atomic_flag_test_and_set_explicit(this, __o);}
     _LIBCPP_INLINE_VISIBILITY
-    bool test_and_set()
-        {return atomic_flag_test_and_set(this);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool test_and_set(memory_order __o)
+    bool test_and_set(memory_order __o = memory_order_seq_cst)
         {return atomic_flag_test_and_set_explicit(this, __o);}
 
     _LIBCPP_INLINE_VISIBILITY
-    void clear() volatile
-        {atomic_flag_clear(this);}
-    _LIBCPP_INLINE_VISIBILITY
-    void clear(memory_order __o) volatile
+    void clear(memory_order __o = memory_order_seq_cst) volatile
         {atomic_flag_clear_explicit(this, __o);}
     _LIBCPP_INLINE_VISIBILITY
-    void clear()
-        {atomic_flag_clear(this);}
-    _LIBCPP_INLINE_VISIBILITY
-    void clear(memory_order __o)
+    void clear(memory_order __o = memory_order_seq_cst)
         {atomic_flag_clear_explicit(this, __o);}
 
 #ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
@@ -12445,7 +2487,8 @@
 bool
 atomic_flag_test_and_set(volatile atomic_flag* __f)
 {
-    return __choose_exchange_seq_cst(&__f->__flg_, __atomic_flag__(true))
+    return __atomic_exchange(&__f->__flg_, __atomic_flag__(true),
+                             memory_order_seq_cst)
             == __atomic_flag__(true);
 }
 
@@ -12460,27 +2503,8 @@
 bool
 atomic_flag_test_and_set_explicit(volatile atomic_flag* __f, memory_order __o)
 {
-    switch (__o)
-    {
-    case memory_order_relaxed:
-        return __choose_exchange_relaxed(&__f->__flg_, __atomic_flag__(true))
-            == __atomic_flag__(true);
-    case memory_order_consume:
-        return __choose_exchange_consume(&__f->__flg_, __atomic_flag__(true))
-            == __atomic_flag__(true);
-    case memory_order_acquire:
-        return __choose_exchange_acquire(&__f->__flg_, __atomic_flag__(true))
-            == __atomic_flag__(true);
-    case memory_order_release:
-        return __choose_exchange_release(&__f->__flg_, __atomic_flag__(true))
+    return __atomic_exchange(&__f->__flg_, __atomic_flag__(true), __o)
             == __atomic_flag__(true);
-    case memory_order_acq_rel:
-        return __choose_exchange_acq_rel(&__f->__flg_, __atomic_flag__(true))
-            == __atomic_flag__(true);
-    case memory_order_seq_cst:
-        return __choose_exchange_seq_cst(&__f->__flg_, __atomic_flag__(true))
-            == __atomic_flag__(true);
-    }
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12495,7 +2519,7 @@
 void
 atomic_flag_clear(volatile atomic_flag* __f)
 {
-    __choose_store_seq_cst(&__f->__flg_, __atomic_flag__(false));
+    __atomic_store(&__f->__flg_, __atomic_flag__(false), memory_order_seq_cst);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12509,18 +2533,7 @@
 void
 atomic_flag_clear_explicit(volatile atomic_flag* __f, memory_order __o)
 {
-    switch (__o)
-    {
-    case memory_order_relaxed:
-        __choose_store_relaxed(&__f->__flg_, __atomic_flag__(false));
-        break;
-    case memory_order_release:
-        __choose_store_release(&__f->__flg_, __atomic_flag__(false));
-        break;
-    case memory_order_seq_cst:
-        __choose_store_seq_cst(&__f->__flg_, __atomic_flag__(false));
-        break;
-    }
+    __atomic_store(&__f->__flg_, __atomic_flag__(false), __o);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12591,28 +2604,16 @@
     bool is_lock_free() const
         {return atomic_is_lock_free(this);}
     _LIBCPP_INLINE_VISIBILITY
-    void store(bool __v) volatile
-        {atomic_store(this, __v);}
-    _LIBCPP_INLINE_VISIBILITY
-    void store(bool __v, memory_order __o) volatile
+    void store(bool __v, memory_order __o = memory_order_seq_cst) volatile
         {atomic_store_explicit(this, __v, __o);}
     _LIBCPP_INLINE_VISIBILITY
-    void store(bool __v)
-        {atomic_store(this, __v);}
-    _LIBCPP_INLINE_VISIBILITY
-    void store(bool __v, memory_order __o)
+    void store(bool __v, memory_order __o = memory_order_seq_cst)
         {atomic_store_explicit(this, __v, __o);}
     _LIBCPP_INLINE_VISIBILITY
-    bool load() const volatile
-        {return atomic_load(this);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool load(memory_order __o) const volatile
+    bool load(memory_order __o = memory_order_seq_cst) const volatile
         {return atomic_load_explicit(this, __o);}
     _LIBCPP_INLINE_VISIBILITY
-    bool load() const
-        {return atomic_load(this);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool load(memory_order __o) const
+    bool load(memory_order __o = memory_order_seq_cst) const
         {return atomic_load_explicit(this, __o);}
     _LIBCPP_INLINE_VISIBILITY
     operator bool() const volatile
@@ -12621,16 +2622,10 @@
     operator bool() const
         {return load();}
     _LIBCPP_INLINE_VISIBILITY
-    bool exchange(bool __v) volatile
-        {return atomic_exchange(this, __v);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool exchange(bool __v, memory_order __o) volatile
+    bool exchange(bool __v, memory_order __o = memory_order_seq_cst) volatile
         {return atomic_exchange_explicit(this, __v, __o);}
     _LIBCPP_INLINE_VISIBILITY
-    bool exchange(bool __v)
-        {return atomic_exchange(this, __v);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool exchange(bool __v, memory_order __o)
+    bool exchange(bool __v, memory_order __o = memory_order_seq_cst)
         {return atomic_exchange_explicit(this, __v, __o);}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_weak(bool& __v, bool __e, memory_order __s,
@@ -12638,48 +2633,40 @@
         {return atomic_compare_exchange_weak_explicit(this, &__v, __e, __s,
                                                                           __f);}
     _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_weak(bool& __v, bool __e, memory_order __s) volatile
+    bool compare_exchange_weak(bool& __v, bool __e,
+                               memory_order __s = memory_order_seq_cst) volatile
         {return atomic_compare_exchange_weak_explicit(this, &__v, __e, __s,
-                                                                          __s);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_weak(bool& __v, bool __e) volatile
-        {return atomic_compare_exchange_weak(this, &__v, __e);}
+                                                __translate_memory_order(__s));}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_weak(bool& __v, bool __e, memory_order __s,
                                memory_order __f)
         {return atomic_compare_exchange_weak_explicit(this, &__v, __e, __s,
                                                                           __f);}
     _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_weak(bool& __v, bool __e, memory_order __s)
+    bool compare_exchange_weak(bool& __v, bool __e,
+                               memory_order __s = memory_order_seq_cst)
         {return atomic_compare_exchange_weak_explicit(this, &__v, __e, __s,
-                                                                          __s);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_weak(bool& __v, bool __e)
-        {return atomic_compare_exchange_weak(this, &__v, __e);}
+                                                __translate_memory_order(__s));}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_strong(bool& __v, bool __e, memory_order __s,
                                  memory_order __f) volatile
         {return atomic_compare_exchange_strong_explicit(this, &__v, __e, __s,
                                                                           __f);}
     _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_strong(bool& __v, bool __e, memory_order __s) volatile
+    bool compare_exchange_strong(bool& __v, bool __e,
+                               memory_order __s = memory_order_seq_cst) volatile
         {return atomic_compare_exchange_strong_explicit(this, &__v, __e, __s,
-                                                                          __s);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_strong(bool& __v, bool __e) volatile
-        {return atomic_compare_exchange_strong(this, &__v, __e);}
+                                                __translate_memory_order(__s));}
     _LIBCPP_INLINE_VISIBILITY
     bool compare_exchange_strong(bool& __v, bool __e, memory_order __s,
                                  memory_order __f)
         {return atomic_compare_exchange_strong_explicit(this, &__v, __e, __s,
                                                                           __f);}
     _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_strong(bool& __v, bool __e, memory_order __s)
+    bool compare_exchange_strong(bool& __v, bool __e,
+                                 memory_order __s = memory_order_seq_cst)
         {return atomic_compare_exchange_strong_explicit(this, &__v, __e, __s,
-                                                                          __s);}
-    _LIBCPP_INLINE_VISIBILITY
-    bool compare_exchange_strong(bool& __v, bool __e)
-        {return atomic_compare_exchange_strong(this, &__v, __e);}
+                                                __translate_memory_order(__s));}
 #ifndef _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
     atomic_bool() = default;
 #else
@@ -12708,14 +2695,7 @@
 inline _LIBCPP_INLINE_VISIBILITY
 bool atomic_is_lock_free(const volatile atomic_bool*)
 {
-#if __has_feature(__atomic_store_seq_cst_b) && \
-    __has_feature(__atomic_load_seq_cst_b) && \
-    __has_feature(__atomic_exchange_seq_cst_b) && \
-    __has_feature(__atomic_compare_strong_weak_seq_cst_seq_cst_b)
-    return true;
-#else
-    return false;
-#endif
+    return __atomic_is_lock_free(bool);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12739,7 +2719,7 @@
 inline _LIBCPP_INLINE_VISIBILITY
 void atomic_store(volatile atomic_bool* __obj, bool __desr)
 {
-    __choose_store_seq_cst(&__obj->__v_, __desr);
+    __atomic_store(&__obj->__v_, __desr, memory_order_seq_cst);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12752,18 +2732,7 @@
 void atomic_store_explicit(volatile atomic_bool* __obj, bool __desr,
                            memory_order __o)
 {
-    switch (__o)
-    {
-    case memory_order_relaxed:
-        __choose_store_relaxed(&__obj->__v_, __desr);
-        break;
-    case memory_order_release:
-        __choose_store_release(&__obj->__v_, __desr);
-        break;
-    case memory_order_seq_cst:
-        __choose_store_seq_cst(&__obj->__v_, __desr);
-        break;
-    }
+    __atomic_store(&__obj->__v_, __desr, __o);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12776,7 +2745,7 @@
 inline _LIBCPP_INLINE_VISIBILITY
 bool atomic_load(const volatile atomic_bool* __obj)
 {
-    return __choose_load_seq_cst(&__obj->__v_);
+    return __atomic_load(&__obj->__v_, memory_order_seq_cst);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12788,17 +2757,7 @@
 inline _LIBCPP_INLINE_VISIBILITY
 bool atomic_load_explicit(const volatile atomic_bool* __obj, memory_order __o)
 {
-    switch (__o)
-    {
-    case memory_order_relaxed:
-        return __choose_load_relaxed(&__obj->__v_);
-    case memory_order_consume:
-        return __choose_load_consume(&__obj->__v_);
-    case memory_order_acquire:
-        return __choose_load_acquire(&__obj->__v_);
-    case memory_order_seq_cst:
-        return __choose_load_seq_cst(&__obj->__v_);
-    }
+    return __atomic_load(&__obj->__v_, __o);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12811,7 +2770,7 @@
 inline _LIBCPP_INLINE_VISIBILITY
 bool atomic_exchange(volatile atomic_bool* __obj, bool __desr)
 {
-    return __choose_exchange_seq_cst(&__obj->__v_, __desr);
+    return __atomic_exchange(&__obj->__v_, __desr, memory_order_seq_cst);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12824,21 +2783,7 @@
 bool atomic_exchange_explicit(volatile atomic_bool* __obj, bool __desr,
                               memory_order __o)
 {
-    switch (__o)
-    {
-    case memory_order_relaxed:
-        return __choose_exchange_relaxed(&__obj->__v_, __desr);
-    case memory_order_consume:
-        return __choose_exchange_consume(&__obj->__v_, __desr);
-    case memory_order_acquire:
-        return __choose_exchange_acquire(&__obj->__v_, __desr);
-    case memory_order_release:
-        return __choose_exchange_release(&__obj->__v_, __desr);
-    case memory_order_acq_rel:
-        return __choose_exchange_acq_rel(&__obj->__v_, __desr);
-    case memory_order_seq_cst:
-        return __choose_exchange_seq_cst(&__obj->__v_, __desr);
-    }
+    return __atomic_exchange(&__obj->__v_, __desr, __o);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12852,8 +2797,8 @@
 bool atomic_compare_exchange_weak(volatile atomic_bool* __obj, bool* __exp,
                                   bool __desr)
 {
-    return __choose_compare_exchange_weak_seq_cst_seq_cst(&__obj->__v_, __exp,
-                                                                        __desr);
+    return __atomic_compare_exchange_weak(&__obj->__v_, __exp, __desr,
+                                    memory_order_seq_cst, memory_order_seq_cst);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12868,78 +2813,8 @@
                                            bool* __exp, bool __desr,
                                            memory_order __s, memory_order __f)
 {
-    __f = __translate_memory_order(__f);
-    switch (__s)
-    {
-    case memory_order_relaxed:
-        return __choose_compare_exchange_weak_relaxed_relaxed(&__obj->__v_,
-                                                              __exp, __desr);
-    case memory_order_consume:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_weak_consume_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_weak_consume_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_acquire:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_weak_acquire_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_weak_acquire_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_weak_acquire_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_release:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_weak_release_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_weak_release_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_weak_release_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_acq_rel:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_weak_acq_rel_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_weak_acq_rel_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_weak_acq_rel_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_seq_cst:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_weak_seq_cst_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_weak_seq_cst_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_weak_seq_cst_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_seq_cst:
-            return __choose_compare_exchange_weak_seq_cst_seq_cst(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    }
+    return __atomic_compare_exchange_weak(&__obj->__v_, __exp, __desr, __s,
+                                                                           __f);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12955,8 +2830,8 @@
 bool atomic_compare_exchange_strong(volatile atomic_bool* __obj, bool* __exp,
                                     bool __desr)
 {
-    return __choose_compare_exchange_strong_seq_cst_seq_cst(&__obj->__v_, __exp,
-                                                                        __desr);
+    return __atomic_compare_exchange_strong(&__obj->__v_, __exp, __desr,
+                                    memory_order_seq_cst, memory_order_seq_cst);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY
@@ -12972,78 +2847,8 @@
                                              bool* __exp, bool __desr,
                                              memory_order __s, memory_order __f)
 {
-    __f = __translate_memory_order(__f);
-    switch (__s)
-    {
-    case memory_order_relaxed:
-        return __choose_compare_exchange_strong_relaxed_relaxed(&__obj->__v_,
-                                                              __exp, __desr);
-    case memory_order_consume:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_strong_consume_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_strong_consume_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_acquire:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_strong_acquire_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_strong_acquire_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_strong_acquire_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_release:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_strong_release_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_strong_release_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_strong_release_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_acq_rel:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_strong_acq_rel_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_strong_acq_rel_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_strong_acq_rel_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    case memory_order_seq_cst:
-        switch (__f)
-        {
-        case memory_order_relaxed:
-            return __choose_compare_exchange_strong_seq_cst_relaxed(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_consume:
-            return __choose_compare_exchange_strong_seq_cst_consume(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_acquire:
-            return __choose_compare_exchange_strong_seq_cst_acquire(
-                                                   &__obj->__v_, __exp, __desr);
-        case memory_order_seq_cst:
-            return __choose_compare_exchange_strong_seq_cst_seq_cst(
-                                                   &__obj->__v_, __exp, __desr);
-        }
-    }
+    return __atomic_compare_exchange_strong(&__obj->__v_, __exp, __desr, __s,
+                                                                           __f);
 }
 
 inline _LIBCPP_INLINE_VISIBILITY

Removed: libcxx/trunk/src/atomic.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/atomic.cpp?rev=116741&view=auto
==============================================================================
--- libcxx/trunk/src/atomic.cpp (original)
+++ libcxx/trunk/src/atomic.cpp (removed)
@@ -1,23 +0,0 @@
-//===------------------------- atomic.cpp ---------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "__mutex_base"
-#include "atomic"
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-_LIBCPP_VISIBLE
-mutex&
-__not_atomic_mut()
-{
-    static mutex m;
-    return m;
-}
-
-_LIBCPP_END_NAMESPACE_STD

Modified: libcxx/trunk/www/atomic_design_a.html
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/atomic_design_a.html?rev=116742&r1=116741&r2=116742&view=diff
==============================================================================
--- libcxx/trunk/www/atomic_design_a.html (original)
+++ libcxx/trunk/www/atomic_design_a.html Mon Oct 18 15:39:07 2010
@@ -79,18 +79,18 @@
 
 <font color="#C80000">// type must be trivially copyable</font>
 <font color="#C80000">// Behavior is defined for mem_success = [0 ... 5],</font>
-<font color="#C80000">//   mem_falure <= mem_success</font>
-<font color="#C80000">//   mem_falure != 3</font>
-<font color="#C80000">//   mem_falure != 4</font>
+<font color="#C80000">//   mem_failure <= mem_success</font>
+<font color="#C80000">//   mem_failure != 3</font>
+<font color="#C80000">//   mem_failure != 4</font>
 bool __atomic_compare_exchange_strong(type* atomic_obj,
                                       type* expected, type desired,
                                       int mem_success, int mem_failure);
 
 <font color="#C80000">// type must be trivially copyable</font>
 <font color="#C80000">// Behavior is defined for mem_success = [0 ... 5],</font>
-<font color="#C80000">//   mem_falure <= mem_success</font>
-<font color="#C80000">//   mem_falure != 3</font>
-<font color="#C80000">//   mem_falure != 4</font>
+<font color="#C80000">//   mem_failure <= mem_success</font>
+<font color="#C80000">//   mem_failure != 3</font>
+<font color="#C80000">//   mem_failure != 4</font>
 bool __atomic_compare_exchange_weak(type* atomic_obj,
                                     type* expected, type desired,
                                     int mem_success, int mem_failure);





More information about the cfe-commits mailing list