From 9729b42c4f9c700846d83f0bf3f606299b8d876c Mon Sep 17 00:00:00 2001 From: niels <> Date: Sun, 2 Nov 2025 16:32:20 +0100 Subject: [PATCH] fix NEON memset warnings and unsafe casts, safely handle leftover bytes --- veejay-current/veejay-core/libvjmem/memcpy.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/veejay-current/veejay-core/libvjmem/memcpy.c b/veejay-current/veejay-core/libvjmem/memcpy.c index db4eb7be..6951218d 100644 --- a/veejay-current/veejay-core/libvjmem/memcpy.c +++ b/veejay-current/veejay-core/libvjmem/memcpy.c @@ -2187,8 +2187,12 @@ void memset_asimd_64(uint8_t *dst, uint8_t value, size_t size) { remaining_bytes -= 16; } - while (remaining_bytes >= 8) { - uint64x1_t value_u64 = vdup_n_u64(*((uint64_t*)&value)); + if(remaining_bytes >= 8) { + uint64_t val64 = (uint64_t)value; + val64 |= val64 << 8; + val64 |= val64 << 16; + val64 |= val64 << 32; + uint64x1_t value_u64 = vdup_n_u64(val64); vst1_u8(dst, vreinterpret_u8_u64(value_u64)); dst += 8; remaining_bytes -= 8; @@ -2224,8 +2228,12 @@ void memset_asimd_32(uint8_t *dst, uint8_t value, size_t size) { remaining_bytes -= 16; } - while (remaining_bytes >= 8) { - uint64x1_t value_u64 = vdup_n_u64(*((uint64_t*)&value)); + if(remaining_bytes >= 8) { + uint64_t val64 = (uint64_t) value; + val64 |= val64 << 8; + val64 |= val64 << 16; + val64 |= val64 << 32; + uint64x1_t value_u64 = vdup_n_u64(val64); vst1_u8(dst, vreinterpret_u8_u64(value_u64)); dst += 8; remaining_bytes -= 8;