diff options
author | Adenilson Cavalcanti <cavalcantii@chromium.org> | 2024-03-14 19:56:39 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-03-14 13:11:17 -0700 |
commit | 24342f69e01ccf34e8fd3ac21edd2b65d2a33267 (patch) | |
tree | 07260c42ef3d6cb1e309a7477fa79576b59b2a74 | |
parent | c5bf1b566e5df14e763507e2ce30cbfebefeeccf (diff) | |
download | zlib-24342f69e01ccf34e8fd3ac21edd2b65d2a33267.tar.gz |
[zlib][riscv] Add rules to enable SIMD optimizations for Arm
The first step to add support for RISCV is to actually proof test the
CMake buildsystem to ensure that the SIMD optimizations are actually
enabled.
Currently we only enable the SIMD optimizations in CMake while building
for x86-64 and this patch will add support for a second architecture
(i.e. Arm), opening the way for a third (RISCV).
Finally, the CPU features detection model on RISCV is similar to Arm
(i.e. calls to getauxval()) instead of simply reading a register (i.e. x86),
so it is helpful to ensure that the code will cover all three
architectures (x86-64, Arm, RISCV).
Bug: 329282661
Change-Id: I4c9774d11c583361ba93e2a9ba2e16e82c483274
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5367582
Reviewed-by: Hans Wennborg <hans@chromium.org>
Commit-Queue: Adenilson Cavalcanti <cavalcantii@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1273004}
NOKEYCHECK=True
GitOrigin-RevId: cbf0d4d5d3bbcdf1bd20e6c11924ada541042647
-rw-r--r-- | CMakeLists.txt | 62 |
1 files changed, 42 insertions, 20 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 394d833..8389cdd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,27 +31,49 @@ if (USE_ZLIB_RABIN_KARP_HASH) add_definitions(-DUSE_ZLIB_RABIN_KARP_ROLLING_HASH) endif() -# TODO(cavalcantii): add support for other OSes (e.g. Android, fuchsia, osx) -# and architectures (e.g. Arm). +# TODO(cavalcantii): add support for other OSes (e.g. Android, Fuchsia, etc) +# and architectures (e.g. RISCV). if (ENABLE_SIMD_OPTIMIZATIONS) - add_definitions(-DINFLATE_CHUNK_SIMD_SSE2) - add_definitions(-DADLER32_SIMD_SSSE3) - add_definitions(-DINFLATE_CHUNK_READ_64LE) - add_definitions(-DCRC32_SIMD_SSE42_PCLMUL) - if (ENABLE_SIMD_AVX512) - add_definitions(-DCRC32_SIMD_AVX512_PCLMUL) - add_compile_options(-mvpclmulqdq -msse2 -mavx512f -mpclmul) - else() - add_compile_options(-msse4.2 -mpclmul) - endif() - add_definitions(-DDEFLATE_SLIDE_HASH_SSE2) - # Required by CPU features detection code. - add_definitions(-DX86_NOT_WINDOWS) - # Apparently some environments (e.g. CentOS) require to explicitly link - # with pthread and that is required by the CPU features detection code. - find_package (Threads REQUIRED) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") + # Apparently some environments (e.g. CentOS) require to explicitly link + # with pthread and that is required by the CPU features detection code. + find_package (Threads REQUIRED) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") + + if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + add_definitions(-DINFLATE_CHUNK_SIMD_SSE2) + add_definitions(-DADLER32_SIMD_SSSE3) + add_definitions(-DINFLATE_CHUNK_READ_64LE) + add_definitions(-DCRC32_SIMD_SSE42_PCLMUL) + if (ENABLE_SIMD_AVX512) + add_definitions(-DCRC32_SIMD_AVX512_PCLMUL) + add_compile_options(-mvpclmulqdq -msse2 -mavx512f -mpclmul) + else() + add_compile_options(-msse4.2 -mpclmul) + endif() + add_definitions(-DDEFLATE_SLIDE_HASH_SSE2) + # Required by CPU features detection code. + add_definitions(-DX86_NOT_WINDOWS) + endif() + + if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") OR + (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")) + add_definitions(-DINFLATE_CHUNK_SIMD_NEON) + add_definitions(-DADLER32_SIMD_NEON) + add_definitions(-DINFLATE_CHUNK_READ_64LE) + add_definitions(-DCRC32_ARMV8_CRC32) + add_definitions(-DDEFLATE_SLIDE_HASH_NEON) + # Required by CPU features detection code. + if (APPLE) + add_definitions(-DARMV8_OS_MACOS) + endif() + + if (UNIX AND NOT APPLE) + add_definitions(-DARMV8_OS_LINUX) + endif() + + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto") + endif() endif() # |