| OLD | NEW |
| 1 /* adler32.c -- compute the Adler-32 checksum of a data stream | 1 /* adler32.c -- compute the Adler-32 checksum of a data stream |
| 2 * Copyright (C) 1995-2011 Mark Adler | 2 * Copyright (C) 1995-2011 Mark Adler |
| 3 * For conditions of distribution and use, see copyright notice in zlib.h | 3 * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 */ | 4 */ |
| 5 | 5 |
| 6 /* @(#) $Id$ */ | 6 /* @(#) $Id$ */ |
| 7 | 7 |
| 8 #include "zutil.h" | 8 #include "zutil.h" |
| 9 #ifdef __ARM_NEON__ |
| 10 #include "neon_adler32.h" |
| 11 #endif |
| 9 | 12 |
| 10 #define local static | 13 #define local static |
| 11 | 14 |
| 12 local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); | 15 local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); |
| 13 | 16 |
| 14 #define BASE 65521 /* largest prime smaller than 65536 */ | 17 #define BASE 65521 /* largest prime smaller than 65536 */ |
| 15 #define NMAX 5552 | 18 #define NMAX 5552 |
| 16 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ | 19 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ |
| 17 | 20 |
| 18 #define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} | 21 #define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 # define MOD28(a) a %= BASE | 63 # define MOD28(a) a %= BASE |
| 61 # define MOD63(a) a %= BASE | 64 # define MOD63(a) a %= BASE |
| 62 #endif | 65 #endif |
| 63 | 66 |
| 64 /* ========================================================================= */ | 67 /* ========================================================================= */ |
| 65 uLong ZEXPORT adler32(adler, buf, len) | 68 uLong ZEXPORT adler32(adler, buf, len) |
| 66 uLong adler; | 69 uLong adler; |
| 67 const Bytef *buf; | 70 const Bytef *buf; |
| 68 uInt len; | 71 uInt len; |
| 69 { | 72 { |
| 73 #ifdef __ARM_NEON__ |
| 74 if (len > 31) { |
| 75 return NEON_adler32(adler, buf, len); |
| 76 } |
| 77 #endif |
| 78 |
| 70 unsigned long sum2; | 79 unsigned long sum2; |
| 71 unsigned n; | 80 unsigned n; |
| 72 | 81 |
| 73 /* split Adler-32 into component sums */ | 82 /* split Adler-32 into component sums */ |
| 74 sum2 = (adler >> 16) & 0xffff; | 83 sum2 = (adler >> 16) & 0xffff; |
| 75 adler &= 0xffff; | 84 adler &= 0xffff; |
| 76 | 85 |
| 77 /* in case user likes doing a byte at a time, keep it fast */ | 86 /* in case user likes doing a byte at a time, keep it fast */ |
| 78 if (len == 1) { | 87 if (len == 1) { |
| 79 adler += buf[0]; | 88 adler += buf[0]; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 return adler32_combine_(adler1, adler2, len2); | 179 return adler32_combine_(adler1, adler2, len2); |
| 171 } | 180 } |
| 172 | 181 |
| 173 uLong ZEXPORT adler32_combine64(adler1, adler2, len2) | 182 uLong ZEXPORT adler32_combine64(adler1, adler2, len2) |
| 174 uLong adler1; | 183 uLong adler1; |
| 175 uLong adler2; | 184 uLong adler2; |
| 176 z_off64_t len2; | 185 z_off64_t len2; |
| 177 { | 186 { |
| 178 return adler32_combine_(adler1, adler2, len2); | 187 return adler32_combine_(adler1, adler2, len2); |
| 179 } | 188 } |
| OLD | NEW |