On Thu, Jan 14, 2021 at 01:04:31PM -0800, H.J. Lu via Gcc-patches wrote:
> If x86 libatomic isn't compiled with -march=i486 or better, append
> -march=i486 XCFLAGS for x86 libatomic build.  Set try_ifunc to yes
> if -mcx16 isn't used to compile x86-64 libatomic or -march=i686 or
> better isn't used to compile x86 libatomic.
> 
>       PR target/70454
>       * configure.tgt (XCFLAGS): Append -march=i486 to compile x86
>       libatomic if needed.
>       (try_ifunc): Set to yes only if needed.
> ---
>  libatomic/configure.tgt | 73 ++++++++++++++++++++++++++++-------------
>  1 file changed, 50 insertions(+), 23 deletions(-)
> 
> diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt
> index 2f24817b454..1f3a3ad6c7c 100644
> --- a/libatomic/configure.tgt
> +++ b/libatomic/configure.tgt
> @@ -81,32 +81,59 @@ case "${target_cpu}" in
>       ARCH=sparc
>       ;;
>  
> -  i[3456]86)
> -     case " ${CC} ${CFLAGS} " in
> -       *" -m64 "*|*" -mx32 "*)
> -         ;;
> -       *)
> -         if test -z "$with_arch"; then
> -           XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
> -           XCFLAGS="${XCFLAGS} -fomit-frame-pointer"
> -         fi
> -     esac
> -     ARCH=x86
> -     # ??? Detect when -march=i686 is already enabled.
> -     try_ifunc=yes
> -     ;;
> -  x86_64)
> -     case " ${CC} ${CFLAGS} " in
> -       *" -m32 "*)
> +  i[3456]86 | x86_64)
> +     # Need i486 or better.
> +     cat > conftestx.c <<EOF
> +#if defined __x86_64__ || defined __i486__ || defined __pentium__ \
> +      || defined __pentiumpro__ || defined __pentium4__ \
> +      || defined __geode__ || defined __SSE__
> +# error Need i486 or better
> +#endif

Rather than hoping we got all the defines right, wouldn't it be better to
compile with -S a testcase like:
int
foo (int *p, int x, int y)
{
  return __sync_val_compare_and_swap (p, x, y);
}
and if there is __sync_val_compare_and_swap_4 in the assembly assume
-march=i486 needs to be added?
I.e. test for what exactly we need (working atomics).

        Jakub

Reply via email to