zlib-ng/functable.c
yintong 10b51fa592
Some checks failed
Static Analysis / GCC (push) Has been cancelled
Static Analysis / Clang (push) Has been cancelled
CMake / ${{ matrix.name }} (${{ github.repository != 'zlib-ng/zlib-ng' && '-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DZLIB_COMPAT=ON' || '-GNinja -DWITH_SANITIZER=Memory' }} -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON, ${{ github.repository == … (push) Has been cancelled
CMake / ${{ matrix.name }} (${{ github.repository != 'zlib-ng/zlib-ng' && '-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake' || '' }} -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Undefined, ${{ github.repository == 'zlib-ng/zlib-ng' && … (push) Has been cancelled
CMake / ${{ matrix.name }} (-A ARM,version=10.0.22621.0, cl, Windows MSVC ARM No Test, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-A ARM64, cl, Windows MSVC ARM64 No Test, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_SHARED_LINKER_FLAGS=-m32 -DCMAKE_EXE_LINKER_FLAGS=-m32 -DWITH_BENCHMARKS=ON, ubuntu_gcc_m32, gcc, g++, Ubuntu GCC 32-bit, ubuntu-latest, gcc-multilib g++-multilib) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_OSX_DEPLOYMENT_TARGET=10.10 -DWITH_BENCHMARKS=ON, clang, clang++, -ld_classic, macOS Clang (Target 10.10), macos-13) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_ARMV8=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_aarch64_no_armv8, aarch64-linux-gnu-gcov, Ubuntu GCC AARCH64 No ARMv8 UBSAN, ubuntu-22.04, qemu-user gcc-aarch64-linux-gnu … (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_NEON=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_aarch64_no_neon, aarch64-linux-gnu-gcov, Ubuntu GCC AARCH64 No NEON UBSAN, ubuntu-22.04, qemu-user gcc-aarch64-linux-gnu g++… (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_aarch64_compat_no_opt, aarch64-linux-gnu-gcov, Ubuntu GCC AARCH64 Compat No Opt … (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_armsf_compat_no_opt, arm-linux-gnueabi-gcov, Ubuntu GCC ARM SF Compat No Opt UBSAN, … (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_armhf_compat_no_opt, arm-linux-gnueabihf-gcov, Ubuntu GCC ARM HF Compat No Opt UBS… (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-i686.cmake, ubuntu_gcc_mingw_i686, i686-w64-mingw32-gcov-posix, -static, Ubuntu MinGW i686, ubuntu-22.04, wine wine32 gcc-mingw-w64-i686 g++-mingw-w64-i686 libpcre2-8-0=10.39-3ubuntu0.1 l… (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-x86_64.cmake -DWITH_BENCHMARKS=ON, ubuntu_gcc_mingw_x86_64, -Wno-unused-parameter, x86_64-w64-mingw32-gcov-posix, -static, Ubuntu MinGW x86_64, ubuntu-latest, wine wine64 gcc-mingw-w64 g+… (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mips.cmake, ubuntu_gcc_mips, mips-linux-gnu-gcov, Ubuntu GCC MIPS, ubuntu-latest, qemu-user crossbuild-essential-mips) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mips64.cmake -DWITH_BENCHMARKS=ON, ubuntu_gcc_mips64, mips64-linux-gnuabi64-gcov, Ubuntu GCC MIPS64, ubuntu-latest, qemu-user crossbuild-essential-mips64) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake -DWITH_POWER8=OFF, ubuntu_gcc_ppc_no_power8, powerpc-linux-gnu-gcov, Ubuntu GCC PPC No Power8, ubuntu-latest, qemu-user crossbuild-essential-powerpc) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake, ubuntu_gcc_ppc, powerpc-linux-gnu-gcov, Ubuntu GCC PPC, ubuntu-latest, qemu-user crossbuild-essential-powerpc) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64-clang.cmake, Ubuntu Clang PPC64 Power9, ubuntu-latest, qemu-user clang binutils-powerpc64-linux-gnu libgcc-11-dev-ppc64-cross libc-dev-ppc64-cross libstdc++-11-dev-ppc64-cross) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64-power9.cmake, ubuntu_gcc_ppc64_power9, powerpc64-linux-gnu-gcov, -static, Ubuntu GCC PPC64 Power9, ubuntu-latest, qemu-user gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc-dev-pp… (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64.cmake -DWITH_BENCHMARKS=ON, ubuntu_gcc_ppc64, powerpc64-linux-gnu-gcov, -static, Ubuntu GCC PPC64, ubuntu-latest, qemu-user gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc-dev-pp… (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le-clang.cmake, Ubuntu Clang PPC64LE Power9, ubuntu-latest, qemu-user crossbuild-essential-ppc64el) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le-power9.cmake -DWITH_POWER8=OFF -DWITH_POWER9=OFF, ubuntu_gcc_ppc64le_novsx, powerpc64le-linux-gnu-gcov, Ubuntu GCC PPC64LE No VSX, ubuntu-latest, qemu-user crossbuild-essential-ppc6… (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le-power9.cmake, ubuntu_gcc_ppc64le_power9, powerpc64le-linux-gnu-gcov, Ubuntu GCC PPC64LE Power9, ubuntu-latest, qemu-user crossbuild-essential-ppc64el) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-riscv-clang.cmake, Ubuntu Clang RISC-V, ubuntu-latest, qemu-user crossbuild-essential-riscv64) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-riscv.cmake -DWITH_BENCHMARKS=ON, ubuntu_gcc_riscv64, riscv64-linux-gnu-gcov, Ubuntu GCC RISC-V, ubuntu-latest, qemu-user crossbuild-essential-riscv64) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sparc64.cmake, ubuntu_gcc_sparc64, sparc64-linux-gnu-gcov, -static, Ubuntu GCC SPARC64, ubuntu-latest, qemu-user gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc-dev-sparc64-cross) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DNOT_TWEAK_COMPILER, -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Address, ubuntu_gcc_compat_no_opt, gcc, g++, Ubuntu GCC Compat No Opt ASAN, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DUSE_MMAP, ubuntu_clang_mmap, clang-15, clang++-15, llvm-cov-15 gcov, Ubuntu Clang Memory Map, ubuntu-latest, clang-15 llvm-15 llvm-15-tools) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_AVX2=OFF -DWITH_AVX512=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_sse42, gcc, g++, Ubuntu GCC SSE4.2 UBSAN, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_CHORBA=OFF, ubuntu_gcc_no_chorba, gcc, g++, Ubuntu GCC No Chorba, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_INFLATE_ALLOW_INVALID_DIST=ON, ubuntu_clang_inflate_allow_invalid_dist, clang-15, clang++-15, llvm-cov-15 gcov, Ubuntu Clang Inflate Allow Invalid Dist, ubuntu-latest, clang-15 llvm-15 llvm-15-tools) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_INFLATE_STRICT=ON, ubuntu_clang_inflate_strict, clang-15, clang++-15, llvm-cov-15 gcov, Ubuntu Clang Inflate Strict, ubuntu-latest, clang-15 llvm-15 llvm-15-tools) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE="-mavx -mpclmul", ubuntu_gcc_native_inst_avx, gcc, g++, Ubuntu GCC Native Instructions (AVX), ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_NATIVE_INSTRUCTIONS=ON, clang, clang++, macOS Clang Native Instructions (ARM64), macos-14) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_NATIVE_INSTRUCTIONS=ON, ubuntu_gcc_native_inst, gcc, g++, Ubuntu GCC Native Instructions, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_OPTIM=OFF -DHAVE_BUILTIN_CTZLL=OFF -DHAVE_BUILTIN_CTZ=OFF, ubuntu_gcc_no_ctz, gcc, g++, Ubuntu GCC No CTZ, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_OPTIM=OFF -DHAVE_BUILTIN_CTZLL=OFF, ubuntu_gcc_no_ctzll, gcc, g++, Ubuntu GCC No CTZLL, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_PCLMULQDQ=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_no_pclmulqdq, gcc, g++, Ubuntu GCC No PCLMULQDQ UBSAN, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_REDUCED_MEM=ON, ubuntu_clang_reduced_mem, clang-15, clang++-15, llvm-cov-15 gcov, Ubuntu Clang Reduced Memory, ubuntu-latest, clang-15 llvm-15 llvm-15-tools) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_SANITIZER=Address -DWITH_BENCHMARKS=ON, ubuntu_gcc, gcc, g++, -Wno-maybe-uninitialized, Ubuntu GCC ASAN, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_SANITIZER=Address, macos_clang, clang, clang++, macOS Clang ASAN, macos-13) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_SANITIZER=Address, macos_clang_arm64, clang, clang++, macOS Clang ASAN (ARM64), macos-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_SANITIZER=Undefined, macos_gcc, gcc-10, g++-10, gcov-10, -ld_classic, macOS GCC UBSAN, macos-13, gcc@10) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_SANITIZER=Undefined, macos_gcc_arm64, gcc-13, g++-13, gcov-13, macOS GCC UBSAN (ARM64), macos-latest, gcc@13) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_SSE42=OFF -DWITH_AVX2=OFF -DWITH_AVX512=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_ssse3, gcc, g++, Ubuntu GCC SSSE3 UBSAN, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DWITH_SSSE3=OFF -DWITH_SSE42=OFF -DWITH_AVX2=OFF -DWITH_AVX512=OFF -DWITH_SANITIZER=Undefined, ubuntu_gcc_sse2, gcc, g++, Ubuntu GCC SSE2 UBSAN, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DZLIB_COMPAT=ON -DZLIB_SYMBOL_PREFIX=zTest_, ubuntu_gcc_compat_sprefix, gcc, g++, Ubuntu GCC Compat Symbol Prefix, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-DZLIB_SYMBOL_PREFIX=zTest_, ubuntu_gcc_sprefix, gcc, g++, Ubuntu GCC Symbol Prefix, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 16 2019" -A Win32 -T v140, cl, Windows MSVC 2019 v140 Win32, windows-2019) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 16 2019" -A Win32 -T v141, cl, Windows MSVC 2019 v141 Win32, windows-2019) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 16 2019" -A x64 -T v140, cl, Windows MSVC 2019 v140 Win64, windows-2019) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 16 2019" -A x64 -T v141, cl, Windows MSVC 2019 v141 Win64, windows-2019) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 17 2022" -A Win32 -T v142, cl, Windows MSVC 2022 v142 Win32, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 17 2022" -A Win32 -T v143, cl, Windows MSVC 2022 v143 Win32, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 17 2022" -A x64 -T v142, cl, Windows MSVC 2022 v142 Win64, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 17 2022" -A x64 -T v143 -DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE=/arch:AVX, cl, Windows MSVC 2022 v143 Win64 Native Instructions (AVX), windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G "Visual Studio 17 2022" -A x64 -T v143, cl, Windows MSVC 2022 v143 Win64, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G Ninja -DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE="-mavx -mpclmul", gcc, g++, Windows GCC Native Instructions (AVX), windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G Ninja -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF, win64_gcc_compat_no_opt, gcc, g++, Windows GCC Compat No Opt, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-G Ninja, win64_gcc, gcc, g++, Windows GCC, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-GNinja -DWITH_SANITIZER=Memory, clang-15, clang++-15, llvm-cov-15 gcov, use_sigaltstack=0, Ubuntu Clang MSAN, ubuntu-latest, ninja-build clang-15 llvm-15-tools libclang-rt-15-dev) (push) Has been cancelled
CMake / ${{ matrix.name }} (-O1, -DWITH_SANITIZER=Undefined, ubuntu_gcc_o1, gcc, g++, Ubuntu GCC -O1 UBSAN, ubuntu-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-T ClangCl -A Win32, Windows ClangCl Win32, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-T ClangCl -A x64 -DWITH_NATIVE_INSTRUCTIONS=ON -DNATIVE_ARCH_OVERRIDE="-mavx -mpclmul", Windows ClangCl Win64 Native Instructions (AVX), windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-T ClangCl -A x64, Windows ClangCl Win64, windows-latest) (push) Has been cancelled
CMake / ${{ matrix.name }} (-mcpu=power8, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake -DWITH_GTEST=OFF, ubuntu_gcc_ppc64le, -mcpu=power8, powerpc64le-linux-gnu-gcov, Ubuntu GCC PPC64LE, ubuntu-latest, qemu-user crossbuild-essential-ppc64el) (push) Has been cancelled
CMake / ${{ matrix.name }} (../build, ../zlib-ng, -O3, ubuntu_gcc_osb, gcc, g++, Ubuntu GCC -O3 OSB, ubuntu-latest, true) (push) Has been cancelled
CMake / ${{ matrix.name }} (../build, ../zlib-ng/test/add-subdirectory-project, gcc, g++, Ubuntu GCC -O3 OSB add_subdirectory, ubuntu-latest, true) (push) Has been cancelled
CMake / ${{ matrix.name }} (Debug, ubuntu_clang_debug, clang-15, clang++-15, llvm-cov-15 gcov, Ubuntu Clang Debug, ubuntu-latest, clang-15 llvm-15 llvm-15-tools) (push) Has been cancelled
CMake / ${{ matrix.name }} (ON, -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld -Wl,--no-undefined-version" -DZLIBNG_ENABLE_TESTS=OFF -DZLIB_COMPAT=ON, clang-15, clang++-15, Ubuntu Clang Undefined Symbols Compat, ubuntu-latest, clang-15 llvm-15 lld) (push) Has been cancelled
CMake / ${{ matrix.name }} (ON, -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld -Wl,--no-undefined-version" -DZLIBNG_ENABLE_TESTS=OFF, clang-15, clang++-15, Ubuntu Clang Undefined Symbols, ubuntu-latest, clang-15 llvm-15 lld) (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, ${{ github.repository != 'zlib-ng/zlib-ng' && '-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake' || '' }} -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Address -DWITH_BENCHMARKS=ON, ${{ github.… (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_SANITIZER=Address -DWITH_BENCHMARKS=ON, ubuntu_gcc_aarch64, aarch64-linux-gnu-gcov, Ubuntu GCC AARCH64 ASAN, ubuntu-22.04, qemu-user gcc-aarch64-linux-gnu g… (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DWITH_SANITIZER=Address, ubuntu_gcc_armsf, arm-linux-gnueabi-gcov, Ubuntu GCC ARM SF ASAN, ubuntu-latest, qemu-user crossbuild-essential-armel) (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_ARMV8=OFF -DWITH_SANITIZER=Address, ubuntu_gcc_armhf_no_armv8, arm-linux-gnueabihf-gcov, Ubuntu GCC ARM HF No ARMv8 ASAN, ubuntu-latest, qemu-user crossbuild-… (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_NEON=OFF -DWITH_SANITIZER=Address, ubuntu_gcc_armhf_no_neon, arm-linux-gnueabihf-gcov, Ubuntu GCC ARM HF No NEON ASAN, ubuntu-latest, qemu-user crossbuild-ess… (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_SANITIZER=Address -DWITH_BENCHMARKS=ON, ubuntu_gcc_armhf, -Wno-psabi -Wno-maybe-uninitialized, arm-linux-gnueabihf-gcov, Ubuntu GCC ARM HF ASAN, ubuntu-latest… (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_CRC32_VX=OFF -DWITH_SANITIZER=Address, ubuntu_gcc_s390x_no_crc32, s390x-linux-gnu-gcov, -static, Ubuntu GCC S390X No vectorized CRC32 ASAN, ubuntu-latest, qem… (push) Has been cancelled
CMake / ${{ matrix.name }} (detect_leaks=0, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_SANITIZER=Address -DWITH_BENCHMARKS=ON, ubuntu_gcc_s390x, s390x-linux-gnu-gcov, -static, Ubuntu GCC S390X ASAN, ubuntu-latest, qemu-user crossbuild-essential-… (push) Has been cancelled
CMake / ${{ matrix.name }} (ubuntu_clang, clang-15, clang++-15, llvm-cov-15 gcov, Ubuntu Clang, ubuntu-latest, clang-15 llvm-15 llvm-15-tools) (push) Has been cancelled
CMake / ${{ matrix.name }} (wasm32, -DCMAKE_TOOLCHAIN_FILE=${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_C_COMPILER_TARGET=wasm32 -DCMAKE_CROSSCOMPILING_EMULATOR=${EMSDK_NODE} -DZLIB_COMPAT=ON, Ubuntu Emscripten WASM32, ubuntu-la… (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
Configure / ${{ matrix.name }} (${{ github.repository != 'zlib-ng/zlib-ng' && '-static' || '' }}, ${{ github.repository != 'zlib-ng/zlib-ng' && 's390x-linux-gnu' || '' }}, ${{ github.repository == 'zlib-ng/zlib-ng' && 'gcc' || 's390x-linux-gnu-gcc' }}, --warn --s… (push) Has been cancelled
Configure / ${{ matrix.name }} (${{ github.repository != 'zlib-ng/zlib-ng' && '-static' || '' }}, ${{ github.repository != 'zlib-ng/zlib-ng' && 's390x-linux-gnu' || '' }}, ${{ github.repository == 'zlib-ng/zlib-ng' && 'gcc' || 's390x-linux-gnu-gcc' }}, --warn --z… (push) Has been cancelled
Configure / ${{ matrix.name }} (-static, powerpc-linux-gnu, powerpc-linux-gnu-gcc, --warn --static, -static, Ubuntu GCC PPC, ubuntu-latest, qemu-user gcc-powerpc-linux-gnu libc-dev-powerpc-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (-static, powerpc-linux-gnu, powerpc64-linux-gnu-gcc, --warn --static, -static, Ubuntu GCC PPC64, ubuntu-latest, qemu-user gcc-powerpc64-linux-gnu libc-dev-ppc64-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (-static, s390x-linux-gnu, s390x-linux-gnu-gcc, --warn --static --without-crc32-vx, -static, Ubuntu GCC S390X No vectorized CRC32, ubuntu-latest, qemu-user gcc-s390x-linux-gnu libc-dev-s390x-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (-static, s390x-linux-gnu, s390x-linux-gnu-gcc, --warn --static, -static, Ubuntu GCC S390X, ubuntu-latest, qemu-user gcc-s390x-linux-gnu libc-dev-s390x-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (-static, wasm32, --warn --zlib-compat --static, emconfigure, node, -static, Ubuntu Emscripten WASM32, ubuntu-latest) (push) Has been cancelled
Configure / ${{ matrix.name }} (-std=gnu11, gcc-11, --sprefix=zTest_, macOS GCC Symbol Prefix (ARM64), macos-latest, gcc@11) (push) Has been cancelled
Configure / ${{ matrix.name }} (-std=gnu11, gcc-11, --warn, macOS GCC (ARM64), macos-latest, gcc@11) (push) Has been cancelled
Configure / ${{ matrix.name }} (-std=gnu11, gcc-11, --zlib-compat --sprefix=zTest_, macOS GCC Symbol Prefix & Compat (ARM64), macos-latest, gcc@11) (push) Has been cancelled
Configure / ${{ matrix.name }} (../build, ../zlib-ng, gcc, --warn, Ubuntu GCC OSB, ubuntu-latest) (push) Has been cancelled
Configure / ${{ matrix.name }} (aarch64-linux-gnu, aarch64-linux-gnu-gcc, --warn --without-armv8, Ubuntu GCC AARCH64 No ARMv8, ubuntu-latest, qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (aarch64-linux-gnu, aarch64-linux-gnu-gcc, --warn --without-neon, Ubuntu GCC AARCH64 No NEON, ubuntu-latest, qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (aarch64-linux-gnu, aarch64-linux-gnu-gcc, --warn --zlib-compat --without-optimizations --without-new-strategies, Ubuntu GCC AARCH64 Compat No Opt, ubuntu-latest, qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (aarch64-linux-gnu, aarch64-linux-gnu-gcc, --warn, Ubuntu GCC AARCH64, ubuntu-latest, qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (arm-linux-gnueabi, arm-linux-gnueabi-gcc, --warn --zlib-compat --without-optimizations --without-new-strategies, Ubuntu GCC ARM SF Compat No Opt, ubuntu-latest, qemu-user gcc-arm-linux-gnueabi libc-dev-armel-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (arm-linux-gnueabi, arm-linux-gnueabi-gcc, --warn, Ubuntu GCC ARM SF, ubuntu-latest, qemu-user gcc-arm-linux-gnueabi libc-dev-armel-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (arm-linux-gnueabihf, arm-linux-gnueabihf-gcc, --warn --without-armv8, Ubuntu GCC ARM HF No ARMv8, ubuntu-latest, qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (arm-linux-gnueabihf, arm-linux-gnueabihf-gcc, --warn --without-neon, Ubuntu GCC ARM HF No NEON, ubuntu-latest, qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (arm-linux-gnueabihf, arm-linux-gnueabihf-gcc, --warn --zlib-compat --without-optimizations --without-new-strategies, Ubuntu GCC ARM HF Compat No Opt, ubuntu-latest, qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (arm-linux-gnueabihf, arm-linux-gnueabihf-gcc, --warn, Ubuntu GCC ARM HF, ubuntu-latest, qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (gcc, --warn --zlib-compat --without-optimizations --without-new-strategies, Ubuntu GCC Compat No Opt, ubuntu-latest) (push) Has been cancelled
Configure / ${{ matrix.name }} (gcc, --warn, Ubuntu GCC, ubuntu-latest) (push) Has been cancelled
Configure / ${{ matrix.name }} (gcc-11, --sprefix=zTest_, macOS GCC Symbol Prefix, macos-13, gcc@11) (push) Has been cancelled
Configure / ${{ matrix.name }} (gcc-11, --warn, macOS GCC, macos-13, gcc@11) (push) Has been cancelled
Configure / ${{ matrix.name }} (gcc-11, --zlib-compat --sprefix=zTest_, macOS GCC Symbol Prefix & Compat, macos-13, gcc@11) (push) Has been cancelled
Configure / ${{ matrix.name }} (mips-linux-gnu, mips-linux-gnu-gcc, --warn, Ubuntu GCC MIPS, ubuntu-latest, qemu-user gcc-mips-linux-gnu libc-dev-mips-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (mips64-linux-gnuabi64, mips64-linux-gnuabi64-gcc, --warn, Ubuntu GCC MIPS64, ubuntu-latest, qemu-user gcc-mips64-linux-gnuabi64 libc-dev-mips64-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (powerpc-linux-gnu, powerpc-linux-gnu-gcc, --warn --without-power8, Ubuntu GCC PPC No Power8, ubuntu-latest, qemu-user gcc-powerpc-linux-gnu libc-dev-powerpc-cross) (push) Has been cancelled
Configure / ${{ matrix.name }} (powerpc64le-linux-gnu, powerpc64le-linux-gnu-gcc, --warn, Ubuntu GCC PPC64LE, ubuntu-latest, qemu-user gcc-powerpc64le-linux-gnu libc-dev-ppc64el-cross) (push) Has been cancelled
OSS-Fuzz / Fuzzing (push) Has been cancelled
Libpng / Ubuntu Clang (push) Has been cancelled
Link / Link zlib (push) Has been cancelled
Link / Link zlib-ng compat (push) Has been cancelled
Pigz / ${{ matrix.name }} (-DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchain-aarch64.cmake, ubuntu_gcc_pigz_aarch64, Ubuntu GCC AARCH64, ubuntu-latest, qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross) (push) Has been cancelled
Pigz / ${{ matrix.name }} (-DWITH_OPTIM=OFF, ubuntu_clang_pigz_no_optim, clang, llvm-cov-15 gcov, Ubuntu Clang No Optim, ubuntu-latest, llvm-15 llvm-15-tools) (push) Has been cancelled
Pigz / ${{ matrix.name }} (-DWITH_THREADS=OFF -DPIGZ_VERSION=v2.6, ubuntu_clang_pigz_no_threads, clang, llvm-cov-15 gcov, Ubuntu Clang No Threads, ubuntu-latest, llvm-15 llvm-15-tools) (push) Has been cancelled
Pigz / ${{ matrix.name }} (-DZLIB_SYMBOL_PREFIX=zTest_, ubuntu_gcc_pigz, gcc, Ubuntu GCC Symbol Prefix, ubuntu-latest) (push) Has been cancelled
Pigz / ${{ matrix.name }} (ubuntu_clang_pigz, clang, llvm-cov-15 gcov, Ubuntu Clang, ubuntu-latest, llvm-15 llvm-15-tools) (push) Has been cancelled
Pigz / ${{ matrix.name }} (ubuntu_gcc_pigz, gcc, Ubuntu GCC, ubuntu-latest) (push) Has been cancelled
Package Check / ${{ matrix.name }} (-DZLIB_SYMBOL_PREFIX=zTest_, clang, --sprefix=zTest_, clang++, macOS Clang Symbol Prefix, macOS-latest) (push) Has been cancelled
Package Check / ${{ matrix.name }} (-m32, -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32, gcc, g++, -m32, -m32, Ubuntu GCC -m32, ubuntu-latest, gcc-multilib g++-multilib) (push) Has been cancelled
Package Check / ${{ matrix.name }} (aarch64-linux-gnu, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake, aarch64-linux-gnu-gcc, aarch64-linux-gnu-g++, Ubuntu GCC AARCH64, ubuntu-latest, qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross) (push) Has been cancelled
Package Check / ${{ matrix.name }} (arm-linux-gnueabihf, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake, arm-linux-gnueabihf-gcc, arm-linux-gnueabihf-g++, Ubuntu GCC ARM HF, ubuntu-latest, qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-dev-armhf-c… (push) Has been cancelled
Package Check / ${{ matrix.name }} (clang, clang++, macOS Clang, macOS-latest) (push) Has been cancelled
Package Check / ${{ matrix.name }} (gcc, g++, Ubuntu GCC, ubuntu-latest) (push) Has been cancelled
Package Check / ${{ matrix.name }} (mips-linux-gnu, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mips.cmake, mips-linux-gnu-gcc, mips-linux-gnu-g++, Ubuntu GCC MIPS, ubuntu-latest, qemu-user gcc-mips-linux-gnu g++-mips-linux-gnu libc6-dev-mips-cross) (push) Has been cancelled
Package Check / ${{ matrix.name }} (mips64-linux-gnuabi64, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mips64.cmake, mips64-linux-gnuabi64-gcc, mips64-linux-gnuabi64-g++, Ubuntu GCC MIPS64, ubuntu-latest, qemu-user gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 libc6-… (push) Has been cancelled
Package Check / ${{ matrix.name }} (powerpc-linux-gnu, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake, powerpc-linux-gnu-gcc, powerpc-linux-gnu-g++, Ubuntu GCC PPC, ubuntu-latest, qemu-user gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-dev-powerpc-cross) (push) Has been cancelled
Package Check / ${{ matrix.name }} (powerpc64le-linux-gnu, -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake, powerpc64le-linux-gnu-gcc, powerpc64le-linux-gnu-g++, Ubuntu GCC PPC64LE, ubuntu-latest, qemu-user gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu … (push) Has been cancelled
CMake / Upload Coverage Reports (push) Has been cancelled
Pigz / Upload Coverage Reports (push) Has been cancelled
riscv: add crc32 optimization using zbc extension
2025-04-27 18:23:50 +02:00

388 lines
11 KiB
C

/* functable.c -- Choose relevant optimized functions at runtime
* Copyright (C) 2017 Hans Kristian Rosbach
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#ifndef DISABLE_RUNTIME_CPU_DETECTION
#include "zbuild.h"
#if defined(_MSC_VER)
# include <intrin.h>
#endif
#include "functable.h"
#include "cpu_features.h"
#include "arch_functions.h"
/* Platform has pointer size atomic store */
#if defined(__GNUC__) || defined(__clang__)
# define FUNCTABLE_ASSIGN(VAR, FUNC_NAME) \
__atomic_store(&(functable.FUNC_NAME), &(VAR.FUNC_NAME), __ATOMIC_SEQ_CST)
# define FUNCTABLE_BARRIER() __atomic_thread_fence(__ATOMIC_SEQ_CST)
#elif defined(_MSC_VER)
# define FUNCTABLE_ASSIGN(VAR, FUNC_NAME) \
_InterlockedExchangePointer((void * volatile *)&(functable.FUNC_NAME), (void *)(VAR.FUNC_NAME))
# if defined(_M_ARM) || defined(_M_ARM64)
# define FUNCTABLE_BARRIER() do { \
_ReadWriteBarrier(); \
__dmb(0xB); /* _ARM_BARRIER_ISH */ \
_ReadWriteBarrier(); \
} while (0)
# else
# define FUNCTABLE_BARRIER() _ReadWriteBarrier()
# endif
#else
# warning Unable to detect atomic intrinsic support.
# define FUNCTABLE_ASSIGN(VAR, FUNC_NAME) \
*((void * volatile *)&(functable.FUNC_NAME)) = (void *)(VAR.FUNC_NAME)
# define FUNCTABLE_BARRIER() do { /* Empty */ } while (0)
#endif
static void force_init_empty(void) {
// empty
}
static void init_functable(void) {
struct functable_s ft;
struct cpu_features cf;
cpu_check_features(&cf);
// Generic code
ft.force_init = &force_init_empty;
ft.adler32 = &adler32_c;
ft.adler32_fold_copy = &adler32_fold_copy_c;
ft.chunkmemset_safe = &chunkmemset_safe_c;
ft.chunksize = &chunksize_c;
ft.crc32 = &crc32_c;
ft.crc32_fold = &crc32_fold_c;
ft.crc32_fold_copy = &crc32_fold_copy_c;
ft.crc32_fold_final = &crc32_fold_final_c;
ft.crc32_fold_reset = &crc32_fold_reset_c;
ft.inflate_fast = &inflate_fast_c;
ft.slide_hash = &slide_hash_c;
ft.longest_match = &longest_match_c;
ft.longest_match_slow = &longest_match_slow_c;
ft.compare256 = &compare256_c;
// Select arch-optimized functions
// X86 - SSE2
#ifdef X86_SSE2
# if !defined(__x86_64__) && !defined(_M_X64) && !defined(X86_NOCHECK_SSE2)
if (cf.x86.has_sse2)
# endif
{
ft.chunkmemset_safe = &chunkmemset_safe_sse2;
ft.chunksize = &chunksize_sse2;
#if !defined(WITHOUT_CHORBA) && !defined(NO_CHORBA_SSE)
ft.crc32 = &crc32_chorba_sse2;
#endif
ft.inflate_fast = &inflate_fast_sse2;
ft.slide_hash = &slide_hash_sse2;
# ifdef HAVE_BUILTIN_CTZ
ft.compare256 = &compare256_sse2;
ft.longest_match = &longest_match_sse2;
ft.longest_match_slow = &longest_match_slow_sse2;
# endif
}
#endif
// X86 - SSSE3
#ifdef X86_SSSE3
if (cf.x86.has_ssse3) {
ft.adler32 = &adler32_ssse3;
ft.chunkmemset_safe = &chunkmemset_safe_ssse3;
ft.inflate_fast = &inflate_fast_ssse3;
}
#endif
// X86 - SSE4.1
#ifdef X86_SSE41
if (cf.x86.has_sse41) {
#if !defined(WITHOUT_CHORBA) && !defined(NO_CHORBA_SSE)
ft.crc32 = &crc32_chorba_sse41;
#endif
}
#endif
// X86 - SSE4.2
#ifdef X86_SSE42
if (cf.x86.has_sse42) {
ft.adler32_fold_copy = &adler32_fold_copy_sse42;
}
#endif
// X86 - PCLMUL
#ifdef X86_PCLMULQDQ_CRC
if (cf.x86.has_pclmulqdq) {
ft.crc32 = &crc32_pclmulqdq;
ft.crc32_fold = &crc32_fold_pclmulqdq;
ft.crc32_fold_copy = &crc32_fold_pclmulqdq_copy;
ft.crc32_fold_final = &crc32_fold_pclmulqdq_final;
ft.crc32_fold_reset = &crc32_fold_pclmulqdq_reset;
}
#endif
// X86 - AVX
#ifdef X86_AVX2
/* BMI2 support is all but implicit with AVX2 but let's sanity check this just in case. Enabling BMI2 allows for
* flagless shifts, resulting in fewer flag stalls for the pipeline, and allows us to set destination registers
* for the shift results as an operand, eliminating several register-register moves when the original value needs
* to remain intact. They also allow for a count operand that isn't the CL register, avoiding contention there */
if (cf.x86.has_avx2 && cf.x86.has_bmi2) {
ft.adler32 = &adler32_avx2;
ft.adler32_fold_copy = &adler32_fold_copy_avx2;
ft.chunkmemset_safe = &chunkmemset_safe_avx2;
ft.chunksize = &chunksize_avx2;
ft.inflate_fast = &inflate_fast_avx2;
ft.slide_hash = &slide_hash_avx2;
# ifdef HAVE_BUILTIN_CTZ
ft.compare256 = &compare256_avx2;
ft.longest_match = &longest_match_avx2;
ft.longest_match_slow = &longest_match_slow_avx2;
# endif
}
#endif
// X86 - AVX512 (F,DQ,BW,Vl)
#ifdef X86_AVX512
if (cf.x86.has_avx512_common) {
ft.adler32 = &adler32_avx512;
ft.adler32_fold_copy = &adler32_fold_copy_avx512;
ft.chunkmemset_safe = &chunkmemset_safe_avx512;
ft.chunksize = &chunksize_avx512;
ft.inflate_fast = &inflate_fast_avx512;
# ifdef HAVE_BUILTIN_CTZLL
ft.compare256 = &compare256_avx512;
ft.longest_match = &longest_match_avx512;
ft.longest_match_slow = &longest_match_slow_avx512;
# endif
}
#endif
#ifdef X86_AVX512VNNI
if (cf.x86.has_avx512vnni) {
ft.adler32 = &adler32_avx512_vnni;
ft.adler32_fold_copy = &adler32_fold_copy_avx512_vnni;
}
#endif
// X86 - VPCLMULQDQ
#ifdef X86_VPCLMULQDQ_CRC
if (cf.x86.has_pclmulqdq && cf.x86.has_avx512_common && cf.x86.has_vpclmulqdq) {
ft.crc32 = &crc32_vpclmulqdq;
ft.crc32_fold = &crc32_fold_vpclmulqdq;
ft.crc32_fold_copy = &crc32_fold_vpclmulqdq_copy;
ft.crc32_fold_final = &crc32_fold_vpclmulqdq_final;
ft.crc32_fold_reset = &crc32_fold_vpclmulqdq_reset;
}
#endif
// ARM - SIMD
#ifdef ARM_SIMD
# ifndef ARM_NOCHECK_SIMD
if (cf.arm.has_simd)
# endif
{
ft.slide_hash = &slide_hash_armv6;
}
#endif
// ARM - NEON
#ifdef ARM_NEON
# ifndef ARM_NOCHECK_NEON
if (cf.arm.has_neon)
# endif
{
ft.adler32 = &adler32_neon;
ft.adler32_fold_copy = &adler32_fold_copy_neon;
ft.chunkmemset_safe = &chunkmemset_safe_neon;
ft.chunksize = &chunksize_neon;
ft.inflate_fast = &inflate_fast_neon;
ft.slide_hash = &slide_hash_neon;
# ifdef HAVE_BUILTIN_CTZLL
ft.compare256 = &compare256_neon;
ft.longest_match = &longest_match_neon;
ft.longest_match_slow = &longest_match_slow_neon;
# endif
}
#endif
// ARM - CRC32
#ifdef ARM_CRC32
if (cf.arm.has_crc32) {
ft.crc32 = &crc32_armv8;
}
#endif
// Power - VMX
#ifdef PPC_VMX
if (cf.power.has_altivec) {
ft.adler32 = &adler32_vmx;
ft.slide_hash = &slide_hash_vmx;
}
#endif
// Power8 - VSX
#ifdef POWER8_VSX
if (cf.power.has_arch_2_07) {
ft.adler32 = &adler32_power8;
ft.chunkmemset_safe = &chunkmemset_safe_power8;
ft.chunksize = &chunksize_power8;
ft.inflate_fast = &inflate_fast_power8;
ft.slide_hash = &slide_hash_power8;
}
#endif
#ifdef POWER8_VSX_CRC32
if (cf.power.has_arch_2_07)
ft.crc32 = &crc32_power8;
#endif
// Power9
#ifdef POWER9
if (cf.power.has_arch_3_00) {
ft.compare256 = &compare256_power9;
ft.longest_match = &longest_match_power9;
ft.longest_match_slow = &longest_match_slow_power9;
}
#endif
// RISCV - RVV
#ifdef RISCV_RVV
if (cf.riscv.has_rvv) {
ft.adler32 = &adler32_rvv;
ft.adler32_fold_copy = &adler32_fold_copy_rvv;
ft.chunkmemset_safe = &chunkmemset_safe_rvv;
ft.chunksize = &chunksize_rvv;
ft.compare256 = &compare256_rvv;
ft.inflate_fast = &inflate_fast_rvv;
ft.longest_match = &longest_match_rvv;
ft.longest_match_slow = &longest_match_slow_rvv;
ft.slide_hash = &slide_hash_rvv;
}
#endif
// RISCV - ZBC
#ifdef RISCV_CRC32_ZBC
if (cf.riscv.has_zbc) {
ft.crc32 = &crc32_riscv64_zbc;
}
#endif
// S390
#ifdef S390_CRC32_VX
if (cf.s390.has_vx)
ft.crc32 = crc32_s390_vx;
#endif
// Assign function pointers individually for atomic operation
FUNCTABLE_ASSIGN(ft, force_init);
FUNCTABLE_ASSIGN(ft, adler32);
FUNCTABLE_ASSIGN(ft, adler32_fold_copy);
FUNCTABLE_ASSIGN(ft, chunkmemset_safe);
FUNCTABLE_ASSIGN(ft, chunksize);
FUNCTABLE_ASSIGN(ft, compare256);
FUNCTABLE_ASSIGN(ft, crc32);
FUNCTABLE_ASSIGN(ft, crc32_fold);
FUNCTABLE_ASSIGN(ft, crc32_fold_copy);
FUNCTABLE_ASSIGN(ft, crc32_fold_final);
FUNCTABLE_ASSIGN(ft, crc32_fold_reset);
FUNCTABLE_ASSIGN(ft, inflate_fast);
FUNCTABLE_ASSIGN(ft, longest_match);
FUNCTABLE_ASSIGN(ft, longest_match_slow);
FUNCTABLE_ASSIGN(ft, slide_hash);
// Memory barrier for weak memory order CPUs
FUNCTABLE_BARRIER();
}
/* stub functions */
static void force_init_stub(void) {
init_functable();
}
static uint32_t adler32_stub(uint32_t adler, const uint8_t* buf, size_t len) {
init_functable();
return functable.adler32(adler, buf, len);
}
static uint32_t adler32_fold_copy_stub(uint32_t adler, uint8_t* dst, const uint8_t* src, size_t len) {
init_functable();
return functable.adler32_fold_copy(adler, dst, src, len);
}
static uint8_t* chunkmemset_safe_stub(uint8_t* out, uint8_t *from, unsigned len, unsigned left) {
init_functable();
return functable.chunkmemset_safe(out, from, len, left);
}
static uint32_t chunksize_stub(void) {
init_functable();
return functable.chunksize();
}
static uint32_t compare256_stub(const uint8_t* src0, const uint8_t* src1) {
init_functable();
return functable.compare256(src0, src1);
}
static uint32_t crc32_stub(uint32_t crc, const uint8_t* buf, size_t len) {
init_functable();
return functable.crc32(crc, buf, len);
}
static void crc32_fold_stub(crc32_fold* crc, const uint8_t* src, size_t len, uint32_t init_crc) {
init_functable();
functable.crc32_fold(crc, src, len, init_crc);
}
static void crc32_fold_copy_stub(crc32_fold* crc, uint8_t* dst, const uint8_t* src, size_t len) {
init_functable();
functable.crc32_fold_copy(crc, dst, src, len);
}
static uint32_t crc32_fold_final_stub(crc32_fold* crc) {
init_functable();
return functable.crc32_fold_final(crc);
}
static uint32_t crc32_fold_reset_stub(crc32_fold* crc) {
init_functable();
return functable.crc32_fold_reset(crc);
}
static void inflate_fast_stub(PREFIX3(stream) *strm, uint32_t start) {
init_functable();
functable.inflate_fast(strm, start);
}
static uint32_t longest_match_stub(deflate_state* const s, Pos cur_match) {
init_functable();
return functable.longest_match(s, cur_match);
}
static uint32_t longest_match_slow_stub(deflate_state* const s, Pos cur_match) {
init_functable();
return functable.longest_match_slow(s, cur_match);
}
static void slide_hash_stub(deflate_state* s) {
init_functable();
functable.slide_hash(s);
}
/* functable init */
Z_INTERNAL struct functable_s functable = {
force_init_stub,
adler32_stub,
adler32_fold_copy_stub,
chunkmemset_safe_stub,
chunksize_stub,
compare256_stub,
crc32_stub,
crc32_fold_stub,
crc32_fold_copy_stub,
crc32_fold_final_stub,
crc32_fold_reset_stub,
inflate_fast_stub,
longest_match_stub,
longest_match_slow_stub,
slide_hash_stub,
};
#endif