]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Add fallback for ARM CRC32 copy when compiling with no-unaligned-access
authorNathan Moinvaziri <nathan@nathanm.com>
Thu, 12 Mar 2026 02:49:53 +0000 (19:49 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Sat, 14 Mar 2026 01:14:21 +0000 (02:14 +0100)
arch/arm/crc32_armv8.c
arch/arm/crc32_armv8_pmull_eor3.c

index b222a832e95cc021785d0c025eb0a5f9687cf98a..acc6e0be2091757838786bae809352e29ff024eb 100644 (file)
@@ -34,6 +34,13 @@ Z_INTERNAL Z_TARGET_CRC uint32_t crc32_armv8(uint32_t crc, const uint8_t *buf, s
 }
 
 Z_INTERNAL Z_TARGET_CRC uint32_t crc32_copy_armv8(uint32_t crc, uint8_t *dst, const uint8_t *src, size_t len) {
+#if OPTIMAL_CMP >= 32
     return crc32_copy_impl(crc, dst, src, len, 1);
+#else
+    /* Without unaligned access, interleaved stores get decomposed into byte ops */
+    crc = crc32_armv8(crc, src, len);
+    memcpy(dst, src, len);
+    return crc;
+#endif
 }
 #endif
index dbc5fadcf62c643753b72c4cded0f70186c16069..e0d5bf043b77803b9723d6cec84883dc3b0da5c1 100644 (file)
@@ -354,6 +354,13 @@ Z_INTERNAL Z_TARGET_PMULL_EOR3 uint32_t crc32_armv8_pmull_eor3(uint32_t crc, con
 }
 
 Z_INTERNAL Z_TARGET_PMULL_EOR3 uint32_t crc32_copy_armv8_pmull_eor3(uint32_t crc, uint8_t *dst, const uint8_t *src, size_t len) {
+#if OPTIMAL_CMP >= 32
     return crc32_copy_impl(crc, dst, src, len, 1);
+#else
+    /* Without unaligned access, interleaved stores get decomposed into byte ops */
+    crc = crc32_armv8_pmull_eor3(crc, src, len);
+    memcpy(dst, src, len);
+    return crc;
+#endif
 }
 #endif