.text
.balign 4
.global arr_sum
# uint32_t *arr_sum(uint32_t* arr, size_t n)
# a0=arr, a1=n
arr_sum:
vsetvli t0, x0, e32, m8, ta, ma
vmv.v.i v8, 0
loop:
vsetvli t0, a1, e32, m8, ta, ma
vle32.v v16, (a0)
vsetvli x0, x0, e32, m8, tu, ma
vadd.vv v8, v8, v16
sh2add a0, a0, t0
sub a1, a1, t0
bnez a1, loop
vsetvli t0, x0, e32, m8, tu, ma
vmv.s.x v0, x0
vredsum.vs v0, v0, v8
vmv.x.s a0, v0
ret