1# Copyright(c)'1994-2017 by The Givaro group 2# This file is part of Givaro. 3# Givaro is governed by the CeCILL-B license under French law 4# and abiding by the rules of distribution of free software. 5# see the COPYRIGHT file for more details. 6# 7# Author Clement Pernet 8#/ 9 10AC_DEFUN([INSTR_SET], 11[ 12 SIMD_CFLAGS="" 13 AS_ECHO("Detecting SIMD instruction set") 14 15 AC_ARG_ENABLE(sse,[AC_HELP_STRING([--disable-sse], [ disable SSE instruction set (enabled by default when available)])],[],[]) 16 AC_ARG_ENABLE(sse2,[AC_HELP_STRING([--disable-sse2], [ disable SSE2 instruction set (enabled by default when available)])],[],[]) 17 AC_ARG_ENABLE(sse3,[AC_HELP_STRING([--disable-sse3], [ disable SSE3 instruction set (enabled by default when available)])],[],[]) 18 AC_ARG_ENABLE(ssse3,[AC_HELP_STRING([--disable-ssse3], [ disable SSSE3 instruction set (enabled by default when available)])],[],[]) 19 AC_ARG_ENABLE(sse41,[AC_HELP_STRING([--disable-sse41], [ disable SSE4.1 instruction set (enabled by default when available)])],[],[]) 20 AC_ARG_ENABLE(sse42,[AC_HELP_STRING([--disable-sse42], [ disable SSE4.2 instruction set (enabled by default when available)])],[],[]) 21 AC_ARG_ENABLE(avx,[AC_HELP_STRING([--disable-avx], [ disable AVX instruction set (enabled by default when available)])],[],[]) 22 AC_ARG_ENABLE(avx2,[AC_HELP_STRING([--disable-avx2], [ disable AVX2 instruction set (enabled by default when available)])],[],[]) 23 AC_ARG_ENABLE(fma,[AC_HELP_STRING([--disable-fma], [ disable FMA instruction set (enabled by default when available)])],[],[]) 24 AC_ARG_ENABLE(fma4,[AC_HELP_STRING([--disable-fma4], [ disable FMA4 instruction set (enabled by default when available)])],[],[]) 25 26 BACKUP_CPPFLAGS=${CPPFLAGS} 27 CPPFLAGS=-I${srcdir} 28 AC_TRY_RUN([ 29 #include "macros/CodeChunk/instrset_detect.cpp" 30 // increment by one to distinguish from compilation failure error code 31 int main(){return instrset_detect()+1;} 32 ],[AS_ECHO("Using 80386 instruction set")],[ 33 iset=$? 34 AS_IF([ test "$iset" -ge "2" -a "x$enable_sse" != "xno" ], [ 35 AS_ECHO("SSE enabled") 36 SIMD_CFLAGS="${SIMD_CFLAGS} -msse" 37 HAVE_SSE="yes" 38 ],[AS_ECHO("SSE disabled")]) 39 AS_IF([ test "$iset" -ge "3" -a "x$enable_sse2" != "xno" ], [ 40 AS_ECHO("SSE2 enabled") 41 SIMD_CFLAGS="${SIMD_CFLAGS} -msse2" 42 ],[AS_ECHO("SSE2 disabled")]) 43 AS_IF([ test "$iset" -ge "4" -a "x$enable_sse3" != "xno" ], [ 44 AS_ECHO("SSE3 enabled") 45 SIMD_CFLAGS="${SIMD_CFLAGS} -msse3" 46 ],[AS_ECHO("SSE3 disabled")]) 47 AS_IF([ test "$iset" -ge "5" -a "x$enable_ssse3" != "xno" ], [ 48 AS_ECHO("SSSE3 enabled") 49 SIMD_CFLAGS="${SIMD_CFLAGS} -mssse3" 50 ],[AS_ECHO("SSSE3 disabled")]) 51 AS_IF([ test "$iset" -ge "6" -a "x$enable_sse41" != "xno" ], [ 52 AS_ECHO("SSE4.1 enabled") 53 SIMD_CFLAGS="${SIMD_CFLAGS} -msse4.1" 54 ],[AS_ECHO("SSE4.1 disabled")]) 55 AS_IF([ test "$iset" -ge "7" -a "x$enable_sse42" != "xno" ], [ 56 AS_ECHO("SSE4.2 enabled") 57 SIMD_CFLAGS="${SIMD_CFLAGS} -msse4.2" 58 ],[AS_ECHO("SSE4.2 disabled")]) 59 AS_IF([ test "$iset" -ge "8" -a "x$enable_avx" != "xno" ], [ 60 AS_ECHO("AVX enabled") 61 SIMD_CFLAGS="${SIMD_CFLAGS} -mavx" 62 ],[AS_ECHO("AVX disabled")]) 63 AS_IF([ test "$iset" -ge "9" -a "x$enable_avx2" != "xno" ], [ 64 AS_ECHO("AVX2 enabled") 65 SIMD_CFLAGS="${SIMD_CFLAGS} -mavx2" 66 ],[AS_ECHO("AVX2 disabled")]) 67 ]) 68 AC_TRY_RUN([ 69 #include "macros/CodeChunk/instrset_detect.cpp" 70 int main(){return !hasFMA3();} 71 ],[ 72 AS_IF([ test "x$enable_fma" != "xno" ], [ 73 AS_ECHO("FMA3 enabled") 74 SIMD_CFLAGS="${SIMD_CFLAGS} -mfma" 75 ],[AS_ECHO("FMA3 disabled")]) 76 ],[AS_ECHO("FMA3 disabled")]) 77 AC_TRY_RUN([ 78 #include "macros/CodeChunk/instrset_detect.cpp" 79 int main(){return !hasFMA4();} 80 ],[ 81 AS_IF([ test "x$enable_fma4" != "xno" ], [ 82 AS_ECHO("FMA4 enabled") 83 SIMD_CFLAGS="${SIMD_CFLAGS} -mfma4" 84 ],[AS_ECHO("FMA4 disabled")]) 85 ],[AS_ECHO("FMA4 disabled")]) 86 CPPFLAGS=${BACKUP_CPPFLAGS} 87 88]) 89