* Adam Stylinski <kungfujesus06@gmail.com>
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+
#ifdef ARM_NEON
-#include "neon_intrins.h"
+
#include "zbuild.h"
#include "adler32_p.h"
+#include "neon_intrins.h"
static const uint16_t ALIGNED_(64) taps[64] = {
64, 63, 62, 61, 60, 59, 58, 57,
+#ifdef ARM_FEATURES
+
#include "zbuild.h"
#include "arm_features.h"
-#ifdef ARM_FEATURES
-
#if defined(HAVE_SYS_AUXV_H)
# include <sys/auxv.h>
# ifdef ARM_ASM_HWCAP
*/
#ifdef ARM_NEON
-#include "neon_intrins.h"
+
#include "zbuild.h"
#include "zmemory.h"
+#include "neon_intrins.h"
#include "arch/generic/chunk_128bit_perm_idx_lut.h"
typedef uint8x16_t chunk_t;
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#if defined(ARM_CRC32)
-#include "acle_intrins.h"
+#ifdef ARM_CRC32
+
#include "zbuild.h"
#include "crc32.h"
+#include "acle_intrins.h"
Z_INTERNAL Z_TARGET_CRC uint32_t crc32_armv8(uint32_t crc, const uint8_t *buf, size_t len) {
uint32_t c = ~crc;
* Uses 3-way parallel scalar CRC + 9 PMULL vector lanes, processing 192 bytes/iter.
*/
-#if defined(ARM_PMULL_EOR3)
+#ifdef ARM_PMULL_EOR3
+
#include "zbuild.h"
#include "zutil.h"
#include "acle_intrins.h"
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#if defined(ARM_SIMD)
-#include "acle_intrins.h"
+#ifdef ARM_SIMD
+
#include "zbuild.h"
#include "deflate.h"
+#include "acle_intrins.h"
/* SIMD version of hash_chain rebase */
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) {
*/
#ifdef ARM_NEON
-#include "neon_intrins.h"
+
#include "zbuild.h"
#include "deflate.h"
+#include "neon_intrins.h"
/* SIMD version of hash_chain rebase */
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) {
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef LOONGARCH_LSX
+
#include "zbuild.h"
#include "adler32_p.h"
-#ifdef LOONGARCH_LSX
-
#include <lsxintrin.h>
#include "lsxintrin_ext.h"
* Copyright (C) 2025 Vladislav Shchapov <vladislav@shchapov.ru>
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#include "zbuild.h"
-#include "zmemory.h"
#ifdef LOONGARCH_LASX
+#include "zbuild.h"
+#include "zmemory.h"
+
#include <lasxintrin.h>
#include "lasxintrin_ext.h"
#include "lsxintrin_ext.h"
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef LOONGARCH_LSX
+
#include "zbuild.h"
#include "zmemory.h"
-#if defined(LOONGARCH_LSX)
#include <lsxintrin.h>
#include "lsxintrin_ext.h"
#include "arch/generic/chunk_128bit_perm_idx_lut.h"
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#if defined(LOONGARCH_CRC)
+#ifdef LOONGARCH_CRC
+
#include "zbuild.h"
#include "crc32.h"
+
#include <stdint.h>
#include <larchintrin.h>
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef LOONGARCH_FEATURES
+
#include "zbuild.h"
#include "loongarch_features.h"
-#ifdef LOONGARCH_FEATURES
-
#include <larchintrin.h>
/*
*
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#include "zbuild.h"
-#include "deflate.h"
#ifdef LOONGARCH_LASX
+#include "zbuild.h"
+#include "deflate.h"
+
#include <lasxintrin.h>
static inline void slide_hash_chain(Pos *table, uint32_t entries, const __m256i wsize) {
*
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#include "zbuild.h"
-#include "deflate.h"
#ifdef LOONGARCH_LSX
+#include "zbuild.h"
+#include "deflate.h"
+
#include <lsxintrin.h>
#include <assert.h>
#ifdef POWER8_VSX
-#include <altivec.h>
#include "zbuild.h"
#include "adler32_p.h"
+#include <altivec.h>
+
/* Vector across sum unsigned int (saturate). */
static inline vector unsigned int vec_sumsu(vector unsigned int __a, vector unsigned int __b) {
__b = vec_sld(__a, __a, 8);
*/
#ifdef PPC_VMX
-#include <altivec.h>
+
#include "zbuild.h"
#include "zendian.h"
#include "adler32_p.h"
+#include <altivec.h>
+
#define vmx_zero() (vec_splat_u32(0))
static inline void vmx_handle_head_or_tail(uint32_t *pair, const uint8_t *buf, size_t len) {
*/
#ifdef POWER8_VSX
-#include <altivec.h>
+
#include "zbuild.h"
#include "zmemory.h"
+#include <altivec.h>
+
typedef vector unsigned char chunk_t;
#define HAVE_CHUNKMEMSET_2
*/
#ifdef POWER9
-#include <altivec.h>
+
#include "zbuild.h"
#include "zmemory.h"
#include "deflate.h"
#include "zendian.h"
+#include <altivec.h>
+
/* Older versions of GCC misimplemented semantics for these bit counting builtins.
* https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=3f30f2d1dbb3228b8468b26239fe60c2974ce2ac */
#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ < 12)
#ifdef POWER8_VSX_CRC32
-#include <altivec.h>
-#include "zendian.h"
#include "zbuild.h"
+#include "zendian.h"
#include "crc32_constants.h"
#include "crc32_braid_tbl.h"
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#if defined(PPC_FEATURES) || defined(POWER_FEATURES)
+
+#include "zbuild.h"
+#include "power_features.h"
+
#ifdef HAVE_SYS_AUXV_H
# include <sys/auxv.h>
#endif
#ifdef __FreeBSD__
# include <machine/cpu.h>
#endif
-#include "zbuild.h"
-#include "power_features.h"
void Z_INTERNAL power_check_features(struct power_cpu_features *features) {
#ifdef PPC_FEATURES
#endif
#endif
}
+
+#endif
#ifndef POWER_INTRINS_H
#define POWER_INTRINS_H
+#include <altivec.h>
+
#if defined (__clang__)
/*
* These stubs fix clang incompatibilities with GCC builtins.
#ifdef RISCV_RVV
-#include <riscv_vector.h>
-#include <stdint.h>
-
#include "zbuild.h"
#include "adler32_p.h"
+#include <riscv_vector.h>
+#include <stdint.h>
+
Z_FORCEINLINE static uint32_t adler32_copy_impl(uint32_t adler, uint8_t* restrict dst, const uint8_t *src, size_t len, int COPY) {
/* split Adler-32 into component sums */
uint32_t sum2 = (adler >> 16) & 0xffff;
#ifdef RISCV_RVV
-#include <riscv_vector.h>
#include "zbuild.h"
+#include <riscv_vector.h>
+
/*
* RISC-V glibc would enable RVV optimized memcpy at runtime by IFUNC,
* so we prefer using large size chunk and copy memory as much as possible.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#if defined(RISCV_CRC32_ZBC)
+#ifdef RISCV_CRC32_ZBC
+
#include "zbuild.h"
#include "arch_functions.h"
+
#include <stdint.h>
#define CLMUL_MIN_LEN 16 // Minimum size of buffer for _crc32_clmul
#ifdef RISCV_FEATURES
+#include "zbuild.h"
+#include "riscv_features.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# include <sys/auxv.h>
#endif
-#include "zbuild.h"
-#include "riscv_features.h"
-
#define ISA_V_HWCAP (1 << ('v' - 'a'))
#define ISA_ZBC_HWCAP (1 << 29)
#ifdef RISCV_RVV
-#include <riscv_vector.h>
-
#include "zbuild.h"
#include "deflate.h"
+#include <riscv_vector.h>
+
static inline void slide_hash_chain(Pos *table, uint32_t entries, uint16_t wsize) {
size_t vl;
while (entries > 0) {
* relicensed under the zlib license.
*/
+#ifdef S390_CRC32_VX
+
#include "zbuild.h"
#include "arch_functions.h"
-#ifdef S390_CRC32_VX
-
#include <vecintrin.h>
typedef unsigned char uv16qi __attribute__((vector_size(16)));
+#ifdef S390_FEATURES
+
#include "zbuild.h"
#include "s390_features.h"
-#ifdef S390_FEATURES
-
#ifdef HAVE_SYS_AUXV_H
# include <sys/auxv.h>
#endif
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef X86_SSE42
+
#include "zbuild.h"
#include "adler32_p.h"
#include "adler32_ssse3_p.h"
-#ifdef X86_SSE42
-
#include <immintrin.h>
Z_INTERNAL uint32_t adler32_copy_sse42(uint32_t adler, uint8_t *dst, const uint8_t *src, size_t len) {
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef X86_SSSE3
+
#include "zbuild.h"
#include "adler32_p.h"
#include "adler32_ssse3_p.h"
-#ifdef X86_SSSE3
-
#include <immintrin.h>
Z_INTERNAL uint32_t adler32_ssse3(uint32_t adler, const uint8_t *buf, size_t len) {
/* chunkset_avx2.c -- AVX2 inline functions to copy small data chunks.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+
+#ifdef X86_AVX2
+
#include "zbuild.h"
#include "zmemory.h"
-#ifdef X86_AVX2
#include "arch/generic/chunk_256bit_perm_idx_lut.h"
#include <immintrin.h>
#include "x86_intrins.h"
/* chunkset_avx512.c -- AVX512 inline functions to copy small data chunks.
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#include "zbuild.h"
-#include "zmemory.h"
#ifdef X86_AVX512
+#include "zbuild.h"
+#include "zmemory.h"
+
#include "arch/generic/chunk_256bit_perm_idx_lut.h"
#include <immintrin.h>
#include "x86_intrins.h"
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef X86_SSE2
+
#include "zbuild.h"
#include "zmemory.h"
-#ifdef X86_SSE2
#include <immintrin.h>
typedef __m128i chunk_t;
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef X86_SSSE3
+
#include "zbuild.h"
#include "zmemory.h"
-#if defined(X86_SSSE3)
#include <immintrin.h>
#include "arch/generic/chunk_128bit_perm_idx_lut.h"
*
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#include "zbuild.h"
-#include "deflate.h"
#ifdef X86_AVX2
+#include "zbuild.h"
+#include "deflate.h"
+
#include <immintrin.h>
static inline void slide_hash_chain(Pos *table, uint32_t entries, const __m256i wsize) {
*
* For conditions of distribution and use, see copyright notice in zlib.h
*/
-#include "zbuild.h"
-#include "deflate.h"
#ifdef X86_SSE2
+#include "zbuild.h"
+#include "deflate.h"
+
#include <immintrin.h>
#include <assert.h>
* For conditions of distribution and use, see copyright notice in zlib.h
*/
+#ifdef X86_FEATURES
+
#include "zbuild.h"
#include "x86_features.h"
-#ifdef X86_FEATURES
-
#if defined(HAVE_CPUID_MS)
# include <intrin.h>
#elif defined(HAVE_CPUID_GNU)