summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMika Lindqvist <postmaster@raasu.org>2021-04-10 03:13:33 +0300
committerHans Kristian Rosbach <hk-github@circlestorm.org>2021-04-14 17:59:31 +0200
commitdeda158428676929b7b3f9233eed2cbe1498769b (patch)
tree57c895285b46d7a4caab39d035b4b53ec58b80bb
parent70288f1b8a2f27fba440ae02bef583972045bb65 (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.c8
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) {