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) ([email protected]) wrote: > From: "Dr. David Alan Gilbert" <[email protected]> > > 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 <[email protected]> > --- > 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 / [email protected] / Manchester, UK
