From 355f1e7514f4003be6a82e960c50557ee7a3b496 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Sun, 19 Aug 2018 03:19:07 +0200 Subject: [PATCH] Added more SIMD configuration --- .travis.yml | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ CMakeLists.txt | 35 +++++++++++++++++++++++++++++++++- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f80c8c96..1fab5724 100644 --- a/.travis.yml +++ b/.travis.yml @@ -486,6 +486,57 @@ matrix: - cmake -E time cmake --build . - ctest + - os: linux + addons: + apt: + sources: + - llvm-toolchain-trusty-5.0 + packages: + - clang-5.0 + env: + - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-ssse3-release" + script: + - cmake --version + - mkdir ./build_ssse3_17_release + - cd ./build_ssse3_17_release + - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -GLM_TEST_ENABLE_SIMD_SSSE3=ON .. + - cmake -E time cmake --build . + - ctest + + - os: linux + addons: + apt: + sources: + - llvm-toolchain-trusty-5.0 + packages: + - clang-5.0 + env: + - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-sse41-release" + script: + - cmake --version + - mkdir ./build_sse41_17_release + - cd ./build_sse41_17_release + - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -GLM_TEST_ENABLE_SIMD_SSE4_1=ON .. + - cmake -E time cmake --build . + - ctest + + - os: linux + addons: + apt: + sources: + - llvm-toolchain-trusty-5.0 + packages: + - clang-5.0 + env: + - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-sse42-release" + script: + - cmake --version + - mkdir ./build_sse42_17_release + - cd ./build_sse42_17_release + - cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -GLM_TEST_ENABLE_SIMD_SSE4_2=ON .. + - cmake -E time cmake --build . + - ctest + - os: linux addons: apt: diff --git a/CMakeLists.txt b/CMakeLists.txt index 24d7f0f2..c5ac4e5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,6 +82,9 @@ endif() option(GLM_TEST_ENABLE "Build unit tests" ON) option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF) option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF) +option(GLM_TEST_ENABLE_SIMD_SSSE3 "Enable SSSE3 optimizations" OFF) +option(GLM_TEST_ENABLE_SIMD_SSE4_1 "Enable SSE 4.1 optimizations" OFF) +option(GLM_TEST_ENABLE_SIMD_SSE4_2 "Enable SSE 4.2 optimizations" OFF) option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF) option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF) option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF) @@ -114,13 +117,43 @@ elseif(GLM_TEST_ENABLE_SIMD_AVX) endif() message(STATUS "GLM: AVX instruction set") +elseif(GLM_TEST_ENABLE_SIMD_SSE4_2) + if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + add_compile_options(-msse4.2) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel") + add_compile_options(/QxSSE4.2) + elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64) + add_compile_options(/arch:SSE2) # VC doesn't support SSE4.2 + endif() + message(STATUS "GLM: SSE4.2 instruction set") + +elseif(GLM_TEST_ENABLE_SIMD_SSE4_1) + if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + add_compile_options(-msse4.1) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel") + add_compile_options(/QxSSE4.1) + elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64) + add_compile_options(/arch:SSE2) # VC doesn't support SSE4.1 + endif() + message(STATUS "GLM: SSE4.1 instruction set") + +elseif(GLM_TEST_ENABLE_SIMD_SSSE3) + if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) + add_compile_options(-mssse3) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel") + add_compile_options(/QxSSSE3) + elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64) + add_compile_options(/arch:SSE2) # VC doesn't support SSSE3 + endif() + message(STATUS "GLM: SSSE3 instruction set") + elseif(GLM_TEST_ENABLE_SIMD_SSE3) if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) add_compile_options(-msse3) elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel") add_compile_options(/QxSSE3) elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64) - add_compile_options(/arch:SSE2) # VC doesn't support /arch:SSE3 + add_compile_options(/arch:SSE2) # VC doesn't support SSE3 endif() message(STATUS "GLM: SSE3 instruction set")