From: Nathan Moinvaziri Date: Sun, 4 Jan 2026 07:22:39 +0000 (-0800) Subject: Simplify alignment checks in crc32_loongarch64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fd992330b9188acd42ce00faba70f440fe26b9d;p=thirdparty%2Fzlib-ng.git Simplify alignment checks in crc32_loongarch64 --- diff --git a/arch/loongarch/crc32_la.c b/arch/loongarch/crc32_la.c index 40e9bb117..912488c77 100644 --- a/arch/loongarch/crc32_la.c +++ b/arch/loongarch/crc32_la.c @@ -18,43 +18,44 @@ Z_INTERNAL uint32_t crc32_loongarch64(uint32_t crc, const uint8_t *buf, size_t l return c; } - if ((ptrdiff_t)buf & (sizeof(uint64_t) - 1)) { - if (len && ((ptrdiff_t)buf & 1)) { + uintptr_t align_diff = ALIGN_DIFF(buf, 8); + if (align_diff) { + if (len && (align_diff & 1)) { c = (uint32_t)__crc_w_b_w((char)(*buf++), (int)c); len--; } - if ((len >= sizeof(uint16_t)) && ((ptrdiff_t)buf & (sizeof(uint32_t) - 1))) { + if (len >= 2 && (align_diff & 2)) { c = (uint32_t)__crc_w_h_w((short)*((uint16_t*)buf), (int)c); - buf += sizeof(uint16_t); - len -= sizeof(uint16_t); + buf += 2; + len -= 2; } - if ((len >= sizeof(uint32_t)) && ((ptrdiff_t)buf & (sizeof(uint64_t) - 1))) { + if (len >= 4 && (align_diff & 4)) { c = (uint32_t)__crc_w_w_w((int)*((uint32_t*)buf), (int)c); - len -= sizeof(uint32_t); - buf += sizeof(uint32_t); + len -= 4; + buf += 4; } } - while (len >= sizeof(uint64_t)) { + while (len >= 8) { c = (uint32_t)__crc_w_d_w((long int)*((uint64_t*)buf), (int)c); - len -= sizeof(uint64_t); - buf += sizeof(uint64_t); + len -= 8; + buf += 8; } - if (len & sizeof(uint32_t)) { + if (len & 4) { c = (uint32_t)__crc_w_w_w((int)*((uint32_t*)buf), (int)c); - buf += sizeof(uint32_t); + buf += 4; } - if (len & sizeof(uint16_t)) { + if (len & 2) { c = (uint32_t)__crc_w_h_w((short)*((uint16_t*)buf), (int)c); - buf += sizeof(uint16_t); + buf += 2; } - if (len & sizeof(uint8_t)) { + if (len & 1) { c = (uint32_t)__crc_w_b_w((char)(*buf), (int)c); }