Fix SSE check and cleanup
This commit is contained in:
parent
0a0ca7507d
commit
1c8a6f3d8b
|
@ -21,89 +21,26 @@ macro(special_check_for_sse _max_sse_level_desired)
|
|||
include(CheckCSourceRuns)
|
||||
|
||||
# Add vs_build to stop flags added to msbuild.
|
||||
IF(NOT MINGW AND NOT VS_BUILD)
|
||||
if( CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX )
|
||||
set(SSE_FLAGS)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "-msse3")
|
||||
check_cxx_source_runs("
|
||||
#include <pmmintrin.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
__m128d a, b;
|
||||
double vals[2] = {0};
|
||||
a = _mm_loadu_pd(vals);
|
||||
b = _mm_hadd_pd(a,a);
|
||||
_mm_storeu_pd(vals, b);
|
||||
return 0;
|
||||
}"
|
||||
HAS_SSE3_EXTENSIONS)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "-msse2")
|
||||
check_cxx_source_runs("
|
||||
#include <emmintrin.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
__m128d a, b;
|
||||
double vals[2] = {0};
|
||||
a = _mm_loadu_pd(vals);
|
||||
b = _mm_add_pd(a,a);
|
||||
_mm_storeu_pd(vals,b);
|
||||
return 0;
|
||||
}"
|
||||
HAS_SSE2_EXTENSIONS)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "-msse")
|
||||
check_cxx_source_runs("
|
||||
#include <xmmintrin.h>
|
||||
int main()
|
||||
{
|
||||
__m128 a, b;
|
||||
float vals[4] = {0};
|
||||
a = _mm_loadu_ps(vals);
|
||||
b = a;
|
||||
b = _mm_add_ps(a,b);
|
||||
_mm_storeu_ps(vals,b);
|
||||
return 0;
|
||||
}"
|
||||
HAS_SSE_EXTENSIONS)
|
||||
ELSE()
|
||||
set(HAS_SSE_EXTENSIONS ON)
|
||||
ENDIF()
|
||||
IF(NOT MINGW)
|
||||
set(SSE_FLAGS)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS)
|
||||
set(CMAKE_REQUIRED_FLAGS "-msse3")
|
||||
check_cxx_source_runs("
|
||||
#include <pmmintrin.h>
|
||||
|
||||
if(HAS_SSE3_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "3"))
|
||||
set(SSE_FLAGS "-msse3")
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang")
|
||||
ELSE()
|
||||
set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse")
|
||||
ENDIF()
|
||||
message(STATUS "Found SSE3 extensions, using flags: ${SSE_FLAGS}")
|
||||
elseif(HAS_SSE2_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3"))
|
||||
set(SSE_FLAGS "-msse2")
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang")
|
||||
ELSE()
|
||||
set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse")
|
||||
ENDIF()
|
||||
|
||||
message(STATUS "Found SSE2 extensions, using flags: ${SSE_FLAGS}")
|
||||
elseif(HAS_SSE_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "1" OR ${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3"))
|
||||
set(SSE_FLAGS "-msse")
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang")
|
||||
ELSE()
|
||||
set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse")
|
||||
ENDIF()
|
||||
|
||||
message(STATUS "Found SSE extensions, using flags: ${SSE_FLAGS}")
|
||||
endif()
|
||||
|
||||
add_definitions(${SSE_FLAGS})
|
||||
|
||||
elseif(MSVC)
|
||||
check_cxx_source_runs("
|
||||
int main()
|
||||
{
|
||||
__m128d a, b;
|
||||
double vals[2] = {0};
|
||||
a = _mm_loadu_pd(vals);
|
||||
b = _mm_hadd_pd(a,a);
|
||||
_mm_storeu_pd(vals, b);
|
||||
return 0;
|
||||
}"
|
||||
HAS_SSE3_EXTENSIONS)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "-msse2")
|
||||
check_cxx_source_runs("
|
||||
#include <emmintrin.h>
|
||||
|
||||
int main()
|
||||
|
@ -114,14 +51,86 @@ macro(special_check_for_sse _max_sse_level_desired)
|
|||
b = _mm_add_pd(a,a);
|
||||
_mm_storeu_pd(vals,b);
|
||||
return 0;
|
||||
}"
|
||||
HAS_SSE2_EXTENSIONS)
|
||||
if( HAS_SSE2_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "2"))
|
||||
message(STATUS "Found SSE2 extensions")
|
||||
set(SSE_FLAGS "/arch:SSE2 /fp:fast -D__SSE__ -D__SSE2__" )
|
||||
endif()
|
||||
|
||||
add_definitions(${SSE_FLAGS})
|
||||
}"
|
||||
HAS_SSE2_EXTENSIONS)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS "-msse")
|
||||
check_cxx_source_runs("
|
||||
#include <xmmintrin.h>
|
||||
int main()
|
||||
{
|
||||
__m128 a, b;
|
||||
float vals[4] = {0};
|
||||
a = _mm_loadu_ps(vals);
|
||||
b = a;
|
||||
b = _mm_add_ps(a,b);
|
||||
_mm_storeu_ps(vals,b);
|
||||
return 0;
|
||||
}"
|
||||
HAS_SSE_EXTENSIONS)
|
||||
|
||||
set(CMAKE_REQUIRED_FLAGS)
|
||||
|
||||
if(HAS_SSE3_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "3"))
|
||||
set(SSE_FLAGS "-msse3")
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang")
|
||||
ELSE()
|
||||
set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse")
|
||||
ENDIF()
|
||||
IF(NOT MSVC)
|
||||
message(STATUS "Found SSE3 extensions, using flags: ${SSE_FLAGS}")
|
||||
ELSE()
|
||||
message(STATUS "Found SSE3 extensions.")
|
||||
ENDIF()
|
||||
elseif(HAS_SSE2_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3"))
|
||||
set(SSE_FLAGS "-msse2")
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang")
|
||||
ELSE()
|
||||
set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse")
|
||||
ENDIF()
|
||||
|
||||
IF(NOT MSVC)
|
||||
message(STATUS "Found SSE2 extensions, using flags: ${SSE_FLAGS}")
|
||||
ELSE()
|
||||
message(STATUS "Found SSE2 extensions.")
|
||||
ENDIF()
|
||||
elseif(HAS_SSE_EXTENSIONS AND (${_max_sse_level_desired} MATCHES "1" OR ${_max_sse_level_desired} MATCHES "2" OR ${_max_sse_level_desired} MATCHES "3"))
|
||||
set(SSE_FLAGS "-msse")
|
||||
IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?Clang")
|
||||
ELSE()
|
||||
set(SSE_FLAGS "${SSE_FLAGS} -mfpmath=sse")
|
||||
ENDIF()
|
||||
IF(NOT MSVC)
|
||||
message(STATUS "Found SSE extensions, using flags: ${SSE_FLAGS}")
|
||||
ELSE()
|
||||
message(STATUS "Found SSE extensions.")
|
||||
ENDIF()
|
||||
endif()
|
||||
|
||||
IF(NOT MSVC)
|
||||
add_definitions(${SSE_FLAGS})
|
||||
ENDIF()
|
||||
|
||||
elseif(MSVC) #todo: remove this unused check for SSE.
|
||||
check_cxx_source_runs("
|
||||
#include <emmintrin.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
__m128d a, b;
|
||||
double vals[2] = {0};
|
||||
a = _mm_loadu_pd(vals);
|
||||
b = _mm_add_pd(a,a);
|
||||
_mm_storeu_pd(vals,b);
|
||||
return 0;
|
||||
}"
|
||||
HAS_SSE2_EXTENSIONS)
|
||||
if( HAS_SSE2_EXTENSIONS AND (NOT ${_max_sse_level_desired} OR ${_max_sse_level_desired} MATCHES "2"))
|
||||
message(STATUS "Found SSE2 extensions")
|
||||
set(SSE_FLAGS "/arch:SSE2 /fp:fast -D__SSE__ -D__SSE2__" )
|
||||
endif()
|
||||
|
||||
add_definitions(${SSE_FLAGS})
|
||||
endif()
|
||||
endmacro(special_check_for_sse)
|
||||
|
||||
|
|
Loading…
Reference in New Issue