Skip to content

Commit 6fa7bf6

Browse files
Fix suggestions by angsch
1 parent e6eeebd commit 6fa7bf6

File tree

5 files changed

+51
-80
lines changed

5 files changed

+51
-80
lines changed

BLAS/SRC/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ set(SBLAS1 isamax.f sasum.f saxpy.f saxpby.f scopy.f sdot.f snrm2.f90
3333
srot.f srotg.f90 sscal.f sswap.f sdsdot.f srotmg.f srotm.f)
3434

3535
set(CBLAS1 scabs1.f scasum.f scnrm2.f90 icamax.f90 caxpy.f caxpby.f ccopy.f
36-
set(CBLAS1 scabs1.f scasum.f scnrm2.f90 icamax.f90 caxpy.f ccopy.f
3736
cdotc.f cdotu.f csscal.f crotg.f90 cscal.f cswap.f csrot.f)
3837

3938
set(DBLAS1 idamax.f dasum.f daxpy.f daxpby.f dcopy.f ddot.f dnrm2.f90

BLAS/SRC/caxpby.f

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*>
2525
*> \verbatim
2626
*>
27-
*> CAXPBY constant times a vector plus constanttimes a vector.
27+
*> CAXPBY constant times a vector plus constant times a vector.
2828
*>
2929
*> Y = ALPHA * X + BETA * Y
3030
*>
@@ -84,18 +84,9 @@
8484
*
8585
*> \ingroup axpby
8686
*
87-
*> \par Further Details:
88-
* =====================
89-
*>
90-
*> \verbatim
91-
*>
92-
*> jack dongarra, linpack, 3/11/78.
93-
*> modified 12/3/93, array(1) declarations changed to array(*)
94-
*> modfied 8/23/24, implement the axpby case
95-
*> \endverbatim
96-
*>
9787
* =====================================================================
9888
SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
89+
IMPLICIT NONE
9990
*
10091
* -- Reference BLAS level1 routine --
10192
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
@@ -108,13 +99,21 @@ SUBROUTINE CAXPBY(N,CA,CX,INCX,CB,CY,INCY)
10899
* .. Array Arguments ..
109100
COMPLEX CX(*),CY(*)
110101
* ..
102+
* .. External Subroutines ..
103+
EXTERNAL CSCAL
111104
*
112105
* =====================================================================
113106
*
114107
* .. Local Scalars ..
115108
INTEGER I,IX,IY
116109
* ..
117110
IF (N.LE.0) RETURN
111+
112+
IF (CA .EQ. (0.0,0.0) .AND. CB.NE.(0.0,0.0)) THEN
113+
CALL CSCAL(N,CB, CY, INCY)
114+
RETURN
115+
END IF
116+
118117
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
119118
*
120119
* code for both increments equal to 1

BLAS/SRC/daxpby.f

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,10 @@
2424
*>
2525
*> \verbatim
2626
*>
27-
*> DAXPBY constant times a vector plus constanttimes a vector.
27+
*> DAXPBY constant times a vector plus constant times a vector.
2828
*>
2929
*> Y = ALPHA * X + BETA * Y
3030
*>
31-
*> uses unrolled loops for increments equal to one.
3231
*> \endverbatim
3332
*
3433
* Arguments:
@@ -81,22 +80,13 @@
8180
*> \author Univ. of California Berkeley
8281
*> \author Univ. of Colorado Denver
8382
*> \author NAG Ltd.
84-
*> \author Martin Koehler, MPI Magdeburg
83+
*> \author Martin Koehler, MPI Magdeburg
8584
*
8685
*> \ingroup axpby
8786
*
88-
*> \par Further Details:
89-
* =====================
90-
*>
91-
*> \verbatim
92-
*>
93-
*> jack dongarra, linpack, 3/11/78.
94-
*> modified 12/3/93, array(1) declarations changed to array(*)
95-
*> modfied 8/23/24, implement the axpby case
96-
*> \endverbatim
97-
*>
9887
* =====================================================================
9988
SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
89+
IMPLICIT NONE
10090
*
10191
* -- Reference BLAS level1 routine --
10292
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
@@ -109,6 +99,8 @@ SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
10999
* .. Array Arguments ..
110100
DOUBLE PRECISION DX(*),DY(*)
111101
* ..
102+
* .. External Subroutines
103+
EXTERNAL DSCAL
112104
*
113105
* =====================================================================
114106
*
@@ -119,26 +111,21 @@ SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY)
119111
INTRINSIC MOD
120112
* ..
121113
IF (N.LE.0) RETURN
114+
115+
* Scale if DA.EQ.0
116+
IF (DA.EQ.0.0D0 .AND. DB.NE.0.0D0) THEN
117+
CALL DSCAL(N, DB, DY, INCY)
118+
RETURN
119+
END IF
120+
122121
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
123122
*
124123
* code for both increments equal to 1
125124
*
126125
*
127-
* clean-up loop
128-
*
129-
M = MOD(N,4)
130-
IF (M.NE.0) THEN
131-
DO I = 1,M
132-
DY(I) = DB*DY(I) + DA*DX(I)
133-
END DO
134-
END IF
135-
IF (N.LT.4) RETURN
136-
MP1 = M + 1
137-
DO I = MP1,N,4
138-
DY(I) = DB*DY(I) + DA*DX(I)
139-
DY(I+1) = DB*DY(I+1) + DA*DX(I+1)
140-
DY(I+2) = DB*DY(I+2) + DA*DX(I+2)
141-
DY(I+3) = DB*DY(I+3) + DA*DX(I+3)
126+
*
127+
DO I = 1,N
128+
DY(I) = DB*DY(I) + DA*DX(I)
142129
END DO
143130
ELSE
144131
*

BLAS/SRC/saxpby.f

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,10 @@
2424
*>
2525
*> \verbatim
2626
*>
27-
*> SAXPBY constant times a vector plus constanttimes a vector.
27+
*> SAXPBY constant times a vector plus constant times a vector.
2828
*>
2929
*> Y = ALPHA * X + BETA * Y
3030
*>
31-
*> uses unrolled loops for increments equal to one.
3231
*> \endverbatim
3332
*
3433
* Arguments:
@@ -85,18 +84,9 @@
8584
*
8685
*> \ingroup axpby
8786
*
88-
*> \par Further Details:
89-
* =====================
90-
*>
91-
*> \verbatim
92-
*>
93-
*> jack dongarra, linpack, 3/11/78.
94-
*> modified 12/3/93, array(1) declarations changed to array(*)
95-
*> modfied 8/23/24, implement the axpby case
96-
*> \endverbatim
97-
*>
9887
* =====================================================================
9988
SUBROUTINE SAXPBY(N,SA,SX,INCX,SB,SY,INCY)
89+
IMPLICIT NONE
10090
*
10191
* -- Reference BLAS level1 routine --
10292
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
@@ -109,6 +99,8 @@ SUBROUTINE SAXPBY(N,SA,SX,INCX,SB,SY,INCY)
10999
* .. Array Arguments ..
110100
REAL SX(*),SY(*)
111101
* ..
102+
* .. External Subroutines ..
103+
EXTERNAL SSCAL
112104
*
113105
* =====================================================================
114106
*
@@ -119,26 +111,20 @@ SUBROUTINE SAXPBY(N,SA,SX,INCX,SB,SY,INCY)
119111
INTRINSIC MOD
120112
* ..
121113
IF (N.LE.0) RETURN
114+
115+
* Scale if SA.EQ.0
116+
IF (SA.EQ.0.0E0 .AND. SB.NE.0.0E0) THEN
117+
CALL SSCAL(N, SB, SY, INCY)
118+
RETURN
119+
END IF
120+
121+
122122
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
123123
*
124124
* code for both increments equal to 1
125125
*
126-
*
127-
* clean-up loop
128-
*
129-
M = MOD(N,4)
130-
IF (M.NE.0) THEN
131-
DO I = 1,M
132-
SY(I) = SB*SY(I) + SA*SX(I)
133-
END DO
134-
END IF
135-
IF (N.LT.4) RETURN
136-
MP1 = M + 1
137-
DO I = MP1,N,4
138-
SY(I) = SB*SY(I) + SA*SX(I)
139-
SY(I+1) = SB*SY(I+1) + SA*SX(I+1)
140-
SY(I+2) = SB*SY(I+2) + SA*SX(I+2)
141-
SY(I+3) = SB*SY(I+3) + SA*SX(I+3)
126+
DO I = 1,N
127+
SY(I) = SB*SY(I) + SA*SX(I)
142128
END DO
143129
ELSE
144130
*
@@ -157,6 +143,6 @@ SUBROUTINE SAXPBY(N,SA,SX,INCX,SB,SY,INCY)
157143
END IF
158144
RETURN
159145
*
160-
* End of SAXPY
146+
* End of SAXPBY
161147
*
162148
END

BLAS/SRC/zaxpby.f

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*>
2525
*> \verbatim
2626
*>
27-
*> ZAXPBY constant times a vector plus constanttimes a vector.
27+
*> ZAXPBY constant times a vector plus constant times a vector.
2828
*>
2929
*> Y = ALPHA * X + BETA * Y
3030
*>
@@ -84,18 +84,9 @@
8484
*
8585
*> \ingroup axpby
8686
*
87-
*> \par Further Details:
88-
* =====================
89-
*>
90-
*> \verbatim
91-
*>
92-
*> jack dongarra, 3/11/78.
93-
*> modified 12/3/93, array(1) declarations changed to array(*)
94-
*> modfied 8/23/24, implement the axpby case
95-
*> \endverbatim
96-
*>
9787
* =====================================================================
9888
SUBROUTINE ZAXPBY(N,ZA,ZX,INCX,ZB,ZY,INCY)
89+
IMPLICIT NONE
9990
*
10091
* -- Reference BLAS level1 routine --
10192
* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
@@ -108,13 +99,22 @@ SUBROUTINE ZAXPBY(N,ZA,ZX,INCX,ZB,ZY,INCY)
10899
* .. Array Arguments ..
109100
COMPLEX*16 ZX(*),ZY(*)
110101
* ..
102+
* .. External Subroutines ..
103+
EXTERNAL ZSCAL
111104
*
112105
* =====================================================================
113106
*
114107
* .. Local Scalars ..
115108
INTEGER I,IX,IY
116109
* ..
117110
IF (N.LE.0) RETURN
111+
112+
* Scale if ZA .EQ. 0
113+
IF ( ZA.EQ.(0.0D0,0.0D0) .AND. ZB.NE.(0.0D0,0.0D0)) THEN
114+
CALL ZSCAL(N, ZB, ZY, INCY)
115+
RETURN
116+
END IF
117+
118118
IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
119119
*
120120
* code for both increments equal to 1

0 commit comments

Comments
 (0)