Change signature of SBGEMV.

This commit is contained in:
Chip Kerchner
2025-10-07 13:14:20 +00:00
parent 809e1cba8f
commit aecb7f9537
2 changed files with 39 additions and 4 deletions

View File

@@ -32,6 +32,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define VLSEV_FLOAT RISCV_RVV(vlse32_v_f32m8)
#define VSEV_FLOAT RISCV_RVV(vse32_v_f32m8)
#define VSSEV_FLOAT RISCV_RVV(vsse32_v_f32m8)
#define VFMULVF_FLOAT RISCV_RVV(vfmul_vf_f32m8)
#define VFMVVF_FLOAT RISCV_RVV(vfmv_v_f_f32m8)
#define VSETVL(n) RISCV_RVV(vsetvl_e16m4)(n)
@@ -45,7 +47,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define VFMACCVF_FLOAT RISCV_RVV(vfwmaccbf16_vf_f32m8)
#endif
int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, IFLOAT *a, BLASLONG lda, IFLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer)
int CNAME(BLASLONG m, BLASLONG n, FLOAT alpha, IFLOAT *a, BLASLONG lda, IFLOAT *x, BLASLONG inc_x, FLOAT beta, FLOAT *y, BLASLONG inc_y)
{
if (n < 0) return(0);
@@ -55,7 +57,24 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, IFLOAT *a, BLASL
IFLOAT_V_T va;
FLOAT_V_T vy;
y_ptr = y;
if (inc_y == 1) {
if (beta == 0.0) {
for (i = m; i > 0; i -= vl) {
vl = VSETVL(i);
vy = VFMVVF_FLOAT(0.0, vl);
VSEV_FLOAT(y_ptr, vy, vl);
y_ptr += vl;
}
} else if (beta != 1.0) {
for (i = m; i > 0; i -= vl) {
vl = VSETVL(i);
vy = VLEV_FLOAT(y_ptr, vl);
vy = VFMULVF_FLOAT(vy, beta, vl);
VSEV_FLOAT(y_ptr, vy, vl);
y_ptr += vl;
}
}
for (j = 0; j < n; j++) {
temp = (IFLOAT)(alpha * (FLOAT)(x[0]));
y_ptr = y;
@@ -74,6 +93,22 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, IFLOAT *a, BLASL
}
} else {
BLASLONG stride_y = inc_y * sizeof(FLOAT);
if (beta == 0.0) {
for (i = m; i > 0; i -= vl) {
vl = VSETVL(i);
vy = VFMVVF_FLOAT(0.0, vl);
VSSEV_FLOAT(y_ptr, stride_y, vy, vl);
y_ptr += vl * inc_y;
}
} else if (beta != 1.0) {
for (i = m; i > 0; i -= vl) {
vl = VSETVL(i);
vy = VLSEV_FLOAT(y_ptr, stride_y, vl);
vy = VFMULVF_FLOAT(vy, beta, vl);
VSSEV_FLOAT(y_ptr, stride_y, vy, vl);
y_ptr += vl * inc_y;
}
}
for (j = 0; j < n; j++) {
temp = (IFLOAT)(alpha * (FLOAT)(x[0]));
y_ptr = y;

View File

@@ -54,7 +54,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define VFMVVF_FLOAT RISCV_RVV(vfmv_v_f_f32m8)
#define VFMVVF_FLOAT_M1 RISCV_RVV(vfmv_v_f_f32m1)
int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, IFLOAT *a, BLASLONG lda, IFLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *buffer)
int CNAME(BLASLONG m, BLASLONG n, FLOAT alpha, IFLOAT *a, BLASLONG lda, IFLOAT *x, BLASLONG inc_x, FLOAT beta, FLOAT *y, BLASLONG inc_y)
{
BLASLONG i = 0, j = 0, k = 0;
BLASLONG ix = 0, iy = 0;
@@ -92,7 +92,7 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, IFLOAT *a, BLASL
v_res = VFREDSUM_FLOAT(vr, v_res, gvl);
}
temp = (FLOAT)EXTRACT_FLOAT(v_res);
y[iy] += alpha * temp;
y[iy] = y[iy] * beta + alpha * temp;
iy += inc_y;
a_ptr += lda;
@@ -123,7 +123,7 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, IFLOAT *a, BLASL
v_res = VFREDSUM_FLOAT(vr, v_res, gvl);
}
temp = (FLOAT)EXTRACT_FLOAT(v_res);
y[iy] += alpha * temp;
y[iy] = y[iy] * beta + alpha * temp;
iy += inc_y;
a_ptr += lda;