--- rpl/lapack/blas/dsdot.f 2010/12/21 13:51:25 1.4 +++ rpl/lapack/blas/dsdot.f 2011/07/22 07:38:01 1.5 @@ -72,26 +72,27 @@ * .. DSDOT = 0.0D0 IF (N.LE.0) RETURN - IF (INCX.EQ.INCY .AND. INCX.GT.0) GO TO 20 + IF (INCX.EQ.INCY .AND. INCX.GT.0) THEN * -* Code for unequal or nonpositive increments. +* Code for equal, positive, non-unit increments. * - KX = 1 - KY = 1 - IF (INCX.LT.0) KX = 1 + (1-N)*INCX - IF (INCY.LT.0) KY = 1 + (1-N)*INCY - DO 10 I = 1,N - DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY)) - KX = KX + INCX - KY = KY + INCY - 10 CONTINUE - RETURN + NS = N*INCX + DO I = 1,NS,INCX + DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I)) + END DO + ELSE * -* Code for equal, positive, non-unit increments. +* Code for unequal or nonpositive increments. * - 20 NS = N*INCX - DO 30 I = 1,NS,INCX - DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I)) - 30 CONTINUE + KX = 1 + KY = 1 + IF (INCX.LT.0) KX = 1 + (1-N)*INCX + IF (INCY.LT.0) KY = 1 + (1-N)*INCY + DO I = 1,N + DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY)) + KX = KX + INCX + KY = KY + INCY + END DO + END IF RETURN END