summaryrefslogtreecommitdiff
path: root/BLAS/SRC/ddot.f
diff options
context:
space:
mode:
Diffstat (limited to 'BLAS/SRC/ddot.f')
-rw-r--r--BLAS/SRC/ddot.f58
1 files changed, 31 insertions, 27 deletions
diff --git a/BLAS/SRC/ddot.f b/BLAS/SRC/ddot.f
index 3df03aec..33719eed 100644
--- a/BLAS/SRC/ddot.f
+++ b/BLAS/SRC/ddot.f
@@ -30,39 +30,43 @@
DDOT = 0.0d0
DTEMP = 0.0d0
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* code for unequal increments or equal increments
-* not equal to 1
-*
- IX = 1
- IY = 1
- IF (INCX.LT.0) IX = (-N+1)*INCX + 1
- IF (INCY.LT.0) IY = (-N+1)*INCY + 1
- DO 10 I = 1,N
- DTEMP = DTEMP + DX(IX)*DY(IY)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- DDOT = DTEMP
- RETURN
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,5)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- DTEMP = DTEMP + DX(I)*DY(I)
- 30 CONTINUE
- IF (N.LT.5) GO TO 60
- 40 MP1 = M + 1
- DO 50 I = MP1,N,5
+ M = MOD(N,5)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ DTEMP = DTEMP + DX(I)*DY(I)
+ END DO
+ IF (N.LT.5) THEN
+ DDOT=DTEMP
+ RETURN
+ END IF
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,5
DTEMP = DTEMP + DX(I)*DY(I) + DX(I+1)*DY(I+1) +
- + DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4)
- 50 CONTINUE
- 60 DDOT = DTEMP
+ $ DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4)
+ END DO
+ ELSE
+*
+* code for unequal increments or equal increments
+* not equal to 1
+*
+ IX = 1
+ IY = 1
+ IF (INCX.LT.0) IX = (-N+1)*INCX + 1
+ IF (INCY.LT.0) IY = (-N+1)*INCY + 1
+ DO I = 1,N
+ DTEMP = DTEMP + DX(IX)*DY(IY)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
+ DDOT = DTEMP
RETURN
END