Files
kernels/runtime/src/vx_spawn.S
2021-10-07 13:58:21 -04:00

37 lines
970 B
ArmAsm

#include <VX_config.h>
.type vx_serial, @function
.global vx_serial
vx_serial:
addi sp, sp, -24
sw ra, 20(sp)
sw s4, 16(sp)
sw s3, 12(sp)
sw s2, 8(sp)
sw s1, 4(sp)
sw s0, 0(sp)
mv s4, a0 # s4 <- callback
mv s3, a1 # s3 <- arg
csrr s2, CSR_NT # s2 <- NT
csrr s1, CSR_WTID # s1 <- tid
li s0, 0 # s0 <- index
label_loop:
sub t0, s0, s1
seqz t1, t0 # (index != tid)
.insn s 0x6b, 2, x0, 0(t1) # split t0
bnez t0, label_join
mv a0, s3 # a0 <- arg
jalr s4 # callback(arg)
label_join:
.insn s 0x6b, 3, x0, 0(x0) # join
addi s0, s0, 1 # index++
blt s0, s2, label_loop # loop back
lw ra, 20(sp)
lw s4, 16(sp)
lw s3, 12(sp)
lw s2, 8(sp)
lw s1, 4(sp)
lw s0, 0(sp)
addi sp, sp, 24
ret