From 8cd3ae20e37e4e7d38bc89b3fa7a88fe4b8af3b6 Mon Sep 17 00:00:00 2001 From: Nathan Moinvaziri Date: Wed, 11 Mar 2026 19:49:53 -0700 Subject: Add fallback for ARM CRC32 copy when compiling with no-unaligned-access --- arch/arm/crc32_armv8.c | 7 +++++++ arch/arm/crc32_armv8_pmull_eor3.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/arch/arm/crc32_armv8.c b/arch/arm/crc32_armv8.c index b222a832e9..acc6e0be20 100644 --- a/arch/arm/crc32_armv8.c +++ b/arch/arm/crc32_armv8.c @@ -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 diff --git a/arch/arm/crc32_armv8_pmull_eor3.c b/arch/arm/crc32_armv8_pmull_eor3.c index dbc5fadcf6..e0d5bf043b 100644 --- a/arch/arm/crc32_armv8_pmull_eor3.c +++ b/arch/arm/crc32_armv8_pmull_eor3.c @@ -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 -- cgit 0.0.5-2-1-g0f52