We shouldn't care about optimizing performance under obsolete versions of
clang as long as we don't get compile/test failures under those old
versions. So this check looks reasonable.

On Thu, May 19, 2016 at 2:20 AM, Maxim Uvarov <[email protected]>
wrote:

> 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]>
>

Reviewed-by: Bill Fischofer <[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
>
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to