summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdenilson Cavalcanti <cavalcantii@chromium.org>2024-03-14 19:56:39 +0000
committerCopybara-Service <copybara-worker@google.com>2024-03-14 13:11:17 -0700
commit24342f69e01ccf34e8fd3ac21edd2b65d2a33267 (patch)
tree07260c42ef3d6cb1e309a7477fa79576b59b2a74
parentc5bf1b566e5df14e763507e2ce30cbfebefeeccf (diff)
downloadzlib-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.txt62
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()
#