From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58859) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b84LI-0001q2-GM for qemu-devel@nongnu.org; Wed, 01 Jun 2016 07:30:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b84K1-0002y9-BA for qemu-devel@nongnu.org; Wed, 01 Jun 2016 07:29:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57370) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b84K1-0002xb-2g for qemu-devel@nongnu.org; Wed, 01 Jun 2016 07:28:25 -0400 From: "Dr. David Alan Gilbert (git)" Date: Wed, 1 Jun 2016 12:28:21 +0100 Message-Id: <1464780501-28080-1-git-send-email-dgilbert@redhat.com> Subject: [Qemu-devel] [PATCH] Improve avx2 configure test List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, liang.z.li@intel.com, pbonzini@redhat.com, peter.maydell@linaro.org Cc: amit.shah@redhat.com From: "Dr. David Alan Gilbert" When configured with --extra-cflags=-O2 gcc optimised out the test and the readelf failed the check leaving avx2 disabled. The fix for that is to remove 'static' on 'foo'. At the same time, I thought it best to be more paranoid on checking whether both the compiler and assembler could actually use avx2, so make a couple of bogus calls to the the mm256 intrinsics. (I also wondered about trying to replicate the gcc4.9 test that's used in cutils.c - but I'd prefer to know the exact failure mode rather than test for the version). Signed-off-by: Dr. David Alan Gilbert --- configure | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/configure b/configure index b5aab72..13fabc3 100755 --- a/configure +++ b/configure @@ -1781,10 +1781,17 @@ fi # avx2 optimization requirement check cat > $TMPC << EOF -static void bar(void) {} +#pragma GCC push_options +#pragma GCC target("avx2") +#include +#include + +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 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 -- 2.7.4