提交 4fb8320a 编写于 作者: D Dr. David Alan Gilbert 提交者: Paolo Bonzini

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: NDr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <1465557378-24105-3-git-send-email-dgilbert@redhat.com>
Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
上级 fc6e1de9
...@@ -1779,13 +1779,20 @@ fi ...@@ -1779,13 +1779,20 @@ fi
# avx2 optimization requirement check # avx2 optimization requirement check
cat > $TMPC << EOF 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 *bar_ifunc(void) {return (void*) bar;}
void foo(void) __attribute__((ifunc("bar_ifunc"))); int foo(void *a) __attribute__((ifunc("bar_ifunc")));
int main(void) { foo(); return 0; } int main(int argc, char *argv[]) { return foo(argv[0]);}
EOF EOF
if compile_prog "-mavx2" "" ; then if compile_object "" ; then
if readelf --syms $TMPE |grep "IFUNC.*foo" >/dev/null 2>&1; then if readelf --syms $TMPO |grep "IFUNC.*foo" >/dev/null 2>&1; then
avx2_opt="yes" avx2_opt="yes"
fi fi
fi fi
......
...@@ -256,13 +256,7 @@ static size_t buffer_find_nonzero_offset_inner(const void *buf, size_t len) ...@@ -256,13 +256,7 @@ static size_t buffer_find_nonzero_offset_inner(const void *buf, size_t len)
return i * sizeof(VECTYPE); return i * sizeof(VECTYPE);
} }
/* #if defined CONFIG_AVX2_OPT
* 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)
#pragma GCC push_options #pragma GCC push_options
#pragma GCC target("avx2") #pragma GCC target("avx2")
#include <cpuid.h> #include <cpuid.h>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册