From b23efc5846028710a9f38e286e7509d7febd4e8c Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 24 May 2025 17:49:45 +0200 Subject: [PATCH 01/26] add handling of dummy2 flag --- kernel/zarch/cscal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index e623f306b9..e1134347a7 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -205,7 +205,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (inc_x != 1) { inc_x <<= 1; - if (da_r == 0.0) { + if (da_r == 0.0 && !dummy2) { BLASLONG n1 = n & -2; @@ -334,7 +334,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, alpha[0] = da_r; alpha[1] = da_i; - if (da_r == 0.0) + if (da_r == 0.0 &&!dummy2) if (da_i == 0) cscal_kernel_16_zero(n1, x); else From 9df88344fc5b1c349f350e0075fbc12ff8ad4732 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 24 May 2025 08:50:49 -0700 Subject: [PATCH 02/26] Add files via upload --- interface/zscal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/zscal.c b/interface/zscal.c index 498377343c..0e52d113be 100644 --- a/interface/zscal.c +++ b/interface/zscal.c @@ -98,7 +98,7 @@ void CNAME(blasint n, FLOAT alpha_r, void *vx, blasint incx){ if (nthreads == 1) { #endif - SCAL_K(n, 0, 0, alpha[0], alpha[1], x, incx, NULL, 0, NULL, 0); + SCAL_K(n, 0, 0, alpha[0], alpha[1], x, incx, NULL, 0, NULL, 1); #ifdef SMP } else { @@ -108,7 +108,7 @@ void CNAME(blasint n, FLOAT alpha_r, void *vx, blasint incx){ mode = BLAS_SINGLE | BLAS_COMPLEX; #endif - blas_level1_thread(mode, n, 0, 0, alpha, x, incx, NULL, 0, NULL, 0, (int (*)(void))SCAL_K, nthreads); + blas_level1_thread(mode, n, 0, 0, alpha, x, incx, NULL, 0, NULL, 1, (int (*)(void))SCAL_K, nthreads); } #endif From 05ed745830bb61cd078e1d4cd86afe40789498d7 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 24 May 2025 08:51:55 -0700 Subject: [PATCH 03/26] Add files via upload --- utest/test_gemv.c | 484 +++++++++++++++++++++++++++++++++++++++++++++ utest/test_zscal.c | 54 +++++ 2 files changed, 538 insertions(+) diff --git a/utest/test_gemv.c b/utest/test_gemv.c index dab6d2f11f..a0ac3e69e1 100644 --- a/utest/test_gemv.c +++ b/utest/test_gemv.c @@ -128,3 +128,487 @@ CTEST(dgemv, 0_nan_inf_incy_2) } #endif + +#ifdef BUILD_COMPLEX + +CTEST(cgemv, 0_nan_inf) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 1; + float alpha[2] = {0.0, 0.0}; + float beta[2] = {0.0, 0.0}; + char trans = 'N'; + float A[17 * 17 * 4]; + float X[17 * 2]; + float Y[17 * 2]; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + for (i = 0; i < (2 * N - 2); i += 4) + { + Y[i] = NAN; + Y[i + 1] = NAN; + + Y[i + 2] = INFINITY; + Y[i + 3] = INFINITY; + } + Y[2 * N - 1] = NAN; + Y[2 * N - 2] = NAN; + BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 2 * N; i ++)fprintf(stderr,"should be zero %g\n",Y[i]); + for (i = 0; i < 2 * N; i ++) + ASSERT_TRUE(Y[i] == 0.0); +} + +CTEST(cgemv, 0_nan_inf_incy_2) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 2; + float alpha[2] = {0.0, 0.0}; + float beta[2] = {0.0, 0.0}; + char trans = 'N'; + float A[17 * 17 * 4]; + float X[17]; + float Y[17 * 2 * 2]; + float *ay = Y; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + memset(Y, 0, sizeof(Y)); + for (i = 0; i < (2 * N - 2); i += 4) + { + ay[0] = NAN; + ay[1] = NAN; + ay += 4; + ay[0] = INFINITY; + ay[1] = INFINITY; + ay += 4; + } + Y[4 * N - 4] = NAN; + Y[4 * N - 3] = NAN; + BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 4 * N; i ++) + ASSERT_TRUE(Y[i] == 0.0); +} + +CTEST(cgemv, 0_2_nan_1_inf_1) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 1; + float alpha[2] = {0.0, 0.0}; + float beta[2] = {0.0, 2.0}; + char trans = 'N'; + float A[17 * 17 * 4]; + float X[17 * 2]; + float Y[17 * 2]; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + for (i = 0; i < (2 * N - 2); i += 4) + { + Y[i] = NAN; + Y[i + 1] = 1.0; + + Y[i + 2] = INFINITY; + Y[i + 3] = 1.0; + } + Y[2 * N - 2] = NAN; + Y[2 * N - 1] = 1.0; + BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 2 * N; i += 2) { + fprintf(stderr,"should be NAN %g\n",Y[i]); + if ((i>>1)%2)fprintf(stderr,"should be INF %g\n",Y[i+1]); + else fprintf(stderr,"should be NAN too %g\n",Y[i+1]); + if ((i >> 1) % 2){ + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isinf(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } +} + +CTEST(cgemv, 0_2_nan_1_inf_1_incy_2) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 2; + float alpha[2] = {0.0, 0.0}; + float beta[2] = {0.0, 2.0}; + char trans = 'N'; + float A[17 * 17 * 4]; + float X[17]; + float Y[17 * 2 * 2]; + float *ay = Y; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + memset(Y, 0, sizeof(Y)); + for (i = 0; i < (2 * N - 2); i += 4) + { + ay[0] = NAN; + ay[1] = 1.0; + ay += 4; + ay[0] = INFINITY; + ay[1] = 1.0; + ay += 4; + } + Y[4 * N - 4] = NAN; + Y[4 * N - 3] = 1.0; + BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 4 * N; i += 2) { + if ((i >> 1) % 2) { + ASSERT_TRUE(Y[i] == 0.0); + ASSERT_TRUE(Y[i + 1] == 0.0); + } + else { + if ((i >> 2) % 2) { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isinf(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } + } +} + +CTEST(cgemv, 2_0_nan_1_inf_1) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 1; + float alpha[2] = {0.0, 0.0}; + float beta[2] = {2.0, 0.0}; + char trans = 'N'; + float A[17 * 17 * 4]; + float X[17 * 2]; + float Y[17 * 2]; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + for (i = 0; i < (2 * N - 2); i += 4) + { + Y[i] = NAN; + Y[i + 1] = 1.0; + + Y[i + 2] = INFINITY; + Y[i + 3] = 1.0; + } + Y[2 * N - 2] = NAN; + Y[2 * N - 1] = 1.0; + BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 2 * N; i += 2) { + if ((i>>1)%2)fprintf(stderr,"Yi should be INF %g\n",Y[i]); + else fprintf(stderr,"Yi should be NAN %g\n",Y[i]); + fprintf(stderr,"Yi+1 should be NAN %g\n",Y[i+1]); + if ((i >> 1) % 2){ + ASSERT_TRUE(isinf(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } +} + +CTEST(cgemv, 2_0_nan_1_inf_1_incy_2) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 2; + float alpha[2] = {0.0, 0.0}; + float beta[2] = {2.0, 0.0}; + char trans = 'N'; + float A[17 * 17 * 4]; + float X[17]; + float Y[17 * 2 * 2]; + float *ay = Y; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + memset(Y, 0, sizeof(Y)); + for (i = 0; i < (2 * N - 2); i += 4) + { + ay[0] = NAN; + ay[1] = 1.0; + ay += 4; + ay[0] = INFINITY; + ay[1] = 1.0; + ay += 4; + } + Y[4 * N - 4] = NAN; + Y[4 * N - 3] = 1.0; + BLASFUNC(cgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 4 * N; i += 2) { + if ((i >> 1) % 2) { + ASSERT_TRUE(Y[i] == 0.0); + ASSERT_TRUE(Y[i + 1] == 0.0); + } + else { + if ((i >> 2) % 2) { + ASSERT_TRUE(isinf(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } + } +} + +#endif + +#ifdef BUILD_COMPLEX16 + +CTEST(zgemv, 0_nan_inf) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 1; + double alpha[2] = {0.0, 0.0}; + double beta[2] = {0.0, 0.0}; + char trans = 'N'; + double A[17 * 17 * 4]; + double X[17 * 2]; + double Y[17 * 2]; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + for (i = 0; i < (2 * N - 2); i += 4) + { + Y[i] = NAN; + Y[i + 1] = NAN; + + Y[i + 2] = INFINITY; + Y[i + 3] = INFINITY; + } + Y[2 * N - 1] = NAN; + Y[2 * N - 2] = NAN; + BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 2 * N; i ++) + ASSERT_TRUE(Y[i] == 0.0); +} + +CTEST(zgemv, 0_nan_inf_incy_2) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 2; + double alpha[2] = {0.0, 0.0}; + double beta[2] = {0.0, 0.0}; + char trans = 'N'; + double A[17 * 17 * 4]; + double X[17]; + double Y[17 * 2 * 2]; + double *ay = Y; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + memset(Y, 0, sizeof(Y)); + for (i = 0; i < (2 * N - 2); i += 4) + { + ay[0] = NAN; + ay[1] = NAN; + ay += 4; + ay[0] = INFINITY; + ay[1] = INFINITY; + ay += 4; + } + Y[4 * N - 4] = NAN; + Y[4 * N - 3] = NAN; + BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 4 * N; i ++) + ASSERT_TRUE(Y[i] == 0.0); +} + +CTEST(zgemv, 0_2_nan_1_inf_1) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 1; + double alpha[2] = {0.0, 0.0}; + double beta[2] = {0.0, 2.0}; + char trans = 'N'; + double A[17 * 17 * 4]; + double X[17 * 2]; + double Y[17 * 2]; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + for (i = 0; i < (2 * N - 2); i += 4) + { + Y[i] = NAN; + Y[i + 1] = 1.0; + + Y[i + 2] = INFINITY; + Y[i + 3] = 1.0; + } + Y[2 * N - 2] = NAN; + Y[2 * N - 1] = 1.0; + BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 2 * N; i += 2) { + if ((i >> 1) % 2){ + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isinf(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } +} + +CTEST(zgemv, 0_2_nan_1_inf_1_incy_2) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 2; + double alpha[2] = {0.0, 0.0}; + double beta[2] = {0.0, 2.0}; + char trans = 'N'; + double A[17 * 17 * 4]; + double X[17]; + double Y[17 * 2 * 2]; + double *ay = Y; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + memset(Y, 0, sizeof(Y)); + for (i = 0; i < (2 * N - 2); i += 4) + { + ay[0] = NAN; + ay[1] = 1.0; + ay += 4; + ay[0] = INFINITY; + ay[1] = 1.0; + ay += 4; + } + Y[4 * N - 4] = NAN; + Y[4 * N - 3] = 1.0; + BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 4 * N; i += 2) { + if ((i >> 1) % 2) { + ASSERT_TRUE(Y[i] == 0.0); + ASSERT_TRUE(Y[i + 1] == 0.0); + } + else { + if ((i >> 2) % 2) { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isinf(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } + } +} + +CTEST(zgemv, 2_0_nan_1_inf_1) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 1; + double alpha[2] = {0.0, 0.0}; + double beta[2] = {2.0, 0.0}; + char trans = 'N'; + double A[17 * 17 * 4]; + double X[17 * 2]; + double Y[17 * 2]; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + for (i = 0; i < (2 * N - 2); i += 4) + { + Y[i] = NAN; + Y[i + 1] = 1.0; + + Y[i + 2] = INFINITY; + Y[i + 3] = 1.0; + } + Y[2 * N - 2] = NAN; + Y[2 * N - 1] = 1.0; + BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 2 * N; i += 2) { + if ((i >> 1) % 2)fprintf(stderr,"Yi sollte inf sein %g\n",Y[i]); + else fprintf(stderr,"Yi sollte nan sein %g\n",Y[i]); + fprintf(stderr,"Yi+1 sollte nan sein %g\n",Y[i+1]); + if ((i >> 1) % 2){ + ASSERT_TRUE(isinf(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } +} + +CTEST(zgemv, 2_0_nan_1_inf_1_incy_2) +{ + int i; + blasint N = 17; + blasint incX = 1; + blasint incY = 2; + double alpha[2] = {0.0, 0.0}; + double beta[2] = {2.0, 0.0}; + char trans = 'N'; + double A[17 * 17 * 4]; + double X[17]; + double Y[17 * 2 * 2]; + double *ay = Y; + + memset(A, 0, sizeof(A)); + memset(X, 0, sizeof(X)); + memset(Y, 0, sizeof(Y)); + for (i = 0; i < (2 * N - 2); i += 4) + { + ay[0] = NAN; + ay[1] = 1.0; + ay += 4; + ay[0] = INFINITY; + ay[1] = 1.0; + ay += 4; + } + Y[4 * N - 4] = NAN; + Y[4 * N - 3] = 1.0; + BLASFUNC(zgemv)(&trans, &N, &N, alpha, A, &N, X, &incX, beta, Y, &incY); + for (i = 0; i < 4 * N; i += 2) { + if ((i >> 1) % 2) { + ASSERT_TRUE(Y[i] == 0.0); + ASSERT_TRUE(Y[i + 1] == 0.0); + } + else { + if ((i >> 2) % 2) { + ASSERT_TRUE(isinf(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + else { + ASSERT_TRUE(isnan(Y[i])); + ASSERT_TRUE(isnan(Y[i + 1])); + } + } + } +} + +#endif diff --git a/utest/test_zscal.c b/utest/test_zscal.c index 09e63752c2..57d78b6901 100644 --- a/utest/test_zscal.c +++ b/utest/test_zscal.c @@ -442,6 +442,33 @@ CTEST(cscal, i_0inf_inc_2) ASSERT_TRUE(isnan(inf[17])); } +CTEST(cscal, i00_NAN) +{ + blasint N=9; + blasint incX=1; + float i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 }; + float nan[] = {NAN, 0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0}; + BLASFUNC(cscal)(&N, i, nan, &incX); + ASSERT_TRUE(isnan(nan[0])); + ASSERT_TRUE(isnan(nan[1])); + ASSERT_TRUE(isnan(nan[16])); + ASSERT_TRUE(isnan(nan[17])); +} + +CTEST(cscal, i00_NAN_incx_2) +{ + blasint N=9; + blasint incX=2; + float i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 }; + float nan[] = {0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, + 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN}; + BLASFUNC(cscal)(&N, i, nan, &incX); + ASSERT_TRUE(isnan(nan[0])); + ASSERT_TRUE(isnan(nan[1])); + ASSERT_TRUE(isnan(nan[16])); + ASSERT_TRUE(isnan(nan[17])); +} + #endif #ifdef BUILD_COMPLEX16 @@ -588,4 +615,31 @@ CTEST(zscal, i_0inf_inc_2) ASSERT_TRUE(isnan(inf[17])); } +CTEST(zscal, i00_NAN) +{ + blasint N=9; + blasint incX=1; + double i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 }; + double nan[] = {NAN, 0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0, NAN,0}; + BLASFUNC(zscal)(&N, i, nan, &incX); + ASSERT_TRUE(isnan(nan[0])); + ASSERT_TRUE(isnan(nan[1])); + ASSERT_TRUE(isnan(nan[16])); + ASSERT_TRUE(isnan(nan[17])); +} + +CTEST(zscal, i00_NAN_incx_2) +{ + blasint N=9; + blasint incX=2; + double i[] = {0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0 }; + double nan[] = {0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, + 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN, 0,NAN}; + BLASFUNC(zscal)(&N, i, nan, &incX); + ASSERT_TRUE(isnan(nan[0])); + ASSERT_TRUE(isnan(nan[1])); + ASSERT_TRUE(isnan(nan[16])); + ASSERT_TRUE(isnan(nan[17])); +} + #endif From 3c150610b7f822edbb5f2b58c6d2bbb95d4730d8 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 24 May 2025 18:40:45 +0200 Subject: [PATCH 04/26] Update cscal.c --- kernel/zarch/cscal.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index e1134347a7..19a42380c8 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -205,11 +205,11 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (inc_x != 1) { inc_x <<= 1; - if (da_r == 0.0 && !dummy2) { + if (da_r == 0.0) { BLASLONG n1 = n & -2; - if (da_i == 0.0) { + if (da_i == 0.0 && dummy2 == 0) { while (j < n1) { @@ -276,7 +276,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } else { - if (da_i == 0.0) { + if (da_i == 0.0 && dummy2 == 0) { BLASLONG n1 = n & -2; while (j < n1) { @@ -334,8 +334,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, alpha[0] = da_r; alpha[1] = da_i; - if (da_r == 0.0 &&!dummy2) - if (da_i == 0) + if (da_r == 0.0) + if (da_i == 0 && dummy2 == 0) cscal_kernel_16_zero(n1, x); else cscal_kernel_16_zero_r(n1, alpha, x); @@ -350,7 +350,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (da_r == 0.0 || isnan(da_r)) { - if (da_i == 0.0) { + if (da_i == 0.0 && dummy2 == 0) { float res = 0.0; if (isnan(da_r)) res = da_r; while (j < n) { From 1c3fcfdbb33dcee74c8b420e2f3ff44e4a1d6cb8 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 24 May 2025 20:04:17 +0200 Subject: [PATCH 05/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 19a42380c8..887ce215fb 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -276,7 +276,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } else { - if (da_i == 0.0 && dummy2 == 0) { + if (da_i == 0.0) { BLASLONG n1 = n & -2; while (j < n1) { From 2a175404697ce5876341549ec41776bfcec1bbd4 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 24 May 2025 22:46:39 +0200 Subject: [PATCH 06/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 887ce215fb..5082e8fd7a 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -339,7 +339,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, cscal_kernel_16_zero(n1, x); else cscal_kernel_16_zero_r(n1, alpha, x); - else if (da_i == 0) + else if (da_i == 0 && !isnan(da_r)) cscal_kernel_16_zero_i(n1, alpha, x); else cscal_kernel_16(n1, da_r, da_i, x); From 62d8047c427614927543632f85de1f0f2f6b1936 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sat, 24 May 2025 23:22:53 +0200 Subject: [PATCH 07/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 5082e8fd7a..b443b31de2 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -350,7 +350,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (da_r == 0.0 || isnan(da_r)) { - if (da_i == 0.0 && dummy2 == 0) { + if (da_i == 0.0) { float res = 0.0; if (isnan(da_r)) res = da_r; while (j < n) { From 234bba3810ebb65d9b61934533bd676e2dce7d90 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 00:16:57 +0200 Subject: [PATCH 08/26] Update cscal.c --- kernel/zarch/cscal.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index b443b31de2..a40b0789a6 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -337,8 +337,12 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (da_r == 0.0) if (da_i == 0 && dummy2 == 0) cscal_kernel_16_zero(n1, x); - else + else { + if (dummy2 == 0) cscal_kernel_16_zero_r(n1, alpha, x); + else + cscal_kernel_16(n1, alpha, x); + } else if (da_i == 0 && !isnan(da_r)) cscal_kernel_16_zero_i(n1, alpha, x); else From ef01810dde3724be0615ec5ea7287f48576fd4e5 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 00:25:45 +0200 Subject: [PATCH 09/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index a40b0789a6..61b5e6a55d 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -341,7 +341,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (dummy2 == 0) cscal_kernel_16_zero_r(n1, alpha, x); else - cscal_kernel_16(n1, alpha, x); + cscal_kernel_16(n1, da_r, da_i, x); } else if (da_i == 0 && !isnan(da_r)) cscal_kernel_16_zero_i(n1, alpha, x); From 7b915870eb9df6d2bd194bf495e947082b47b335 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 12:29:26 +0200 Subject: [PATCH 10/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 61b5e6a55d..7e01373120 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -358,7 +358,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, float res = 0.0; if (isnan(da_r)) res = da_r; while (j < n) { - + if (!dummy2 || !isnan(x[i])) x[i] = res; x[i + 1] = res; i += 2; From 41cd46c2a902cc53350e339e3e49187c3f146b95 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 12:55:18 +0200 Subject: [PATCH 11/26] Update cscal.c --- kernel/zarch/cscal.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 7e01373120..d1286ad60e 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -358,7 +358,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, float res = 0.0; if (isnan(da_r)) res = da_r; while (j < n) { - if (!dummy2 || !isnan(x[i])) + if (dummy2) + if (isnan(x[i])|| !isnan(x[i+1])) rea=NAN; x[i] = res; x[i + 1] = res; i += 2; From b1008985ae1424c2ef398f50386ed0581dd222eb Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 13:04:43 +0200 Subject: [PATCH 12/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index d1286ad60e..6859c4fcc2 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -359,7 +359,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (isnan(da_r)) res = da_r; while (j < n) { if (dummy2) - if (isnan(x[i])|| !isnan(x[i+1])) rea=NAN; + if (isnan(x[i])|| !isnan(x[i+1])) res=NAN; x[i] = res; x[i + 1] = res; i += 2; From 80bf765839e3283e1c897ccc316532cc2a884d5c Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 13:22:29 +0200 Subject: [PATCH 13/26] Update cscal.c --- kernel/zarch/cscal.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 6859c4fcc2..7d5e9aa19f 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -234,7 +234,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } else { while (j < n1) { - if (isnan(x[i]) || isinf(x[i])) + if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) temp0 = NAN; else temp0 = -da_i * x[i + 1]; @@ -243,7 +243,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, else x[i + 1] = NAN; x[i] = temp0; - if (isnan(x[i+inc_x]) || isinf(x[i+inc_x])) + if (isnan(x[i+inc_x]) || isinf(x[i+inc_x]) || isnan(x[i+1+inc_x])) temp1 = NAN; else temp1 = -da_i * x[i + 1 + inc_x]; @@ -258,7 +258,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } while (j < n) { - if (isnan(x[i]) || isinf(x[i])) + if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) temp0 = NAN; else temp0 = -da_i * x[i + 1]; From a1efb036100ef89093ad2997bc2dbf3dc4d3af04 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 13:48:25 +0200 Subject: [PATCH 14/26] Update cscal.c --- kernel/zarch/cscal.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 7d5e9aa19f..ec98281b3f 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -209,8 +209,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, BLASLONG n1 = n & -2; - if (da_i == 0.0 && dummy2 == 0) { - + if (da_i == 0.0) { + if (dummy2 == 0) { while (j < n1) { x[i] = 0.0; @@ -230,7 +230,39 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, j++; } + } else { + while (j < n1) { + if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) { + x[i] = NAN; + x[i+1] = NAN; + }else{ + x[i] = 0.0; + x[i + 1] = 0.0; + } + if (isnan(x[i+incx]) || isinf(x[i+incx]) || isnan(x[i+1+incx])) { + x[i + inc_x] = NAN; + x[i + 1 + inc_x] = NAN; + } else { + x[i + inc_x] = 0.0; + x[i + 1 + inc_x] = 0.0; + } + i += 2 * inc_x; + j += 2; + } + + while (j < n) { + if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) { + x[i] = NAN; + x[i+1] = NAN; + }else{ + x[i] = 0.0; + x[i + 1] = 0.0; + } + i += inc_x; + j++; + + } } else { while (j < n1) { From 35256671dee51315a0cd151641e6df9e4be040e2 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 15:28:05 +0200 Subject: [PATCH 15/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index ec98281b3f..a8ecc142cb 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -239,7 +239,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, x[i] = 0.0; x[i + 1] = 0.0; } - if (isnan(x[i+incx]) || isinf(x[i+incx]) || isnan(x[i+1+incx])) { + if (isnan(x[i+inc_x]) || isinf(x[i+inc_x]) || isnan(x[i+1+inc_x])) { x[i + inc_x] = NAN; x[i + 1 + inc_x] = NAN; } else { From 344b14a3744c52e759b82c92e618757bf5648949 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 15:37:08 +0200 Subject: [PATCH 16/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index a8ecc142cb..84839a89c7 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -261,7 +261,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } i += inc_x; j++; - + } } } else { From ae5bdb76fb854a0f33fb912bb6132b797a66c901 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 16:10:10 +0200 Subject: [PATCH 17/26] Update cscal.c --- kernel/zarch/cscal.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 84839a89c7..cec7b3fb33 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -266,7 +266,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } else { while (j < n1) { - if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) + if (isnan(x[i]) || isinf(x[i])) temp0 = NAN; else temp0 = -da_i * x[i + 1]; @@ -275,7 +275,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, else x[i + 1] = NAN; x[i] = temp0; - if (isnan(x[i+inc_x]) || isinf(x[i+inc_x]) || isnan(x[i+1+inc_x])) + if (isnan(x[i+inc_x]) || isinf(x[i+inc_x])) temp1 = NAN; else temp1 = -da_i * x[i + 1 + inc_x]; @@ -290,7 +290,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } while (j < n) { - if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) + if (isnan(x[i]) || isinf(x[i])) temp0 = NAN; else temp0 = -da_i * x[i + 1]; From 4f9be6d84320d4c81efa4828812fee54dd1780f9 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 18:26:46 +0200 Subject: [PATCH 18/26] Update cscal.c --- kernel/zarch/cscal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index cec7b3fb33..30c8acedfb 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -308,7 +308,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } else { - if (da_i == 0.0) { + if (da_i == 0.0 && dummy2) { BLASLONG n1 = n & -2; while (j < n1) { From 184a5271656d0ff11e460727232332ff43509f79 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 18:49:11 +0200 Subject: [PATCH 19/26] Update cscal.c --- kernel/zarch/cscal.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 30c8acedfb..1c67c45ce9 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -435,7 +435,18 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, while (j < n) { temp0 = da_r * x[i]; - x[i + 1] = da_r * x[i + 1]; + if (dummy2) { + if (isnan(x[i])||isinf(x[i]))temp0 = NAN; + if (isnan(x[i+1])||isinf(x[i+1])) + x[i+1] = NAN; + else + x[i+1] = da_r * x[i + 1]; + } else { + if (isnan(x[i])) + x[i + 1] = NAN; + else + x[i + 1] = da_r * x[i + 1]; + } x[i] = temp0; i += 2; j++; From c7285a1406dff5020892cb5d63945cfe1829d5dc Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 19:09:02 +0200 Subject: [PATCH 20/26] Update cscal.c --- kernel/zarch/cscal.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 1c67c45ce9..7937537180 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -391,7 +391,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (isnan(da_r)) res = da_r; while (j < n) { if (dummy2) - if (isnan(x[i])|| !isnan(x[i+1])) res=NAN; + if (isnan(x[i])|| isnan(x[i+1])) res=NAN; x[i] = res; x[i + 1] = res; i += 2; @@ -419,7 +419,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, x[i + 1] = da_i * x[i]; else x[i + 1] = NAN; - if (x[i] == x[i]) + if (!isnan(x[i])) x[i] = temp0; i += 2; j++; @@ -459,7 +459,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, temp0 = da_r * x[i] - da_i * x[i + 1]; x[i + 1] = da_r * x[i + 1] + da_i * x[i]; - x[i] = temp0; + if (!isnan(x[i])) x[i] = temp0; i += 2; j++; From e54f43bb45ff2ad9b90d1a31a495394d00000684 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 19:41:25 +0200 Subject: [PATCH 21/26] Update cscal.c --- kernel/zarch/cscal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 7937537180..9aa0cd7d10 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -370,9 +370,9 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, if (da_i == 0 && dummy2 == 0) cscal_kernel_16_zero(n1, x); else { - if (dummy2 == 0) +/* if (dummy2 == 0) cscal_kernel_16_zero_r(n1, alpha, x); - else + else*/ cscal_kernel_16(n1, da_r, da_i, x); } else if (da_i == 0 && !isnan(da_r)) From 16772ed07e8036937e172cc3133cd3fcb1b4cbdb Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 19:56:39 +0200 Subject: [PATCH 22/26] Update cscal.c --- kernel/zarch/cscal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/zarch/cscal.c b/kernel/zarch/cscal.c index 9aa0cd7d10..1c9f2cda73 100644 --- a/kernel/zarch/cscal.c +++ b/kernel/zarch/cscal.c @@ -375,8 +375,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, else*/ cscal_kernel_16(n1, da_r, da_i, x); } - else if (da_i == 0 && !isnan(da_r)) - cscal_kernel_16_zero_i(n1, alpha, x); +/* else if (da_i == 0 && !isnan(da_r)) + cscal_kernel_16/*_zero_i(n1, alpha, x);*/ else cscal_kernel_16(n1, da_r, da_i, x); From 1b716940e85d8b630599672407e3054e096bfb29 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 13:06:05 -0700 Subject: [PATCH 23/26] handle dummy2 flag --- kernel/zarch/zscal.c | 50 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/kernel/zarch/zscal.c b/kernel/zarch/zscal.c index 36466a6e0a..ff2306c113 100644 --- a/kernel/zarch/zscal.c +++ b/kernel/zarch/zscal.c @@ -208,7 +208,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, BLASLONG n1 = n & -2; if (da_i == 0.0) { - + if (dummy2 == 0) { while (j < n1) { x[i] = 0.0; @@ -228,6 +228,34 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, j++; } + } else { + while (j < n1) { + if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) { + x[i] = NAN; + x[i+1] = NAN; + } else { + x[i] = 0.0; + x[i+1] = 0.0; + } + if (isnan(x[i+inc_x]) || isinf(x[i+inc_x]) || isnan(x[i+inc_x+1])) { + x[i + inc_x] = NAN; + x[i + inc_x + 1] = NAN; + } else { + x[i + inc_x] = 0.; + x[i + inc_x + 1] = 0.; + } + i += 2 * inc_x; + i += 2; + } + while (j < n) { + if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) { + x[i] = NAN; + x[i+1] = NAN; + } else { + x[i] = 0.; + x[i+1] = 0.; + } + } } else { @@ -276,7 +304,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } else { - if (da_i == 0.0) { + if (da_i == 0.0 && dummy2) { BLASLONG n1 = n & -2; while (j < n1) { @@ -335,12 +363,10 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, alpha[1] = da_i; if (da_r == 0.0) - if (da_i == 0) + if (da_i == 0 && dummy2 == 0) zscal_kernel_8_zero(n1, x); else zscal_kernel_8(n1, da_r, da_i, x); - else if (da_i == 0 && da_r == da_r) - zscal_kernel_8_zero_i(n1, alpha, x); else zscal_kernel_8(n1, da_r, da_i, x); @@ -354,7 +380,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, double res= 0.0; if (isnan(da_r)) res = da_r; while (j < n) { - + if (dummy2) + if (isnan(x[i]) || isnan(x[i+1])) res = NAN; x[i] = res; x[i + 1] = res; i += 2; @@ -381,7 +408,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, x[i + 1] = da_i * x[i]; else x[i + 1] = NAN; - if (x[i]==x[i]) + if (!isnan(x[i])) x[i] = temp0; i += 2; j++; @@ -397,6 +424,13 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, while (j < n) { temp0 = da_r * x[i]; + if (dummy2) { + if (isnan(x[i]) || isinf(x[i])) temp0 = NAN; + if (isnan(x[i + 1]) || isinf(x[i + 1])) + x[i + 1] = NAN; + else + x[i + 1] = da_r * x[i + 1]; + } x[i + 1] = da_r * x[i + 1]; x[i] = temp0; i += 2; @@ -410,7 +444,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, temp0 = da_r * x[i] - da_i * x[i + 1]; x[i + 1] = da_r * x[i + 1] + da_i * x[i]; - x[i] = temp0; + if (!isnan(x[i])) x[i] = temp0; i += 2; j++; From decd97c05b95d59038754854021d3faa535d7284 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 22:35:31 +0200 Subject: [PATCH 24/26] Update zscal.c --- kernel/zarch/zscal.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/zarch/zscal.c b/kernel/zarch/zscal.c index ff2306c113..224228037a 100644 --- a/kernel/zarch/zscal.c +++ b/kernel/zarch/zscal.c @@ -255,6 +255,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, x[i] = 0.; x[i+1] = 0.; } + i += inc_x; + j++; } } else { From e1e5be594a8a476abb3909550396c9332dbf9548 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 22:57:50 +0200 Subject: [PATCH 25/26] Update zscal.c --- kernel/zarch/zscal.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/zarch/zscal.c b/kernel/zarch/zscal.c index 224228037a..635e1fef63 100644 --- a/kernel/zarch/zscal.c +++ b/kernel/zarch/zscal.c @@ -245,8 +245,9 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, x[i + inc_x + 1] = 0.; } i += 2 * inc_x; - i += 2; + j += 2; } + while (j < n) { if (isnan(x[i]) || isinf(x[i]) || isnan(x[i+1])) { x[i] = NAN; @@ -257,8 +258,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, } i += inc_x; j++; + } } - } else { while (j < n1) { From f280f4d669766b4e664beb9e77ac409cb25a3326 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Sun, 25 May 2025 23:25:41 +0200 Subject: [PATCH 26/26] Update zscal.c --- kernel/zarch/zscal.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/zarch/zscal.c b/kernel/zarch/zscal.c index 635e1fef63..5111bc4551 100644 --- a/kernel/zarch/zscal.c +++ b/kernel/zarch/zscal.c @@ -433,9 +433,13 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i, x[i + 1] = NAN; else x[i + 1] = da_r * x[i + 1]; + } else { + if (isnan(x[i])) + x[i + 1] = NAN; + else + x[i + 1] = da_r * x[i + 1]; } - x[i + 1] = da_r * x[i + 1]; - x[i] = temp0; + x[i] = temp0; i += 2; j++;