Skip to content

Commit 63287e1

Browse files
authored
Merge pull request #5296 from martin-frbg/zscal_riscv
kernel/riscv64: Fix cscal and zscal
2 parents d2855d3 + f18b7a4 commit 63287e1

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

kernel/riscv64/zscal_rvv.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
7070
FLOAT_VX2_T vx2;
7171

7272
if(inc_x == 1) {
73+
if (dummy2 == 0 && da_r==0. && da_i == 0.) {
74+
BLASLONG i;
75+
for (i=0; i < n*2; i++) x[i]=0.;
76+
return(0);
77+
} else {
7378

7479
for (size_t vl; n > 0; n -= vl, x += vl*2) {
7580
vl = VSETVL(n);
@@ -80,16 +85,22 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
8085

8186
vt = VFMULVF_FLOAT(vr, da_r, vl);
8287
vt = VFNMSACVF_FLOAT(vt, da_i, vi, vl);
88+
8389
vi = VFMULVF_FLOAT(vi, da_r, vl);
8490
vi = VFMACCVF_FLOAT(vi, da_i, vr, vl);
8591

8692
vx2 = VSET_VX2(vx2, 0, vt);
8793
vx2 = VSET_VX2(vx2, 1, vi);
8894
VSSEG_FLOAT(x, vx2, vl);
8995
}
96+
}
9097

9198
} else {
92-
99+
if (dummy2 == 0 && da_r==0. && da_i == 0.) {
100+
BLASLONG i,ix=0,inc_x2=2*inc_x;
101+
for (i=0; i < n; i++) {x[ix]=0.;x[ix+1]=0.;ix+=inc_x2;};
102+
return(0);
103+
} else {
93104
for (size_t vl; n > 0; n -= vl, x += vl*inc_x*2) {
94105
vl = VSETVL(n);
95106

@@ -105,6 +116,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
105116
vx2 = VSET_VX2(vx2, 0, vt);
106117
vx2 = VSET_VX2(vx2, 1, vi);
107118
VSSSEG_FLOAT(x, stride_x, vx2, vl);
119+
}
108120
}
109121
}
110122

kernel/riscv64/zscal_vector.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,15 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
5757
if((n <= 0) || (inc_x <= 0))
5858
return(0);
5959

60-
unsigned int gvl = 0;
61-
FLOAT_V_T vt, v0, v1;
62-
{
60+
if (dummy2 == 0 && da_r == 0. && da_i == 0.) {
61+
int i,inc_x2,ix;
62+
inc_x2 = 2*inc_x;
63+
ix=0;
64+
for (i=0;i<n;i++){x[ix]=0.;x[ix+1]=0.;ix+=inc_x2;}
65+
} else {
66+
unsigned int gvl = 0;
67+
FLOAT_V_T vt, v0, v1;
68+
{
6369
gvl = VSETVL(n);
6470
BLASLONG stride_x = inc_x * 2 * sizeof(FLOAT);
6571
BLASLONG inc_xv = inc_x * 2 * gvl;
@@ -91,6 +97,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
9197
VSSEV_FLOAT(&x[ix], stride_x, vt, gvl);
9298
VSSEV_FLOAT(&x[ix+1], stride_x, v1, gvl);
9399
}
100+
}
94101
}
95102
return(0);
96103
}

0 commit comments

Comments
 (0)