summaryrefslogtreecommitdiff
path: root/rust/asm/src/main_aarch64.S
blob: d8add76755564145de368243ec222f6c6b386145 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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