diff options
author | Richard Henderson | 2016-08-29 20:46:15 +0200 |
---|---|---|
committer | Paolo Bonzini | 2016-09-13 19:13:30 +0200 |
commit | 5e33a8722254f99cbce6ede73adb4b735d94f58f (patch) | |
tree | 9e9e7dd4e52a73a95f31c2e16d6373cacb4e705d /configure | |
parent | cutils: Export only buffer_is_zero (diff) | |
download | qemu-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-x | configure | 21 |
1 files changed, 6 insertions, 15 deletions
@@ -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 ######################################### |