diff --git a/BLAS/SRC/cgemv.f b/BLAS/SRC/cgemv.f index 574be07602..9e32bf2cf9 100644 --- a/BLAS/SRC/cgemv.f +++ b/BLAS/SRC/cgemv.f @@ -214,11 +214,6 @@ SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) CALL XERBLA('CGEMV ',INFO) RETURN END IF -* -* Quick return if possible. -* - IF ((M.EQ.0) .OR. (N.EQ.0) .OR. - + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN * NOCONJ = LSAME(TRANS,'T') * @@ -243,6 +238,11 @@ SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) KY = 1 - (LENY-1)*INCY END IF * +* Return, if Y does not change +* + IF ((LENY.EQ.0) .OR. ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) + + RETURN +* * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * @@ -274,7 +274,11 @@ SUBROUTINE CGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) END IF END IF END IF - IF (ALPHA.EQ.ZERO) RETURN +* +* Return, if Y does not change after scale +* + IF ((ALPHA.EQ.ZERO) .OR. (LENX.EQ.0)) RETURN +* IF (LSAME(TRANS,'N')) THEN * * Form y := alpha*A*x + y. diff --git a/BLAS/SRC/dgemv.f b/BLAS/SRC/dgemv.f index 6625509b3a..2f0d028aba 100644 --- a/BLAS/SRC/dgemv.f +++ b/BLAS/SRC/dgemv.f @@ -210,11 +210,6 @@ SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) RETURN END IF * -* Quick return if possible. -* - IF ((M.EQ.0) .OR. (N.EQ.0) .OR. - + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN -* * Set LENX and LENY, the lengths of the vectors x and y, and set * up the start points in X and Y. * @@ -236,6 +231,11 @@ SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) KY = 1 - (LENY-1)*INCY END IF * +* Return, if Y does not change +* + IF ((LENY.EQ.0) .OR. ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) + + RETURN +* * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * @@ -267,7 +267,11 @@ SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) END IF END IF END IF - IF (ALPHA.EQ.ZERO) RETURN +* +* Return, if Y does not change after scale +* + IF ((ALPHA.EQ.ZERO) .OR. (LENX.EQ.0)) RETURN +* IF (LSAME(TRANS,'N')) THEN * * Form y := alpha*A*x + y. diff --git a/BLAS/SRC/sgemv.f b/BLAS/SRC/sgemv.f index 0517b124c5..bff25ecfc1 100644 --- a/BLAS/SRC/sgemv.f +++ b/BLAS/SRC/sgemv.f @@ -210,11 +210,6 @@ SUBROUTINE SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) RETURN END IF * -* Quick return if possible. -* - IF ((M.EQ.0) .OR. (N.EQ.0) .OR. - + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN -* * Set LENX and LENY, the lengths of the vectors x and y, and set * up the start points in X and Y. * @@ -236,6 +231,11 @@ SUBROUTINE SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) KY = 1 - (LENY-1)*INCY END IF * +* Return, if Y does not change +* + IF ((LENY.EQ.0) .OR. ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) + + RETURN +* * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * @@ -267,7 +267,11 @@ SUBROUTINE SGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) END IF END IF END IF - IF (ALPHA.EQ.ZERO) RETURN +* +* Return, if Y does not change after scale +* + IF ((ALPHA.EQ.ZERO) .OR. (LENX.EQ.0)) RETURN +* IF (LSAME(TRANS,'N')) THEN * * Form y := alpha*A*x + y. diff --git a/BLAS/SRC/zgemv.f b/BLAS/SRC/zgemv.f index 2664454b94..9568c1083c 100644 --- a/BLAS/SRC/zgemv.f +++ b/BLAS/SRC/zgemv.f @@ -214,11 +214,6 @@ SUBROUTINE ZGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) CALL XERBLA('ZGEMV ',INFO) RETURN END IF -* -* Quick return if possible. -* - IF ((M.EQ.0) .OR. (N.EQ.0) .OR. - + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN * NOCONJ = LSAME(TRANS,'T') * @@ -243,6 +238,11 @@ SUBROUTINE ZGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) KY = 1 - (LENY-1)*INCY END IF * +* Return, if Y does not change +* + IF ((LENY.EQ.0) .OR. ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) + + RETURN +* * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * @@ -274,7 +274,11 @@ SUBROUTINE ZGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) END IF END IF END IF - IF (ALPHA.EQ.ZERO) RETURN +* +* Return, if Y does not change after scale +* + IF ((ALPHA.EQ.ZERO) .OR. (LENX.EQ.0)) RETURN +* IF (LSAME(TRANS,'N')) THEN * * Form y := alpha*A*x + y.