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:
committed by
Andrey Sokolov
parent
88e994116c
commit
b193ea3d7b
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user