From cdf684b4e36806542d5b7142fc06ca489d83fbe2 Mon Sep 17 00:00:00 2001 From: Julien Schueller Date: Tue, 8 Sep 2026 08:32:12 +0200 Subject: [PATCH] syamv/heamv: Fix SYMB_ZERO strided indexing In INCX != 1 branches SYMB_ZERO test used X(J) instead of X(JX), while accumulation correctly used X(JX). Fix to X(JX) for dla/sla/cla/zla_syamv.f and cla/zla_heamv.f (4 occurrences each, both UPLO variants). Restores correct symbolic-zero perturbation (SAFE1) for error-bound estimation with strided X. --- SRC/cla_heamv.f | 8 ++++---- SRC/cla_syamv.f | 8 ++++---- SRC/dla_syamv.f | 8 ++++---- SRC/sla_syamv.f | 8 ++++---- SRC/zla_heamv.f | 8 ++++---- SRC/zla_syamv.f | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/SRC/cla_heamv.f b/SRC/cla_heamv.f index 83aae5017..0f9c23b17 100644 --- a/SRC/cla_heamv.f +++ b/SRC/cla_heamv.f @@ -355,7 +355,7 @@ SUBROUTINE CLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -363,7 +363,7 @@ SUBROUTINE CLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -391,7 +391,7 @@ SUBROUTINE CLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -399,7 +399,7 @@ SUBROUTINE CLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX diff --git a/SRC/cla_syamv.f b/SRC/cla_syamv.f index b793f401f..4115576ef 100644 --- a/SRC/cla_syamv.f +++ b/SRC/cla_syamv.f @@ -357,7 +357,7 @@ SUBROUTINE CLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -365,7 +365,7 @@ SUBROUTINE CLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -393,7 +393,7 @@ SUBROUTINE CLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -401,7 +401,7 @@ SUBROUTINE CLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX diff --git a/SRC/dla_syamv.f b/SRC/dla_syamv.f index c17c4c5c0..b0c273002 100644 --- a/SRC/dla_syamv.f +++ b/SRC/dla_syamv.f @@ -346,7 +346,7 @@ SUBROUTINE DLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = ABS( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX @@ -354,7 +354,7 @@ SUBROUTINE DLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = ABS( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX @@ -382,7 +382,7 @@ SUBROUTINE DLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = ABS( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX @@ -390,7 +390,7 @@ SUBROUTINE DLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = ABS( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX diff --git a/SRC/sla_syamv.f b/SRC/sla_syamv.f index ac4604a77..58783a242 100644 --- a/SRC/sla_syamv.f +++ b/SRC/sla_syamv.f @@ -346,7 +346,7 @@ SUBROUTINE SLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = ABS( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX @@ -354,7 +354,7 @@ SUBROUTINE SLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = ABS( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX @@ -382,7 +382,7 @@ SUBROUTINE SLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = ABS( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX @@ -390,7 +390,7 @@ SUBROUTINE SLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = ABS( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*ABS( X( JX ) )*TEMP JX = JX + INCX diff --git a/SRC/zla_heamv.f b/SRC/zla_heamv.f index 485f1d939..64dd5fb90 100644 --- a/SRC/zla_heamv.f +++ b/SRC/zla_heamv.f @@ -355,7 +355,7 @@ SUBROUTINE ZLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -363,7 +363,7 @@ SUBROUTINE ZLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -391,7 +391,7 @@ SUBROUTINE ZLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -399,7 +399,7 @@ SUBROUTINE ZLA_HEAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX diff --git a/SRC/zla_syamv.f b/SRC/zla_syamv.f index 521f3727f..9b8f726ba 100644 --- a/SRC/zla_syamv.f +++ b/SRC/zla_syamv.f @@ -357,7 +357,7 @@ SUBROUTINE ZLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -365,7 +365,7 @@ SUBROUTINE ZLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -393,7 +393,7 @@ SUBROUTINE ZLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = 1, I TEMP = CABS1( A( I, J ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX @@ -401,7 +401,7 @@ SUBROUTINE ZLA_SYAMV( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, DO J = I+1, N TEMP = CABS1( A( J, I ) ) SYMB_ZERO = SYMB_ZERO .AND. - $ ( X( J ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) + $ ( X( JX ) .EQ. ZERO .OR. TEMP .EQ. ZERO ) Y( IY ) = Y( IY ) + ALPHA*CABS1( X( JX ) )*TEMP JX = JX + INCX