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