Line | Count | Source |
1 | | /* adler32_p.h -- Private inline functions and macros shared with |
2 | | * different computation of the Adler-32 checksum |
3 | | * of a data stream. |
4 | | * Copyright (C) 1995-2011, 2016 Mark Adler |
5 | | * For conditions of distribution and use, see copyright notice in zlib.h |
6 | | */ |
7 | | |
8 | | #ifndef ADLER32_P_H |
9 | | #define ADLER32_P_H |
10 | | |
11 | 678k | #define BASE 65521U /* largest prime smaller than 65536 */ |
12 | 14.8k | #define NMAX 5552 |
13 | | /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ |
14 | | |
15 | 0 | #define ADLER_DO1(sum1, sum2, buf, i) {(sum1) += buf[(i)]; (sum2) += (sum1);} |
16 | 0 | #define ADLER_DO2(sum1, sum2, buf, i) {ADLER_DO1(sum1, sum2, buf, i); ADLER_DO1(sum1, sum2, buf, i+1);} |
17 | 0 | #define ADLER_DO4(sum1, sum2, buf, i) {ADLER_DO2(sum1, sum2, buf, i); ADLER_DO2(sum1, sum2, buf, i+2);} |
18 | 0 | #define ADLER_DO8(sum1, sum2, buf, i) {ADLER_DO4(sum1, sum2, buf, i); ADLER_DO4(sum1, sum2, buf, i+4);} |
19 | | #define ADLER_DO16(sum1, sum2, buf) {ADLER_DO8(sum1, sum2, buf, 0); ADLER_DO8(sum1, sum2, buf, 8);} |
20 | | |
21 | 0 | static inline uint32_t adler32_len_1(uint32_t adler, const uint8_t *buf, uint32_t sum2) { |
22 | 0 | adler += buf[0]; |
23 | 0 | adler %= BASE; |
24 | 0 | sum2 += adler; |
25 | 0 | sum2 %= BASE; |
26 | 0 | return adler | (sum2 << 16); |
27 | 0 | } Unexecuted instantiation: adler32_ssse3.c:adler32_len_1 Unexecuted instantiation: adler32_sse42.c:adler32_len_1 Unexecuted instantiation: adler32_avx2.c:adler32_len_1 Unexecuted instantiation: adler32_avx512.c:adler32_len_1 Unexecuted instantiation: adler32_avx512_vnni.c:adler32_len_1 Unexecuted instantiation: adler32_c.c:adler32_len_1 |
28 | | |
29 | 16.0k | static inline uint32_t adler32_len_16(uint32_t adler, const uint8_t *buf, size_t len, uint32_t sum2) { |
30 | 139k | while (len) { |
31 | 123k | --len; |
32 | 123k | adler += *buf++; |
33 | 123k | sum2 += adler; |
34 | 123k | } |
35 | 16.0k | adler %= BASE; |
36 | 16.0k | sum2 %= BASE; /* only added so many BASE's */ |
37 | | /* return recombined sums */ |
38 | 16.0k | return adler | (sum2 << 16); |
39 | 16.0k | } adler32_ssse3.c:adler32_len_16 Line | Count | Source | 29 | 7.42k | static inline uint32_t adler32_len_16(uint32_t adler, const uint8_t *buf, size_t len, uint32_t sum2) { | 30 | 63.8k | while (len) { | 31 | 56.4k | --len; | 32 | 56.4k | adler += *buf++; | 33 | 56.4k | sum2 += adler; | 34 | 56.4k | } | 35 | 7.42k | adler %= BASE; | 36 | 7.42k | sum2 %= BASE; /* only added so many BASE's */ | 37 | | /* return recombined sums */ | 38 | 7.42k | return adler | (sum2 << 16); | 39 | 7.42k | } |
Unexecuted instantiation: adler32_sse42.c:adler32_len_16 adler32_avx2.c:adler32_len_16 Line | Count | Source | 29 | 8.64k | static inline uint32_t adler32_len_16(uint32_t adler, const uint8_t *buf, size_t len, uint32_t sum2) { | 30 | 75.2k | while (len) { | 31 | 66.5k | --len; | 32 | 66.5k | adler += *buf++; | 33 | 66.5k | sum2 += adler; | 34 | 66.5k | } | 35 | 8.64k | adler %= BASE; | 36 | 8.64k | sum2 %= BASE; /* only added so many BASE's */ | 37 | | /* return recombined sums */ | 38 | 8.64k | return adler | (sum2 << 16); | 39 | 8.64k | } |
Unexecuted instantiation: adler32_avx512.c:adler32_len_16 Unexecuted instantiation: adler32_avx512_vnni.c:adler32_len_16 Unexecuted instantiation: adler32_c.c:adler32_len_16 |
40 | | |
41 | 15.8k | static inline uint32_t adler32_copy_len_16(uint32_t adler, const uint8_t *buf, uint8_t *dst, size_t len, uint32_t sum2) { |
42 | 141k | while (len--) { |
43 | 125k | *dst = *buf++; |
44 | 125k | adler += *dst++; |
45 | 125k | sum2 += adler; |
46 | 125k | } |
47 | 15.8k | adler %= BASE; |
48 | 15.8k | sum2 %= BASE; /* only added so many BASE's */ |
49 | | /* return recombined sums */ |
50 | 15.8k | return adler | (sum2 << 16); |
51 | 15.8k | } Unexecuted instantiation: adler32_ssse3.c:adler32_copy_len_16 adler32_sse42.c:adler32_copy_len_16 Line | Count | Source | 41 | 7.07k | static inline uint32_t adler32_copy_len_16(uint32_t adler, const uint8_t *buf, uint8_t *dst, size_t len, uint32_t sum2) { | 42 | 64.5k | while (len--) { | 43 | 57.4k | *dst = *buf++; | 44 | 57.4k | adler += *dst++; | 45 | 57.4k | sum2 += adler; | 46 | 57.4k | } | 47 | 7.07k | adler %= BASE; | 48 | 7.07k | sum2 %= BASE; /* only added so many BASE's */ | 49 | | /* return recombined sums */ | 50 | 7.07k | return adler | (sum2 << 16); | 51 | 7.07k | } |
adler32_avx2.c:adler32_copy_len_16 Line | Count | Source | 41 | 8.82k | static inline uint32_t adler32_copy_len_16(uint32_t adler, const uint8_t *buf, uint8_t *dst, size_t len, uint32_t sum2) { | 42 | 76.8k | while (len--) { | 43 | 68.0k | *dst = *buf++; | 44 | 68.0k | adler += *dst++; | 45 | 68.0k | sum2 += adler; | 46 | 68.0k | } | 47 | 8.82k | adler %= BASE; | 48 | 8.82k | sum2 %= BASE; /* only added so many BASE's */ | 49 | | /* return recombined sums */ | 50 | 8.82k | return adler | (sum2 << 16); | 51 | 8.82k | } |
Unexecuted instantiation: adler32_avx512.c:adler32_copy_len_16 Unexecuted instantiation: adler32_avx512_vnni.c:adler32_copy_len_16 Unexecuted instantiation: adler32_c.c:adler32_copy_len_16 |
52 | | |
53 | 0 | static inline uint32_t adler32_len_64(uint32_t adler, const uint8_t *buf, size_t len, uint32_t sum2) { |
54 | | #ifdef UNROLL_MORE |
55 | | while (len >= 16) { |
56 | | len -= 16; |
57 | | ADLER_DO16(adler, sum2, buf); |
58 | | buf += 16; |
59 | | #else |
60 | 0 | while (len >= 8) { |
61 | 0 | len -= 8; |
62 | 0 | ADLER_DO8(adler, sum2, buf, 0); |
63 | 0 | buf += 8; |
64 | 0 | #endif |
65 | 0 | } |
66 | | /* Process tail (len < 16). */ |
67 | 0 | return adler32_len_16(adler, buf, len, sum2); |
68 | 0 | } Unexecuted instantiation: adler32_ssse3.c:adler32_len_64 Unexecuted instantiation: adler32_sse42.c:adler32_len_64 Unexecuted instantiation: adler32_avx2.c:adler32_len_64 Unexecuted instantiation: adler32_avx512.c:adler32_len_64 Unexecuted instantiation: adler32_avx512_vnni.c:adler32_len_64 Unexecuted instantiation: adler32_c.c:adler32_len_64 |
69 | | |
70 | | #endif /* ADLER32_P_H */ |