Fix BLAS and LAPACK tests for RVV 1.0 target, update to 0.12.0 intrincics

* Update intrincics API to 0.12.0 version (Stride Segment Loads/Stores)
* Fixed nrm2, axpby, ncopy, zgemv and scal kernels
* Added zero size checks
This commit is contained in:
kseniyazaytseva
2024-01-18 22:11:12 +03:00
committed by Andrey Sokolov
parent 88e994116c
commit b193ea3d7b
46 changed files with 1619 additions and 700 deletions
+20 -10
View File
@@ -32,11 +32,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#if !defined(DOUBLE)
#define VSETVL(n) __riscv_vsetvl_e32m2(n)
#define FLOAT_V_T vfloat32m2_t
#define FLOAT_VX2_T vfloat32m2x2_t
#define VGET_VX2 __riscv_vget_v_f32m2x2_f32m2
#define VSET_VX2 __riscv_vset_v_f32m2_f32m2x2
#define VLEV_FLOAT __riscv_vle32_v_f32m2
#define VSEV_FLOAT __riscv_vse32_v_f32m2
#define VLSEG2_FLOAT __riscv_vlseg2e32_v_f32m2
#define VLSSEG2_FLOAT __riscv_vlsseg2e32_v_f32m2
#define VSSEG2_FLOAT __riscv_vsseg2e32_v_f32m2
#define VLSEG2_FLOAT __riscv_vlseg2e32_v_f32m2x2
#define VSSEG2_FLOAT __riscv_vsseg2e32_v_f32m2x2
#define VBOOL_T vbool16_t
#define UINT_V_T vuint32m2_t
#define VID_V_UINT __riscv_vid_v_u32m2
@@ -46,11 +48,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#else
#define VSETVL(n) __riscv_vsetvl_e64m2(n)
#define FLOAT_V_T vfloat64m2_t
#define FLOAT_VX2_T vfloat64m2x2_t
#define VGET_VX2 __riscv_vget_v_f64m2x2_f64m2
#define VSET_VX2 __riscv_vset_v_f64m2_f64m2x2
#define VLEV_FLOAT __riscv_vle64_v_f64m2
#define VSEV_FLOAT __riscv_vse64_v_f64m2
#define VLSEG2_FLOAT __riscv_vlseg2e64_v_f64m2
#define VLSSEG2_FLOAT __riscv_vlsseg2e64_v_f64m2
#define VSSEG2_FLOAT __riscv_vsseg2e64_v_f64m2
#define VLSEG2_FLOAT __riscv_vlseg2e64_v_f64m2x2
#define VSSEG2_FLOAT __riscv_vsseg2e64_v_f64m2x2
#define VBOOL_T vbool32_t
#define UINT_V_T vuint64m2_t
#define VID_V_UINT __riscv_vid_v_u64m2
@@ -65,6 +69,7 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
FLOAT *ao;
FLOAT_VX2_T vax2;
FLOAT_V_T va0, va1;
size_t vl;
#ifdef UNIT
@@ -101,8 +106,8 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
else if (X < posY)
{
//va1 = VLEV_FLOAT(ao, vl);
VLSEG2_FLOAT(&va0, &va1, ao, vl);
VSSEG2_FLOAT(b, va0, va1, vl);
vax2 = VLSEG2_FLOAT(ao, vl);
VSSEG2_FLOAT(b, vax2, vl);
ao += lda * 2;
b += vl * 2;
@@ -115,7 +120,10 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
for (unsigned int j = 0; j < vl; j++)
{
//va1 = VLEV_FLOAT(ao, vl);
VLSEG2_FLOAT(&va0, &va1, ao, vl);
vax2 = VLSEG2_FLOAT(ao, vl);
va0 = VGET_VX2(vax2, 0);
va1 = VGET_VX2(vax2, 1);
vbool_cmp = VMSLTU_VX_UINT(vindex, j, vl);
va0 = VFMERGE_VFM_FLOAT(va0, ZERO, vbool_cmp, vl);
va1 = VFMERGE_VFM_FLOAT(va1, ZERO, vbool_cmp, vl);
@@ -124,7 +132,9 @@ int CNAME(BLASLONG m, BLASLONG n, FLOAT *a, BLASLONG lda, BLASLONG posX, BLASLON
va0 = VFMERGE_VFM_FLOAT(va0, ONE, vbool_eq, vl);
va1 = VFMERGE_VFM_FLOAT(va1, ZERO, vbool_eq, vl);
#endif
VSSEG2_FLOAT(b, va0, va1, vl);
vax2 = VSET_VX2(vax2, 0, va0);
vax2 = VSET_VX2(vax2, 1, va1);
VSSEG2_FLOAT(b, vax2, vl);
ao += lda * 2;
b += vl * 2;
}