simd_check.h 2.04 KB
Newer Older
1
2
// Copyright (C) 2013  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.
3
4
#ifndef DLIB_SIMd_CHECK_Hh_
#define DLIB_SIMd_CHECK_Hh_
5

Davis King's avatar
Davis King committed
6
//#define DLIB_DO_NOT_USE_SIMD
7
8
9

// figure out which SIMD instructions we can use.
#ifndef DLIB_DO_NOT_USE_SIMD
10
11
    #if defined(_MSC_VER) 
        #ifdef __AVX__
Davis King's avatar
Davis King committed
12
13
14
15
16
17
18
19
20
21
22
23
            #ifndef DLIB_HAVE_SSE2
                #define DLIB_HAVE_SSE2
            #endif 
            #ifndef DLIB_HAVE_SSE3
                #define DLIB_HAVE_SSE3
            #endif
            #ifndef DLIB_HAVE_SSE41
                #define DLIB_HAVE_SSE41
            #endif
            #ifndef DLIB_HAVE_AVX
                #define DLIB_HAVE_AVX
            #endif
24
        #endif
Fm's avatar
Fm committed
25
        #if (defined( _M_X64) || defined(_M_IX86_FP) && _M_IX86_FP >= 2) && !defined(DLIB_HAVE_SSE2)
26
27
28
29
            #define DLIB_HAVE_SSE2
        #endif
    #else
        #ifdef __SSE2__
30
31
32
            #ifndef DLIB_HAVE_SSE2
                #define DLIB_HAVE_SSE2
            #endif 
33
        #endif
34
        #ifdef __SSSE3__
35
36
37
            #ifndef DLIB_HAVE_SSE3
                #define DLIB_HAVE_SSE3
            #endif
38
39
        #endif
        #ifdef __SSE4_1__
40
41
42
            #ifndef DLIB_HAVE_SSE41
                #define DLIB_HAVE_SSE41
            #endif
43
44
        #endif
        #ifdef __AVX__
45
46
47
            #ifndef DLIB_HAVE_AVX
                #define DLIB_HAVE_AVX
            #endif
48
        #endif
Davis King's avatar
Davis King committed
49
        #ifdef __AVX2__
50
51
52
            #ifndef DLIB_HAVE_AVX2
                #define DLIB_HAVE_AVX2
            #endif
Davis King's avatar
Davis King committed
53
        #endif
54
55
56
57
58
59
    #endif
#endif

 
// ----------------------------------------------------------------------------------------

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifdef DLIB_HAVE_SSE2
    #include <xmmintrin.h>
    #include <emmintrin.h>
    #include <mmintrin.h>
#endif
#ifdef DLIB_HAVE_SSE3
    #include <pmmintrin.h> // SSE3
    #include <tmmintrin.h>
#endif
#ifdef DLIB_HAVE_SSE41
    #include <smmintrin.h> // SSE4
#endif
#ifdef DLIB_HAVE_AVX
    #include <immintrin.h> // AVX
#endif
#ifdef DLIB_HAVE_AVX2
    #include <avx2intrin.h>
77
78
#endif

79
#endif // DLIB_SIMd_CHECK_Hh_
80
81