[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 11/11] avx2 configure: Use primitives in test
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 11/11] avx2 configure: Use primitives in test |
Date: |
Mon, 6 Jun 2016 19:35:20 +0200 |
From: "Dr. David Alan Gilbert" <address@hidden>
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 <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Liang Li <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
configure | 15 +++++++++++----
util/cutils.c | 8 +-------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/configure b/configure
index 08952af..b19171b 100755
--- a/configure
+++ b/configure
@@ -1781,12 +1781,19 @@ 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 compile_prog "" ; then
if readelf --syms $TMPE |grep "IFUNC.*foo" >/dev/null 2>&1; then
avx2_opt="yes"
fi
diff --git a/util/cutils.c b/util/cutils.c
index 43d1afb..5830a68 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -256,13 +256,7 @@ static size_t buffer_find_nonzero_offset_inner(const void
*buf, size_t len)
return i * sizeof(VECTYPE);
}
-/*
- * GCC before version 4.9 has a bug which will cause the target
- * attribute work incorrectly and failed to compile in some case,
- * restrict the gcc version to 4.9+ to prevent the failure.
- */
-
-#if defined CONFIG_AVX2_OPT && QEMU_GNUC_PREREQ(4, 9)
+#if defined CONFIG_AVX2_OPT
#pragma GCC push_options
#pragma GCC target("avx2")
#include <cpuid.h>
--
2.5.5
- [Qemu-devel] [PULL 00/11] Misc changes for 2016-06-06, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 02/11] pc: allow raising low memory via max-ram-below-4g option, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 03/11] hw/char: QOM'ify escc.c (fix), Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 05/11] scsi: mark TYPE_SCSI_DISK_BASE as abstract, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 04/11] scsi: esp: check TI buffer index before read/write, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 01/11] tests: Rename tests/Makefile to tests/Makefile.include, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 09/11] vnc: list the 'to' parameter of '-vnc' in the qemu man page, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 10/11] Make avx2 configure test work with -O2, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 07/11] Makefile: Derive "PKGVERSION" from "git describe" by default, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 06/11] Makefile: Add a "FORCE" target, Paolo Bonzini, 2016/06/06
- [Qemu-devel] [PULL 11/11] avx2 configure: Use primitives in test,
Paolo Bonzini <=
- [Qemu-devel] [PULL 08/11] scsi-disk: add missing break, Paolo Bonzini, 2016/06/06
- Re: [Qemu-devel] [PULL 00/11] Misc changes for 2016-06-06, Peter Maydell, 2016/06/06