aboutsummaryrefslogtreecommitdiff
path: root/benchmarks/vec-daxpy/vec-daxpy.S
blob: c66acd62348877acaae958ffc14c35bf09039f36 (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
    .text
    .balign 4
    .global vec_daxpy
# void
# vec_daxpy(size_t n, const double a, const double *x, const double *y, double* z)
# {
#   size_t i;
#   for (i=0; i<n; i++)
#     z[i] = a * x[i] + y[i];
# }
#
# register arguments:
#     a0      n
#     fa0     a
#     a1      x
#     a2      y
#     a3      z
vec_daxpy:
    vsetvli a4, a0, e64, m8, ta, ma
    vle64.v v0, (a1)
    sub a0, a0, a4
    slli a4, a4, 3
    add a1, a1, a4
    vle64.v v8, (a2)
    vfmacc.vf v8, fa0, v0
    vse64.v v8, (a3)
    add a2, a2, a4
    add a3, a3, a4
    bnez a0, vec_daxpy
    ret