# include "../standard_ao_double_t.h"
/* As of gcc-5.4, all built-in load/store and CAS atomics for double */
-/* word require -latomic (and are not lock-free), so we use the */
-/* asm-based implementation by default. */
-/* TODO: Update it when GCC has lock-free double-word load/store/CAS. */
-#if !defined(AO_PREFER_BUILTIN_ATOMICS) && !defined(AO_THREAD_SANITIZER) \
- && (!defined(__clang__) || defined(AO_AARCH64_ASM_LOAD_STORE_CAS))
+/* word require -latomic, are not lock-free and cause test_stack */
+/* failure, so the asm-based implementation is used for now. */
+/* TODO: Update it for newer GCC releases. */
+#if !defined(__clang__) || defined(AO_AARCH64_ASM_LOAD_STORE_CAS)
# ifndef AO_PREFER_GENERALIZED
AO_INLINE AO_double_t
}
# define AO_HAVE_double_compare_and_swap_full
-#endif /* !AO_PREFER_BUILTIN_ATOMICS && !__clang__ */
+#endif /* !__clang__ || AO_AARCH64_ASM_LOAD_STORE_CAS */
/* As of clang-5.0 and gcc-5.4, __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 */
/* macro is still missing (while the double-word CAS is available). */