From 24acdd6bbbd0f9726d867851f62e75ed4c35644a Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Fri, 26 Jul 2024 09:49:24 +0200 Subject: [PATCH 1/5] correct offset --- kernel/x86/scal.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/x86/scal.S b/kernel/x86/scal.S index 7e12a52ab..6620d3169 100644 --- a/kernel/x86/scal.S +++ b/kernel/x86/scal.S @@ -65,7 +65,7 @@ #else movl 32(%esp),%edi movl 36(%esp),%esi - movl 54(%esp),%ecx + movl 52(%esp),%ecx #endif ftst From a875304eb0da7cc7966cf45317cf57392192430f Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Fri, 26 Jul 2024 09:50:20 +0200 Subject: [PATCH 2/5] fix inverted conditional for NAN handling --- kernel/riscv64/scal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/riscv64/scal.c b/kernel/riscv64/scal.c index bebbed67e..bd53fcff9 100644 --- a/kernel/riscv64/scal.c +++ b/kernel/riscv64/scal.c @@ -43,7 +43,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLAS if ( (n <= 0) || (inc_x <= 0)) return(0); - if (dummy2 == 0) { + if (dummy2 == 1) { while(j < n) { From d9ae4609fb4c5623b30b06abcfef5f5e1ae30ab1 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Fri, 26 Jul 2024 11:15:33 +0200 Subject: [PATCH 3/5] remove C99 requirement --- utest/test_gemv.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/utest/test_gemv.c b/utest/test_gemv.c index c85ef3f38..d5b8d2c6c 100644 --- a/utest/test_gemv.c +++ b/utest/test_gemv.c @@ -12,6 +12,7 @@ CTEST(sgemv, 0_nan_inf) { + int i; blasint N = 17; blasint incX = 1; blasint incY = 1; @@ -24,19 +25,20 @@ CTEST(sgemv, 0_nan_inf) memset(A, 0, sizeof(A)); memset(X, 0, sizeof(X)); - for (int i = 0; i < (N - 1); i += 2) + for (i = 0; i < (N - 1); i += 2) { Y[i] = NAN; Y[i + 1] = INFINITY; } Y[N - 1] = NAN; BLASFUNC(sgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY); - for (int i = 0; i < N; i ++) + for (i = 0; i < N; i ++) ASSERT_TRUE(Y[i] == 0.0); } CTEST(sgemv, 0_nan_inf_incy_2) { + int i; blasint N = 17; blasint Ny = 33; blasint incX = 1; @@ -52,7 +54,7 @@ CTEST(sgemv, 0_nan_inf_incy_2) memset(A, 0, sizeof(A)); memset(X, 0, sizeof(X)); memset(Y, 0, sizeof(Y)); - for (int i = 0; i < (N - 1); i += 2) + for (i = 0; i < (N - 1); i += 2) { ay[0] = NAN; ay += 2; @@ -61,7 +63,7 @@ CTEST(sgemv, 0_nan_inf_incy_2) } Y[Ny - 1] = NAN; BLASFUNC(sgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY); - for (int i = 0; i < Ny; i ++) + for (i = 0; i < Ny; i ++) ASSERT_TRUE(Y[i] == 0.0); } @@ -70,6 +72,7 @@ CTEST(sgemv, 0_nan_inf_incy_2) #ifdef BUILD_DOUBLE CTEST(dgemv, 0_nan_inf) { + int i; blasint N = 17; blasint incX = 1; blasint incY = 1; @@ -82,19 +85,20 @@ CTEST(dgemv, 0_nan_inf) memset(A, 0, sizeof(A)); memset(X, 0, sizeof(X)); - for (int i = 0; i < (N - 1); i += 2) + for (i = 0; i < (N - 1); i += 2) { Y[i] = NAN; Y[i + 1] = INFINITY; } Y[N - 1] = NAN; BLASFUNC(dgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY); - for (int i = 0; i < N; i ++) + for (i = 0; i < N; i ++) ASSERT_TRUE(Y[i] == 0.0); } CTEST(dgemv, 0_nan_inf_incy_2) { + int i; blasint N = 17; blasint Ny = 33; blasint incX = 1; @@ -110,7 +114,7 @@ CTEST(dgemv, 0_nan_inf_incy_2) memset(A, 0, sizeof(A)); memset(X, 0, sizeof(X)); memset(Y, 0, sizeof(Y)); - for (int i = 0; i < (N - 1); i += 2) + for (i = 0; i < (N - 1); i += 2) { ay[0] = NAN; ay += 2; @@ -119,7 +123,7 @@ CTEST(dgemv, 0_nan_inf_incy_2) } Y[Ny - 1] = NAN; BLASFUNC(dgemv)(&trans, &N, &N, &alpha, A, &N, X, &incX, &beta, Y, &incY); - for (int i = 0; i < Ny; i ++) + for (i = 0; i < Ny; i ++) ASSERT_TRUE(Y[i] == 0.0); } From db5328e85bb1a9e11781ab92ce15273c28dffec0 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Fri, 26 Jul 2024 12:45:39 +0200 Subject: [PATCH 4/5] make array dimensions constant --- utest/test_gemv.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/utest/test_gemv.c b/utest/test_gemv.c index d5b8d2c6c..deae6d2a8 100644 --- a/utest/test_gemv.c +++ b/utest/test_gemv.c @@ -7,13 +7,14 @@ #ifndef INFINITY #define INFINITY 1.0/0.0 #endif +#define N 17 +#define Ny 33 #ifdef BUILD_SINGLE CTEST(sgemv, 0_nan_inf) { int i; - blasint N = 17; blasint incX = 1; blasint incY = 1; float alpha = 0.0; @@ -39,8 +40,6 @@ CTEST(sgemv, 0_nan_inf) CTEST(sgemv, 0_nan_inf_incy_2) { int i; - blasint N = 17; - blasint Ny = 33; blasint incX = 1; blasint incY = 2; float alpha = 0.0; @@ -73,7 +72,6 @@ CTEST(sgemv, 0_nan_inf_incy_2) CTEST(dgemv, 0_nan_inf) { int i; - blasint N = 17; blasint incX = 1; blasint incY = 1; double alpha = 0.0; @@ -99,8 +97,6 @@ CTEST(dgemv, 0_nan_inf) CTEST(dgemv, 0_nan_inf_incy_2) { int i; - blasint N = 17; - blasint Ny = 33; blasint incX = 1; blasint incY = 2; double alpha = 0.0; From a090011fbff0d15b63a7edcc0156ed790e87f4b1 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Fri, 26 Jul 2024 12:56:12 +0200 Subject: [PATCH 5/5] just use numeric constants in dimensions --- utest/test_gemv.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/utest/test_gemv.c b/utest/test_gemv.c index deae6d2a8..dab6d2f11 100644 --- a/utest/test_gemv.c +++ b/utest/test_gemv.c @@ -7,22 +7,21 @@ #ifndef INFINITY #define INFINITY 1.0/0.0 #endif -#define N 17 -#define Ny 33 #ifdef BUILD_SINGLE CTEST(sgemv, 0_nan_inf) { int i; + blasint N = 17; blasint incX = 1; blasint incY = 1; float alpha = 0.0; float beta = 0.0; char trans = 'N'; - float A[N * N]; - float X[N]; - float Y[N]; + float A[17 * 17]; + float X[17]; + float Y[17]; memset(A, 0, sizeof(A)); memset(X, 0, sizeof(X)); @@ -40,14 +39,16 @@ CTEST(sgemv, 0_nan_inf) CTEST(sgemv, 0_nan_inf_incy_2) { int i; + blasint N = 17; + blasint Ny = 33; blasint incX = 1; blasint incY = 2; float alpha = 0.0; float beta = 0.0; char trans = 'N'; - float A[N * N]; - float X[N]; - float Y[Ny]; + float A[17 * 17]; + float X[17]; + float Y[33]; float *ay = Y; memset(A, 0, sizeof(A)); @@ -72,14 +73,15 @@ CTEST(sgemv, 0_nan_inf_incy_2) CTEST(dgemv, 0_nan_inf) { int i; + blasint N = 17; blasint incX = 1; blasint incY = 1; double alpha = 0.0; double beta = 0.0; char trans = 'N'; - double A[N * N]; - double X[N]; - double Y[N]; + double A[17 * 17]; + double X[17]; + double Y[17]; memset(A, 0, sizeof(A)); memset(X, 0, sizeof(X)); @@ -97,14 +99,16 @@ CTEST(dgemv, 0_nan_inf) CTEST(dgemv, 0_nan_inf_incy_2) { int i; + blasint N = 17; + blasint Ny = 33; blasint incX = 1; blasint incY = 2; double alpha = 0.0; double beta = 0.0; char trans = 'N'; - double A[N * N]; - double X[N]; - double Y[Ny]; + double A[17 * 17]; + double X[17]; + double Y[33]; double *ay = Y; memset(A, 0, sizeof(A));