Line | Count | Source (jump to first uncovered line) |
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 | 160k | #define BASE 65521U /* largest prime smaller than 65536 */ |
12 | 15.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 | 18.9k | static inline uint32_t adler32_len_16(uint32_t adler, const uint8_t *buf, size_t len, uint32_t sum2) { |
30 | 168k | while (len) { |
31 | 149k | --len; |
32 | 149k | adler += *buf++; |
33 | 149k | sum2 += adler; |
34 | 149k | } |
35 | 18.9k | adler %= BASE; |
36 | 18.9k | sum2 %= BASE; /* only added so many BASE's */ |
37 | | /* return recombined sums */ |
38 | 18.9k | return adler | (sum2 << 16); |
39 | 18.9k | } adler32_ssse3.c:adler32_len_16 Line | Count | Source | 29 | 7.91k | static inline uint32_t adler32_len_16(uint32_t adler, const uint8_t *buf, size_t len, uint32_t sum2) { | 30 | 77.5k | while (len) { | 31 | 69.6k | --len; | 32 | 69.6k | adler += *buf++; | 33 | 69.6k | sum2 += adler; | 34 | 69.6k | } | 35 | 7.91k | adler %= BASE; | 36 | 7.91k | sum2 %= BASE; /* only added so many BASE's */ | 37 | | /* return recombined sums */ | 38 | 7.91k | return adler | (sum2 << 16); | 39 | 7.91k | } |
Unexecuted instantiation: adler32_sse42.c:adler32_len_16 adler32_avx2.c:adler32_len_16 Line | Count | Source | 29 | 11.0k | static inline uint32_t adler32_len_16(uint32_t adler, const uint8_t *buf, size_t len, uint32_t sum2) { | 30 | 90.6k | while (len) { | 31 | 79.5k | --len; | 32 | 79.5k | adler += *buf++; | 33 | 79.5k | sum2 += adler; | 34 | 79.5k | } | 35 | 11.0k | adler %= BASE; | 36 | 11.0k | sum2 %= BASE; /* only added so many BASE's */ | 37 | | /* return recombined sums */ | 38 | 11.0k | return adler | (sum2 << 16); | 39 | 11.0k | } |
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 | 7.21k | 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 | 61.5k | while (len--) { |
43 | 54.2k | *dst = *buf++; |
44 | 54.2k | adler += *dst++; |
45 | 54.2k | sum2 += adler; |
46 | 54.2k | } |
47 | 7.21k | adler %= BASE; |
48 | 7.21k | sum2 %= BASE; /* only added so many BASE's */ |
49 | | /* return recombined sums */ |
50 | 7.21k | return adler | (sum2 << 16); |
51 | 7.21k | } Unexecuted instantiation: adler32_ssse3.c:adler32_copy_len_16 adler32_sse42.c:adler32_copy_len_16 Line | Count | Source | 41 | 2.83k | 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 | 26.6k | while (len--) { | 43 | 23.7k | *dst = *buf++; | 44 | 23.7k | adler += *dst++; | 45 | 23.7k | sum2 += adler; | 46 | 23.7k | } | 47 | 2.83k | adler %= BASE; | 48 | 2.83k | sum2 %= BASE; /* only added so many BASE's */ | 49 | | /* return recombined sums */ | 50 | 2.83k | return adler | (sum2 << 16); | 51 | 2.83k | } |
adler32_avx2.c:adler32_copy_len_16 Line | Count | Source | 41 | 4.38k | 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 | 34.8k | while (len--) { | 43 | 30.5k | *dst = *buf++; | 44 | 30.5k | adler += *dst++; | 45 | 30.5k | sum2 += adler; | 46 | 30.5k | } | 47 | 4.38k | adler %= BASE; | 48 | 4.38k | sum2 %= BASE; /* only added so many BASE's */ | 49 | | /* return recombined sums */ | 50 | 4.38k | return adler | (sum2 << 16); | 51 | 4.38k | } |
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 */ |