]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
[ARM] Use temporary variable when loading more than 8 bits in chunkmemset_neon().
authorMika Lindqvist <postmaster@raasu.org>
Sat, 10 Apr 2021 00:13:33 +0000 (03:13 +0300)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Wed, 14 Apr 2021 15:59:31 +0000 (17:59 +0200)
* using memcpy() forbids optimizer to optimize away the temporary variable due to aliasing rules.

arch/arm/chunkset_neon.c

index e9cbcb1babf25d404ec405a802e1404878736221..b153298275208ba8565d30d0fd967aff836ed635 100644 (file)
@@ -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) {