Fix compilation error for clang: In function `_odp_atomic_u128_xchg_mm': undefined reference to `__atomic_exchange' Clang less than 3.6 has issue with defined _SIZEOF_INT128_ and __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 but not supported __atomic_exchange(). This patch adds additional check for clang version.
Signed-off-by: Maxim Uvarov <[email protected]> --- v2: add check for clang version platform/linux-generic/include/odp_atomic_internal.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/platform/linux-generic/include/odp_atomic_internal.h b/platform/linux-generic/include/odp_atomic_internal.h index 3c5606c..67e8f82 100644 --- a/platform/linux-generic/include/odp_atomic_internal.h +++ b/platform/linux-generic/include/odp_atomic_internal.h @@ -589,12 +589,21 @@ static inline void _odp_atomic_flag_clear(_odp_atomic_flag_t *flag) /* Check if target and compiler supports 128-bit scalars and corresponding * exchange and CAS operations */ -/* GCC on x86-64 needs -mcx16 compiler option */ +/* GCC/clang on x86-64 needs -mcx16 compiler option */ #if defined __SIZEOF_INT128__ && defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 -/** Preprocessor symbol that indicates support for 128-bit atomics */ +#if defined(__clang__) + +#if ((__clang_major__ * 100 + __clang_minor__) >= 306) +#define ODP_ATOMIC_U128 +#endif + +#else /* gcc */ #define ODP_ATOMIC_U128 +#endif +#endif +#ifdef ODP_ATOMIC_U128 /** An unsigned 128-bit (16-byte) scalar type */ typedef __int128 _uint128_t; -- 2.7.1.250.gff4ea60 _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
