diff --git a/include/atomic b/include/atomic
index edcfd2e..e55d092 100644
--- a/include/atomic
+++ b/include/atomic
@@ -2439,7 +2439,7 @@
 
 template <class _Tp>
 _Tp
-__load_seq_cst(const volatile _Tp* __obj)
+__load_seq_cst(_Tp const volatile* __obj)
 {
     unique_lock<mutex> _(__not_atomic_mut());
     return *__obj;
@@ -2449,7 +2449,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_load_seq_cst(const volatile bool* __obj)
+__choose_load_seq_cst(bool const volatile* __obj)
 {
 #if __has_feature(__atomic_load_seq_cst_b)
     return __atomic_load_seq_cst(__obj);
@@ -2460,7 +2460,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_load_acquire(const volatile bool* __obj)
+__choose_load_acquire(bool const volatile* __obj)
 {
 #if __has_feature(__atomic_load_acquire_b)
     return __atomic_load_acquire(__obj);
@@ -2471,7 +2471,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_load_consume(const volatile bool* __obj)
+__choose_load_consume(bool const volatile* __obj)
 {
 #if __has_feature(__atomic_load_consume_b)
     return __atomic_load_consume(__obj);
@@ -2482,7 +2482,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_load_relaxed(const volatile bool* __obj)
+__choose_load_relaxed(bool const volatile* __obj)
 {
 #if __has_feature(__atomic_load_relaxed_b)
     return __atomic_load_relaxed(__obj);
@@ -2491,11 +2491,705 @@
 #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(volatile _Tp* __obj, _Tp __desr)
+__store_seq_cst(_Tp volatile* __obj, _Tp __desr)
 {
     unique_lock<mutex> _(__not_atomic_mut());
     *__obj = __desr;
@@ -2505,7 +3199,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 void
-__choose_store_seq_cst(volatile bool* __obj, bool __desr)
+__choose_store_seq_cst(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_store_seq_cst_b)
     __atomic_store_seq_cst(__obj, __desr);
@@ -2516,7 +3210,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 void
-__choose_store_release(volatile bool* __obj, bool __desr)
+__choose_store_release(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_store_release_b)
     __atomic_store_release(__obj, __desr);
@@ -2527,7 +3221,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 void
-__choose_store_relaxed(volatile bool* __obj, bool __desr)
+__choose_store_relaxed(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_store_relaxed_b)
     __atomic_store_relaxed(__obj, __desr);
@@ -2536,11 +3230,540 @@
 #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(volatile _Tp* __obj, _Tp __desr)
+__exchange_seq_cst(_Tp volatile* __obj, _Tp __desr)
 {
     unique_lock<mutex> _(__not_atomic_mut());
     _Tp __r = *__obj;
@@ -2552,7 +3775,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_exchange_seq_cst(volatile bool* __obj, bool __desr)
+__choose_exchange_seq_cst(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_exchange_seq_cst_b)
     return __atomic_exchange_seq_cst(__obj, __desr);
@@ -2563,7 +3786,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_exchange_acq_rel(volatile bool* __obj, bool __desr)
+__choose_exchange_acq_rel(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_exchange_acq_rel_b)
     return __atomic_exchange_acq_rel(__obj, __desr);
@@ -2574,7 +3797,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_exchange_release(volatile bool* __obj, bool __desr)
+__choose_exchange_release(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_exchange_release_b)
     return __atomic_exchange_release(__obj, __desr);
@@ -2585,7 +3808,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_exchange_acquire(volatile bool* __obj, bool __desr)
+__choose_exchange_acquire(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_exchange_acquire_b)
     return __atomic_exchange_acquire(__obj, __desr);
@@ -2596,7 +3819,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_exchange_consume(volatile bool* __obj, bool __desr)
+__choose_exchange_consume(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_exchange_consume_b)
     return __atomic_exchange_consume(__obj, __desr);
@@ -2607,7 +3830,7 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_exchange_relaxed(volatile bool* __obj, bool __desr)
+__choose_exchange_relaxed(bool volatile* __obj, bool __desr)
 {
 #if __has_feature(__atomic_exchange_relaxed_b)
     return __atomic_exchange_relaxed(__obj, __desr);
@@ -2616,11 +3839,1035 @@
 #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(volatile _Tp* __obj, _Tp* __exp,
+__compare_exchange_strong_seq_cst_seq_cst(_Tp volatile* __obj, _Tp* __exp,
                                                                      _Tp __desr)
 {
     unique_lock<mutex> _(__not_atomic_mut());
@@ -2637,8 +4884,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_seq_cst_seq_cst(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2650,8 +4898,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_seq_cst_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2664,8 +4913,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_seq_cst_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2678,8 +4928,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_seq_cst_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2692,8 +4943,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_acq_rel_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2706,8 +4958,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_acq_rel_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2720,8 +4973,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_acq_rel_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2734,8 +4988,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_release_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2748,8 +5003,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_release_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2762,8 +5018,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_release_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2776,8 +5033,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_acquire_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2790,8 +5048,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_acquire_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2804,8 +5063,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_acquire_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2818,8 +5078,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_consume_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2832,8 +5093,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_consume_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2846,8 +5108,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_strong_relaxed_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2858,12 +5121,3632 @@
 #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(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2876,8 +8759,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_seq_cst_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2890,8 +8774,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_seq_cst_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2904,8 +8789,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_seq_cst_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2918,8 +8804,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_acq_rel_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2932,8 +8819,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_acq_rel_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2946,8 +8834,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_acq_rel_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2960,8 +8849,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_release_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2974,8 +8864,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_release_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -2988,8 +8879,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_release_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -3002,8 +8894,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_acquire_acquire(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -3016,8 +8909,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_acquire_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -3030,8 +8924,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_acquire_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -3044,8 +8939,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_consume_consume(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -3058,8 +8954,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_consume_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -3072,8 +8969,9 @@
 
 inline _LIBCPP_INLINE_VISIBILITY
 bool
-__choose_compare_exchange_weak_relaxed_relaxed(volatile bool* __obj,
-                                                       bool* __exp, bool __desr)
+__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,
@@ -3084,6 +8982,3398 @@
 #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
 
 struct atomic_flag;
