From: Mika Lindqvist Date: Sat, 10 Apr 2021 00:13:33 +0000 (+0300) Subject: [ARM] Use temporary variable when loading more than 8 bits in chunkmemset_neon(). X-Git-Tag: 2.0.3~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=deda158428676929b7b3f9233eed2cbe1498769b;p=thirdparty%2Fzlib-ng.git [ARM] Use temporary variable when loading more than 8 bits in chunkmemset_neon(). * using memcpy() forbids optimizer to optimize away the temporary variable due to aliasing rules. --- diff --git a/arch/arm/chunkset_neon.c b/arch/arm/chunkset_neon.c index e9cbcb1b..b1532982 100644 --- a/arch/arm/chunkset_neon.c +++ b/arch/arm/chunkset_neon.c @@ -23,11 +23,15 @@ static inline void chunkmemset_1(uint8_t *from, chunk_t *chunk) { } static inline void chunkmemset_2(uint8_t *from, chunk_t *chunk) { - *chunk = vreinterpretq_u8_s16(vdupq_n_s16(*(int16_t *)from)); + int16_t tmp; + memcpy(&tmp, from, 2); + *chunk = vreinterpretq_u8_s16(vdupq_n_s16(tmp)); } static inline void chunkmemset_4(uint8_t *from, chunk_t *chunk) { - *chunk = vreinterpretq_u8_s32(vdupq_n_s32(*(int32_t *)from)); + int32_t tmp; + memcpy(&tmp, from, 4); + *chunk = vreinterpretq_u8_s32(vdupq_n_s32(tmp)); } static inline void chunkmemset_8(uint8_t *from, chunk_t *chunk) {