aboutsummaryrefslogtreecommitdiff
path: root/configure
diff options
context:
space:
mode:
authorDr. David Alan Gilbert <dgilbert@redhat.com>2016-06-10 12:16:18 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2016-06-16 18:39:04 +0200
commit4fb8320a2efb2216c7ddcc929ad0362f4e285681 (patch)
tree4aa9fe07e20798d13869213b11388fe8af99607f /configure
parentfc6e1de9d885377e1e68e50e25ed5425540b9b81 (diff)
downloadqemu-4fb8320a2efb2216c7ddcc929ad0362f4e285681.zip
qemu-4fb8320a2efb2216c7ddcc929ad0362f4e285681.tar.gz
qemu-4fb8320a2efb2216c7ddcc929ad0362f4e285681.tar.bz2
avx2 configure: Use primitives in test
Use the avx2 primitives during the test, thus making sure that the compiler and assembler could actually use avx2. This also detects the failure case on gcc 4.8.x with -save-temps and avoids the need for the gcc version check in cutils. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <1465557378-24105-3-git-send-email-dgilbert@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure17
1 files changed, 12 insertions, 5 deletions
diff --git a/configure b/configure
index 3c0e279..c57d6a7 100755
--- a/configure
+++ b/configure
@@ -1779,13 +1779,20 @@ 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;}
-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
+if compile_object "" ; then
+ if readelf --syms $TMPO |grep "IFUNC.*foo" >/dev/null 2>&1; then
avx2_opt="yes"
fi
fi