summaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindSSE.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/modules/FindSSE.cmake')
-rw-r--r--cmake/modules/FindSSE.cmake45
1 files changed, 41 insertions, 4 deletions
diff --git a/cmake/modules/FindSSE.cmake b/cmake/modules/FindSSE.cmake
index d001b03..b860dca 100644
--- a/cmake/modules/FindSSE.cmake
+++ b/cmake/modules/FindSSE.cmake
@@ -40,6 +40,41 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux")
40 string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE) 40 string(COMPARE EQUAL "avx2" "${_SSE_THERE}" _AVX2_TRUE)
41 CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK) 41 CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK)
42 endif() 42 endif()
43elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
44 if(CPU MATCHES "amd64" OR CPU MATCHES "i.86")
45 exec_program(cat ARGS "/var/run/dmesg.boot | grep Features" OUTPUT_VARIABLE CPUINFO)
46
47 string(REGEX REPLACE "^.*(SSE).*$" "\\1" _SSE_THERE ${CPUINFO})
48 string(COMPARE EQUAL "SSE" "${_SSE_THERE}" _SSE_TRUE)
49 CHECK_CXX_ACCEPTS_FLAG("-msse" _SSE_OK)
50
51 string(REGEX REPLACE "^.*(SSE2).*$" "\\1" _SSE_THERE ${CPUINFO})
52 string(COMPARE EQUAL "SSE2" "${_SSE_THERE}" _SSE2_TRUE)
53 CHECK_CXX_ACCEPTS_FLAG("-msse2" _SSE2_OK)
54
55 string(REGEX REPLACE "^.*(SSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
56 string(COMPARE EQUAL "SSE3" "${_SSE_THERE}" _SSE3_TRUE)
57 CHECK_CXX_ACCEPTS_FLAG("-msse3" _SSE3_OK)
58
59 string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" _SSE_THERE ${CPUINFO})
60 string(COMPARE EQUAL "SSSE3" "${_SSE_THERE}" _SSSE3_TRUE)
61 CHECK_CXX_ACCEPTS_FLAG("-mssse3" _SSSE3_OK)
62
63 string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" _SSE_THERE ${CPUINFO})
64 string(COMPARE EQUAL "SSE4.1" "${_SSE_THERE}" _SSE41_TRUE)
65 CHECK_CXX_ACCEPTS_FLAG("-msse4.1" _SSE41_OK)
66 string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" _SSE_THERE ${CPUINFO})
67 string(COMPARE EQUAL "SSE4.2" "${_SSE_THERE}" _SSE42_TRUE)
68 CHECK_CXX_ACCEPTS_FLAG("-msse4.2" _SSE42_OK)
69
70 string(REGEX REPLACE "^.*(AVX).*$" "\\1" _SSE_THERE ${CPUINFO})
71 string(COMPARE EQUAL "AVX" "${_SSE_THERE}" _AVX_TRUE)
72 CHECK_CXX_ACCEPTS_FLAG("-mavx" _AVX_OK)
73
74 string(REGEX REPLACE "^.*(AVX2).*$" "\\1" _SSE_THERE ${CPUINFO})
75 string(COMPARE EQUAL "AVX2" "${_SSE_THERE}" _AVX2_TRUE)
76 CHECK_CXX_ACCEPTS_FLAG("-mavx2" _AVX2_OK)
77 endif()
43elseif(CMAKE_SYSTEM_NAME MATCHES "Android") 78elseif(CMAKE_SYSTEM_NAME MATCHES "Android")
44 if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86") 79 if(CPU MATCHES "x86_64" OR CPU MATCHES "i.86")
45 set(_SSE_TRUE TRUE) 80 set(_SSE_TRUE TRUE)
@@ -94,10 +129,12 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
94 endif() 129 endif()
95elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") 130elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
96 # TODO 131 # TODO
97 set(_SSE_TRUE true) 132 if(ARCH STREQUAL win32 OR ARCH STREQUAL x64)
98 set(_SSE_OK true) 133 set(_SSE_TRUE true)
99 set(_SSE2_TRUE true) 134 set(_SSE_OK true)
100 set(_SSE2_OK true) 135 set(_SSE2_TRUE true)
136 set(_SSE2_OK true)
137 endif()
101endif() 138endif()
102 139
103include(FindPackageHandleStandardArgs) 140include(FindPackageHandleStandardArgs)