diff options
author | Mika Lindqvist <postmaster@raasu.org> | 2021-04-10 03:13:33 +0300 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2021-04-14 17:59:31 +0200 |
commit | deda158428676929b7b3f9233eed2cbe1498769b (patch) | |
tree | 57c895285b46d7a4caab39d035b4b53ec58b80bb | |
parent | 70288f1b8a2f27fba440ae02bef583972045bb65 (diff) |
[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.
-rw-r--r-- | arch/arm/chunkset_neon.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/arm/chunkset_neon.c b/arch/arm/chunkset_neon.c index e9cbcb1..b153298 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) { |