summaryrefslogtreecommitdiff
path: root/src/mem_utils.h
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-11-08 18:24:01 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-11-08 18:24:01 +0100
commit69c5e9c07941212ac77368effd1c60db3140d4a3 (patch)
treef7ae2f9d333a7405c6f046cb51f0aa7db9c4789f /src/mem_utils.h
parentc38edfbd30aae121ebdaaac8e8e25f8784da318d (diff)
use vld1q_u32/vst1q_u32 for memcpy
Diffstat (limited to 'src/mem_utils.h')
-rw-r--r--src/mem_utils.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/mem_utils.h b/src/mem_utils.h
new file mode 100644
index 0000000..8601f78
--- /dev/null
+++ b/src/mem_utils.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include <cstddef>
+
+#include <arm_neon.h>
+
+template<std::size_t S>
+void memcpy_1by1(std::byte *dst, const std::byte *src)
+{
+ for (std::size_t i{0}; i < S; ++i) {
+ dst[i] = src[i];
+ }
+}
+
+using ARRAY_TYPE = uint32_t;
+template<std::size_t S>
+void memcpy_neon(ARRAY_TYPE *dst, const ARRAY_TYPE *src)
+{
+ uint32x4_t tmp;
+
+ for (std::size_t i{0}; i < (S / 4); i += 4) {
+ tmp = vld1q_u32(src + i);
+ vst1q_u32(&dst[i], tmp);
+ }
+}