2
0
Эх сурвалжийг харах

Added more SIMD configuration

Christophe Riccio 7 жил өмнө
parent
commit
355f1e7514
2 өөрчлөгдсөн 85 нэмэгдсэн , 1 устгасан
  1. 51 0
      .travis.yml
  2. 34 1
      CMakeLists.txt

+ 51 - 0
.travis.yml

@@ -486,6 +486,57 @@ matrix:
         - cmake -E time cmake --build .
         - cmake -E time cmake --build .
         - ctest
         - 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
     - os: linux
       addons:
       addons:
         apt:
         apt:

+ 34 - 1
CMakeLists.txt

@@ -82,6 +82,9 @@ endif()
 option(GLM_TEST_ENABLE "Build unit tests" ON)
 option(GLM_TEST_ENABLE "Build unit tests" ON)
 option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
 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_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_AVX "Enable AVX optimizations" OFF)
 option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
 option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
 option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
 option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
@@ -114,13 +117,43 @@ elseif(GLM_TEST_ENABLE_SIMD_AVX)
 	endif()
 	endif()
 	message(STATUS "GLM: AVX instruction set")
 	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)
 elseif(GLM_TEST_ENABLE_SIMD_SSE3)
 	if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
 	if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
 		add_compile_options(-msse3)
 		add_compile_options(-msse3)
 	elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
 	elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
 		add_compile_options(/QxSSE3)
 		add_compile_options(/QxSSE3)
 	elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
 	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()
 	endif()
 	message(STATUS "GLM: SSE3 instruction set")
 	message(STATUS "GLM: SSE3 instruction set")