On Tue, Apr 19, 2016 at 11:30 AM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Tue, Apr 19, 2016 at 8:24 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >> On Tue, Apr 19, 2016 at 11:18 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >>> On Tue, Apr 19, 2016 at 8:08 PM, H.J. Lu <hjl.to...@gmail.com> wrote: >>>> On Tue, Apr 19, 2016 at 8:45 AM, Uros Bizjak <ubiz...@gmail.com> wrote: >>>>> On Tue, Apr 19, 2016 at 5:07 PM, H.J. Lu <hongjiu...@intel.com> wrote: >>>>>> Gcc uses the same -march= for both -m32 and -m64 on x86-64 unless >>>>>> --with-arch-32= is used. There is no need for -march=i486 to compile >>>>>> 32-bit libatomic on x86-64. >>>>>> >>>>>> Tested on x86-64. OK for trunk? >>>>>> >>>>>> H.J. >>>>>> --- >>>>>> PR target/70454 >>>>>> * configure.tgt (XCFLAGS): Don't add -march=i486 to compile >>>>>> 32-bit x86 target library on x86-64. >>>>>> --- >>>>>> libatomic/configure.tgt | 10 ++-------- >>>>>> 1 file changed, 2 insertions(+), 8 deletions(-) >>>>>> >>>>>> diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt >>>>>> index c5470d7..bbb93fc 100644 >>>>>> --- a/libatomic/configure.tgt >>>>>> +++ b/libatomic/configure.tgt >>>>>> @@ -81,14 +81,8 @@ case "${target_cpu}" in >>>>>> try_ifunc=yes >>>>>> ;; >>>>>> x86_64) >>>>>> - case " ${CC} ${CFLAGS} " in >>>>>> - *" -m32 "*) >>>>>> - XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic" >>>>>> - XCFLAGS="${XCFLAGS} -fomit-frame-pointer" >>>>>> - ;; >>>>>> - *) >>>>>> - ;; >>>>>> - esac >>>>>> + # Since 64-bit arch > i486, we can use the same -march= to build >>>>>> + # both 32-bit and 64-bit target libraries. >>>>>> ARCH=x86 >>>>>> # ??? Detect when -mcx16 is already enabled. >>>>>> try_ifunc=yes >>>>>> -- >>>>>> 2.5.5 >>>>>> >>>>> >>>>> No, this is wrong. My build with default options defaults to i386. So, >>>>> the difference between >>>>> >>>> >>>> How was your GCC configured? Did you use >>>> >>>> --with-arch_32=i386 >>> >>> Nope, just: >>> >>> ~/gcc-svn/trunk/configure >>> >> >> $ /ssd/uros/gcc-build/gcc/cc1 -E -dM -m32 hello.c > aaa >> >> I don't think cc1 is supposed to be used directly. Can you use gcc >> driver instead, like >> >> $ /ssd/uros/gcc-build/gcc/xgcc -B/ssd/uros/gcc-build/gcc/ -E -dM -m32 >> hello.c > > This works, since the driver passes: > > COLLECT_GCC_OPTIONS='-B' '/ssd/uros/gcc-build/gcc/' '-E' '-dM' '-m32' > '-mtune=generic' '-march=x86-64' >
That is why I submitted my patches. Since -m32 passes -march=x86-64 to cc1 on x86-64, we shouldn't pass -march=i486 to cc1. It is undesirable especially when --with-arch= is used. I noticed the issue when 32-bit libatomic/libgomp/libitm weren't optimized with -march=haswell when GCC was configured with --with-arch=haswell -- H.J.