Add options for forcing AVX and AVX2 instructions (#7334)
Summary: This PR is set up to merge into master, but it would be great to get this into a patch release if possible. Pull Request resolved: https://github.com/facebook/rocksdb/pull/7334 Reviewed By: jay-zhuang Differential Revision: D23476624 Pulled By: pdillinger fbshipit-source-id: c6cc02ce06e779e1e174ab0f4748e557d2ce7bc6
This commit is contained in:
parent
61d5a132c9
commit
a09c3cf13e
@ -254,12 +254,30 @@ endif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64")
|
|||||||
|
|
||||||
option(PORTABLE "build a portable binary" OFF)
|
option(PORTABLE "build a portable binary" OFF)
|
||||||
option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
|
option(FORCE_SSE42 "force building with SSE4.2, even when PORTABLE=ON" OFF)
|
||||||
|
option(FORCE_AVX "force building with AVX, even when PORTABLE=ON" OFF)
|
||||||
|
option(FORCE_AVX2 "force building with AVX2, even when PORTABLE=ON" OFF)
|
||||||
if(PORTABLE)
|
if(PORTABLE)
|
||||||
# MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h
|
# MSVC does not need a separate compiler flag to enable SSE4.2; if nmmintrin.h
|
||||||
# is available, it is available by default.
|
# is available, it is available by default.
|
||||||
if(FORCE_SSE42 AND NOT MSVC)
|
if(FORCE_SSE42 AND NOT MSVC)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mpclmul")
|
||||||
endif()
|
endif()
|
||||||
|
if(MSVC)
|
||||||
|
if(FORCE_AVX)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
|
||||||
|
endif()
|
||||||
|
# MSVC automatically enables BMI / lzcnt with AVX2.
|
||||||
|
if(FORCE_AVX2)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(FORCE_AVX)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")
|
||||||
|
endif()
|
||||||
|
if(FORCE_AVX2)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2 -mbmi -mlzcnt")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
|
||||||
|
Loading…
Reference in New Issue
Block a user