File: simd.cmake

package info (click to toggle)
tarantool 2.6.0-1.4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 85,412 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,178; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (65 lines) | stat: -rw-r--r-- 1,650 bytes parent folder | download | duplicates (5)
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
if (NOT CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|^i[3-9]86$")
    return()
endif()

#
# Check compiler for SSE2 intrinsics
#
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG )
    set(CMAKE_REQUIRED_FLAGS "-msse2")
    check_c_source_runs("
    #include <immintrin.h>

    int main()
    {
    __m128i a = _mm_setzero_si128();
    return 0;
    }"
    CC_HAS_SSE2_INTRINSICS)
endif()

#
# Check compiler for AVX intrinsics
#
if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG )
    set(CMAKE_REQUIRED_FLAGS "-mavx")
    check_c_source_runs("
    #include <immintrin.h>

    int main()
    {
    __m256i a = _mm256_setzero_si256();
    return 0;
    }"
    CC_HAS_AVX_INTRINSICS)
endif()

if ((CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") AND CC_HAS_SSE2_INTRINSICS)
    # any amd64 supports sse2 instructions
    set(ENABLE_SSE2_DEFAULT ON)
else()
    set(ENABLE_SSE2_DEFAULT OFF)
endif()

option(ENABLE_SSE2 "Enable compile-time SSE2 support." ${ENABLE_SSE2_DEFAULT})
option(ENABLE_AVX  "Enable compile-time AVX support." OFF)

if (ENABLE_SSE2)
    if (!CC_HAS_SSE2_INTRINSICS)
        message( SEND_ERROR "SSE2 is enabled, but is not supported by compiler.")
    else()
        add_compile_flags("C;CXX" "-msse2")
        find_package_message(SSE2 "SSE2 is enabled - target CPU must supppot it"
            "${CC_HAS_SSE2_INTRINSICS}")
    endif()
endif()

if (ENABLE_AVX)
    if (!CC_HAS_AVX_INTRINSICS)
        message(SEND_ERROR "AVX is enabled")
    else()
        add_compile_flags("C;CXX" "-mavx")
        find_package_message(SSE2 "AVX is enabled - target CPU must support it"
            "${CC_HAS_AVX_INTRINSICS}")
    endif()
endif()