Skip to content

Commit 45199ce

Browse files
authored
Merge pull request #5892 from moluopro/develop
Enable RVV ROTM for RISC-V ZVL Targets
2 parents 80d7922 + 09fd1da commit 45199ce

3 files changed

Lines changed: 56 additions & 28 deletions

File tree

kernel/riscv64/KERNEL.RISCV64_ZVL128B

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ DROTKERNEL = rot_rvv.c
7171
CROTKERNEL = zrot_rvv.c
7272
ZROTKERNEL = zrot_rvv.c
7373

74-
SROTMKERNEL = ../generic/rotm.c
75-
DROTMKERNEL = ../generic/rotm.c
74+
SROTMKERNEL = rotm_rvv.c
75+
DROTMKERNEL = rotm_rvv.c
7676
QROTMKERNEL = ../generic/rotm.c
7777

7878
SSCALKERNEL = scal_rvv.c

kernel/riscv64/KERNEL.RISCV64_ZVL256B

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ DROTKERNEL = rot_vector.c
6666
CROTKERNEL = zrot_vector.c
6767
ZROTKERNEL = zrot_vector.c
6868

69-
SROTMKERNEL = ../generic/rotm.c
70-
DROTMKERNEL = ../generic/rotm.c
69+
SROTMKERNEL = rotm_rvv.c
70+
DROTMKERNEL = rotm_rvv.c
7171
QROTMKERNEL = ../generic/rotm.c
7272

7373
SSCALKERNEL = scal_vector.c

kernel/riscv64/rotm_rvv.c

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,58 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
6262
dflag = dparam[1];
6363
if (n <= 0 || dflag == - 2.0) goto L140;
6464

65+
if (incx == 0 || incy == 0) {
66+
BLASLONG i;
67+
FLOAT w, z;
68+
69+
kx = 1;
70+
ky = 1;
71+
if (incx < 0) {
72+
kx = (1 - n) * incx + 1;
73+
}
74+
if (incy < 0) {
75+
ky = (1 - n) * incy + 1;
76+
}
77+
78+
if (dflag < 0.) {
79+
dh11 = dparam[2];
80+
dh12 = dparam[4];
81+
dh21 = dparam[3];
82+
dh22 = dparam[5];
83+
for (i = 0; i < n; ++i) {
84+
w = dx[kx];
85+
z = dy[ky];
86+
dx[kx] = w * dh11 + z * dh12;
87+
dy[ky] = w * dh21 + z * dh22;
88+
kx += incx;
89+
ky += incy;
90+
}
91+
} else if (dflag == 0) {
92+
dh12 = dparam[4];
93+
dh21 = dparam[3];
94+
for (i = 0; i < n; ++i) {
95+
w = dx[kx];
96+
z = dy[ky];
97+
dx[kx] = w + z * dh12;
98+
dy[ky] = w * dh21 + z;
99+
kx += incx;
100+
ky += incy;
101+
}
102+
} else {
103+
dh11 = dparam[2];
104+
dh22 = dparam[5];
105+
for (i = 0; i < n; ++i) {
106+
w = dx[kx];
107+
z = dy[ky];
108+
dx[kx] = w * dh11 + z;
109+
dy[ky] = -w + dh22 * z;
110+
kx += incx;
111+
ky += incy;
112+
}
113+
}
114+
goto L140;
115+
}
116+
65117
if (!(incx == incy && incx > 0)) goto L70;
66118

67119
nsteps = n * incx;
@@ -177,14 +229,6 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
177229
L80:
178230
dh12 = dparam[4];
179231
dh21 = dparam[3];
180-
if(incx < 0){
181-
incx = -incx;
182-
dx -= n*incx;
183-
}
184-
if(incy < 0){
185-
incy = -incy;
186-
dy -= n*incy;
187-
}
188232
stride_x = incx * sizeof(FLOAT);
189233
stride_y = incy * sizeof(FLOAT);
190234
for (size_t vl; n > 0; n -= vl, dx += vl*incx, dy += vl*incy) {
@@ -203,14 +247,6 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
203247
L100:
204248
dh11 = dparam[2];
205249
dh22 = dparam[5];
206-
if(incx < 0){
207-
incx = -incx;
208-
dx -= n*incx;
209-
}
210-
if(incy < 0){
211-
incy = -incy;
212-
dy -= n*incy;
213-
}
214250
stride_x = incx * sizeof(FLOAT);
215251
stride_y = incy * sizeof(FLOAT);
216252
for (size_t vl; n > 0; n -= vl, dx += vl*incx, dy += vl*incy) {
@@ -231,14 +267,6 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
231267
dh12 = dparam[4];
232268
dh21 = dparam[3];
233269
dh22 = dparam[5];
234-
if(incx < 0){
235-
incx = -incx;
236-
dx -= n*incx;
237-
}
238-
if(incy < 0){
239-
incy = -incy;
240-
dy -= n*incy;
241-
}
242270
stride_x = incx * sizeof(FLOAT);
243271
stride_y = incy * sizeof(FLOAT);
244272
for (size_t vl; n > 0; n -= vl, dx += vl*incx, dy += vl*incy) {

0 commit comments

Comments
 (0)