Message ID | 1464780501-28080-1-git-send-email-dgilbert@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Actually, skip this version, I've got a simple change that also rolls in the gcc 4.9 check (just removing the "-mavx2") - I'll post that after lunch. Dave * Dr. David Alan Gilbert (git) (dgilbert@redhat.com) wrote: > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> > > When configured with --extra-cflags=-O2 gcc optimised out the test > and the readelf failed the check leaving avx2 disabled. > > The fix for that is to remove 'static' on 'foo'. > At the same time, I thought it best to be more paranoid on > checking whether both the compiler and assembler could actually > use avx2, so make a couple of bogus calls to the the mm256 > intrinsics. > > (I also wondered about trying to replicate the gcc4.9 test that's > used in cutils.c - but I'd prefer to know the exact failure mode rather > than test for the version). > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > configure | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > > diff --git a/configure b/configure > index b5aab72..13fabc3 100755 > --- a/configure > +++ b/configure > @@ -1781,10 +1781,17 @@ fi > # avx2 optimization requirement check > > cat > $TMPC << EOF > -static void bar(void) {} > +#pragma GCC push_options > +#pragma GCC target("avx2") > +#include <cpuid.h> > +#include <immintrin.h> > + > +static int bar(void *a) { > + return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a, (__m256i){0})); > +} > static void *bar_ifunc(void) {return (void*) bar;} > -static void foo(void) __attribute__((ifunc("bar_ifunc"))); > -int main(void) { foo(); return 0; } > +int foo(void *a) __attribute__((ifunc("bar_ifunc"))); > +int main(int argc, char *argv[]) { return foo(argv[0]);} > EOF > if compile_prog "-mavx2" "" ; then > if readelf --syms $TMPE |grep "IFUNC.*foo" >/dev/null 2>&1; then > -- > 2.7.4 > > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff --git a/configure b/configure index b5aab72..13fabc3 100755 --- a/configure +++ b/configure @@ -1781,10 +1781,17 @@ fi # avx2 optimization requirement check cat > $TMPC << EOF -static void bar(void) {} +#pragma GCC push_options +#pragma GCC target("avx2") +#include <cpuid.h> +#include <immintrin.h> + +static int bar(void *a) { + return _mm256_movemask_epi8(_mm256_cmpeq_epi8(*(__m256i *)a, (__m256i){0})); +} static void *bar_ifunc(void) {return (void*) bar;} -static void foo(void) __attribute__((ifunc("bar_ifunc"))); -int main(void) { foo(); return 0; } +int foo(void *a) __attribute__((ifunc("bar_ifunc"))); +int main(int argc, char *argv[]) { return foo(argv[0]);} EOF if compile_prog "-mavx2" "" ; then if readelf --syms $TMPE |grep "IFUNC.*foo" >/dev/null 2>&1; then