summaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
authorRichard Henderson2016-08-29 20:46:15 +0200
committerPaolo Bonzini2016-09-13 19:13:30 +0200
commit5e33a8722254f99cbce6ede73adb4b735d94f58f (patch)
tree9e9e7dd4e52a73a95f31c2e16d6373cacb4e705d /configure
parentcutils: Export only buffer_is_zero (diff)
downloadqemu-5e33a8722254f99cbce6ede73adb4b735d94f58f.tar.gz
qemu-5e33a8722254f99cbce6ede73adb4b735d94f58f.tar.xz
qemu-5e33a8722254f99cbce6ede73adb4b735d94f58f.zip
cutils: Rearrange buffer_is_zero acceleration
Allow selection of several acceleration functions based on the size and alignment of the buffer. Do not require ifunc support for AVX2 acceleration. Signed-off-by: Richard Henderson <rth@twiddle.net> Message-Id: <1472496380-19706-5-git-send-email-rth@twiddle.net> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure21
1 files changed, 6 insertions, 15 deletions
diff --git a/configure b/configure
index 331c36fb84..7e09b79fe5 100755
--- a/configure
+++ b/configure
@@ -1794,28 +1794,19 @@ fi
##########################################
# avx2 optimization requirement check
-
-if test "$static" = "no" ; then
- cat > $TMPC << EOF
+cat > $TMPC << EOF
#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}));
+ __m256i x = *(__m256i *)a;
+ return _mm256_testz_si256(x, x);
}
-static void *bar_ifunc(void) {return (void*) bar;}
-int foo(void *a) __attribute__((ifunc("bar_ifunc")));
-int main(int argc, char *argv[]) { return foo(argv[0]);}
+int main(int argc, char *argv[]) { return bar(argv[0]); }
EOF
- if compile_object "" ; then
- if has readelf; then
- if readelf --syms $TMPO 2>/dev/null |grep -q "IFUNC.*foo"; then
- avx2_opt="yes"
- fi
- fi
- fi
+if compile_object "" ; then
+ avx2_opt="yes"
fi
#########################################