Skip to content

Commit 9c919a2

Browse files
committed
- added missing file
1 parent 12bef59 commit 9c919a2

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

CMake/avx.cmake

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
macro(set_avx_flags)
2+
set(AVX_FLAGS)
3+
4+
include(CheckCXXSourceRuns)
5+
set(CMAKE_REQUIRED_FLAGS)
6+
7+
# AVX
8+
if(MSVC AND NOT MSVC_VERSION LESS 1600)
9+
set(CMAKE_REQUIRED_FLAGS "/arch:AVX")
10+
elseif(UNIX OR MINGW)
11+
set(CMAKE_REQUIRED_FLAGS "-mavx")
12+
endif()
13+
14+
check_cxx_source_runs("
15+
#include <immintrin.h>
16+
int main()
17+
{
18+
float v[8] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f };
19+
float r[8];
20+
__m256 first = _mm256_loadu_ps(v);
21+
__m256 second = _mm256_setr_ps(0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f);
22+
__m256 result = _mm256_add_ps(first, second);
23+
_mm256_storeu_ps(r, result);
24+
25+
for( int i = 0; i < 8; i++)
26+
if ((i+1)*1.0f+0.5f != r[i])
27+
return -1;
28+
return 0;
29+
}"
30+
FOUND_AVX)
31+
32+
# AVX2
33+
if(MSVC AND NOT MSVC_VERSION LESS 1800)
34+
set(CMAKE_REQUIRED_FLAGS "/arch:AVX2")
35+
elseif(UNIX OR MINGW)
36+
set(CMAKE_REQUIRED_FLAGS "-mavx2")
37+
endif()
38+
39+
check_cxx_source_runs("
40+
#include <immintrin.h>
41+
int main()
42+
{
43+
int v[8] = {10, 20, 30, 40, 50, 60, 70, 80};
44+
int r[8];
45+
__m256i first = _mm256_loadu_si256((__m256i*)v);
46+
__m256i second = _mm256_set_epi32(5, 5, 5, 5, 5, 5, 5, 5);
47+
__m256i result = _mm256_add_epi32(first, second);
48+
_mm256_storeu_si256((__m256i*)r, result);
49+
50+
for( int i = 0; i < 8; i++)
51+
if ((i+1)*10+5 != r[i])
52+
return -1;
53+
return 0;
54+
}"
55+
FOUND_AVX2)
56+
57+
# set compiler flags
58+
if (FOUND_AVX2)
59+
if(MSVC)
60+
set(AVX_FLAGS "/arch:AVX2")
61+
elseif(UNIX OR MINGW)
62+
set(AVX_FLAGS "-mavx2;-mfma")
63+
endif()
64+
elseif (FOUND_AVX)
65+
if(MSVC)
66+
set(AVX_FLAGS "/arch:AVX")
67+
elseif(UNIX OR MINGW)
68+
set(AVX_FLAGS "-mavx")
69+
endif()
70+
endif()
71+
endmacro()

0 commit comments

Comments
 (0)