summaryrefslogtreecommitdiff
path: root/rust-asm/src/main_aarch64.S
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-09-28 20:50:17 -0500
committerHunter Kvalevog <hunter@kvog.sh>2026-09-28 20:53:56 -0500
commitcc780927e6ca5ddefc7b03bafab171d67089b2c3 (patch)
treec8c4e0a8a40952e46eadd4643b047742b28ec73a /rust-asm/src/main_aarch64.S
parent45f518dfbcd421e76bfd043b905cd6d7436906e5 (diff)
rust-asm: rust -> assembly interop demo
Diffstat (limited to 'rust-asm/src/main_aarch64.S')
-rw-r--r--rust-asm/src/main_aarch64.S36
1 files changed, 36 insertions, 0 deletions
diff --git a/rust-asm/src/main_aarch64.S b/rust-asm/src/main_aarch64.S
new file mode 100644
index 0000000..424a72f
--- /dev/null
+++ b/rust-asm/src/main_aarch64.S
@@ -0,0 +1,36 @@
+// ================================================================================================
+// Rust->assembly interop demo
+//
+// License:
+// SPDX-License-Identifier: 0BSD
+// Copyright (c) 2026 Hunter Kvalevog
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE.
+// ================================================================================================
+
+#include "../../_common/aarch64/common.S"
+
+TEXT_SEGMENT
+
+.global SYM(add_u32)
+.global SYM(dot_f32v3)
+
+SYM(add_u32):
+ add w0, w0, w1
+ ret
+
+SYM(dot_f32v3):
+ ldp s1, s2, [x0] // a.x, a.y
+ ldp s3, s4, [x1] // b.x, b.y
+ ldr s5, [x0, #8] // a.z
+ ldr s6, [x1, #8] // b.z
+
+ fmul s0, s1, s3 // a.x * b.x
+ fmadd s0, s2, s4, s0 // + a.y * b.y
+ fmadd s0, s5, s6, s0 // + a.z * b.z
+
+ ret