File: instr_set.m4

package info (click to toggle)
linbox 1.7.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,940 kB
  • sloc: cpp: 108,392; lisp: 5,469; makefile: 1,345; sh: 1,244; csh: 131; python: 74; perl: 2
file content (88 lines) | stat: -rw-r--r-- 5,038 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Copyright(c)'1994-2017 by The Givaro group
# This file is part of Givaro.
# Givaro is governed by the CeCILL-B license under French law
# and abiding by the rules of distribution of free software.
# see the COPYRIGHT file for more details.
#
# Author Clement Pernet
#/

AC_DEFUN([INSTR_SET],
[
        SIMD_CFLAGS=""
        AS_ECHO("Detecting SIMD instruction set")

        AC_ARG_ENABLE(sse,[AC_HELP_STRING([--disable-sse], [ disable SSE instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(sse2,[AC_HELP_STRING([--disable-sse2], [ disable SSE2 instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(sse3,[AC_HELP_STRING([--disable-sse3], [ disable SSE3 instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(ssse3,[AC_HELP_STRING([--disable-ssse3], [ disable SSSE3 instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(sse41,[AC_HELP_STRING([--disable-sse41], [ disable SSE4.1 instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(sse42,[AC_HELP_STRING([--disable-sse42], [ disable SSE4.2 instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(avx,[AC_HELP_STRING([--disable-avx], [ disable AVX instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(avx2,[AC_HELP_STRING([--disable-avx2], [ disable AVX2 instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(fma,[AC_HELP_STRING([--disable-fma], [ disable FMA instruction set (enabled by default when available)])],[],[])
        AC_ARG_ENABLE(fma4,[AC_HELP_STRING([--disable-fma4], [ disable FMA4 instruction set (enabled by default when available)])],[],[])

      BACKUP_CPPFLAGS=${CPPFLAGS}
      CPPFLAGS=-I${srcdir}
      AC_TRY_RUN([
                        #include "macros/CodeChunk/instrset_detect.cpp"
                        // increment by one to distinguish from compilation failure error code
                        int main(){return instrset_detect()+1;}
                ],[AS_ECHO("Using 80386 instruction set")],[
                iset=$?
                AS_IF([ test "$iset" -ge "2" -a "x$enable_sse" != "xno" ], [
                        AS_ECHO("SSE enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -msse"
                        HAVE_SSE="yes"
                ],[AS_ECHO("SSE disabled")])
                AS_IF([ test "$iset" -ge "3" -a "x$enable_sse2" != "xno" ], [
                        AS_ECHO("SSE2 enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -msse2"
                ],[AS_ECHO("SSE2 disabled")])
                AS_IF([ test "$iset" -ge "4" -a "x$enable_sse3" != "xno" ], [
                        AS_ECHO("SSE3 enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -msse3"
                ],[AS_ECHO("SSE3 disabled")])
                AS_IF([ test "$iset" -ge "5" -a "x$enable_ssse3" != "xno" ], [
                        AS_ECHO("SSSE3 enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -mssse3"
                ],[AS_ECHO("SSSE3 disabled")])
                AS_IF([ test "$iset" -ge "6" -a "x$enable_sse41" != "xno" ], [
                        AS_ECHO("SSE4.1 enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -msse4.1"
                ],[AS_ECHO("SSE4.1 disabled")])
                AS_IF([ test "$iset" -ge "7" -a "x$enable_sse42" != "xno" ], [
                        AS_ECHO("SSE4.2 enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -msse4.2"
                ],[AS_ECHO("SSE4.2 disabled")])
                AS_IF([ test "$iset" -ge "8" -a "x$enable_avx" != "xno" ], [
                        AS_ECHO("AVX enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -mavx"
                ],[AS_ECHO("AVX disabled")])
                AS_IF([ test "$iset" -ge "9" -a "x$enable_avx2" != "xno" ], [
                        AS_ECHO("AVX2 enabled")
                        SIMD_CFLAGS="${SIMD_CFLAGS} -mavx2"
                ],[AS_ECHO("AVX2 disabled")])
        ])
        AC_TRY_RUN([
                        #include "macros/CodeChunk/instrset_detect.cpp"
                        int main(){return !hasFMA3();}
                   ],[
                        AS_IF([ test "x$enable_fma" != "xno" ], [
                                AS_ECHO("FMA3 enabled")
                                SIMD_CFLAGS="${SIMD_CFLAGS} -mfma"
                              ],[AS_ECHO("FMA3 disabled")])
                ],[AS_ECHO("FMA3 disabled")])
        AC_TRY_RUN([
                        #include "macros/CodeChunk/instrset_detect.cpp"
                        int main(){return !hasFMA4();}
                   ],[
                        AS_IF([ test "x$enable_fma4" != "xno" ], [
                                AS_ECHO("FMA4 enabled")
                                SIMD_CFLAGS="${SIMD_CFLAGS} -mfma4"
                              ],[AS_ECHO("FMA4 disabled")])
                ],[AS_ECHO("FMA4 disabled")])
       CPPFLAGS=${BACKUP_CPPFLAGS}

])