diff --git a/kernel/wasm/KERNEL.WASM128_GENERIC b/kernel/wasm/KERNEL.WASM128_GENERIC index 0265085b1c..f6756ec171 100644 --- a/kernel/wasm/KERNEL.WASM128_GENERIC +++ b/kernel/wasm/KERNEL.WASM128_GENERIC @@ -96,7 +96,7 @@ CGEMVTKERNEL = ../riscv64/zgemv_t.c ZGEMVTKERNEL = ../riscv64/zgemv_t.c STRMMKERNEL = ../generic/trmmkernel_4x4.c -DTRMMKERNEL = ../generic/trmmkernel_4x4.c +DTRMMKERNEL = trmmkernel_4x4_wasm128.c CTRMMKERNEL = ../generic/ztrmmkernel_2x2.c ZTRMMKERNEL = ../generic/ztrmmkernel_2x2.c diff --git a/kernel/wasm/trmmkernel_4x4_wasm128.c b/kernel/wasm/trmmkernel_4x4_wasm128.c new file mode 100644 index 0000000000..a090162079 --- /dev/null +++ b/kernel/wasm/trmmkernel_4x4_wasm128.c @@ -0,0 +1,945 @@ +#include "common.h" +#include +#if defined(__wasm_simd128__) +#include +#if defined(__wasm_relaxed_simd__) +#define MADD_F32(a, b, c) wasm_f32x4_relaxed_madd((a), (b), (c)) +#define MADD_F64(a, b, c) wasm_f64x2_relaxed_madd((a), (b), (c)) +#else +#define MADD_F32(a, b, c) wasm_f32x4_add((c), wasm_f32x4_mul((a), (b))) +#define MADD_F64(a, b, c) wasm_f64x2_add((c), wasm_f64x2_mul((a), (b))) +#endif +#endif + +int CNAME(BLASLONG bm,BLASLONG bn,BLASLONG bk,FLOAT alpha,FLOAT* ba,FLOAT* bb,FLOAT* C,BLASLONG ldc ,BLASLONG offset) +{ + + BLASLONG i,j,k; + FLOAT *C0,*C1,*C2,*C3,*ptrba,*ptrbb; + + FLOAT res0_0; + FLOAT res0_1; + FLOAT res0_2; + FLOAT res0_3; + + FLOAT res1_0; + FLOAT res1_1; + FLOAT res1_2; + FLOAT res1_3; + + FLOAT res2_0; + FLOAT res2_1; + FLOAT res2_2; + FLOAT res2_3; + + FLOAT res3_0; + FLOAT res3_1; + FLOAT res3_2; + FLOAT res3_3; + + FLOAT a0; + FLOAT a1; + + FLOAT b0; + FLOAT b1; + FLOAT b2; + FLOAT b3; + + BLASLONG off, temp; + + bool left; + bool transposed; + bool backwards; + +#ifdef LEFT + left = true; +#else + left = false; +#endif + +#ifdef TRANSA + transposed = true; +#else + transposed = false; +#endif + + backwards = left != transposed; + + if (!left) { + off = -offset; + } + + + for (j=0; j