Diff for /rpl/lapack/blas/daxpy.f between versions 1.3 and 1.15

version 1.3, 2010/08/06 15:32:18 version 1.15, 2018/05/29 07:19:40
Line 1 Line 1
   *> \brief \b DAXPY
   *
   *  =========== DOCUMENTATION ===========
   *
   * Online html documentation available at
   *            http://www.netlib.org/lapack/explore-html/
   *
   *  Definition:
   *  ===========
   *
   *       SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
   *
   *       .. Scalar Arguments ..
   *       DOUBLE PRECISION DA
   *       INTEGER INCX,INCY,N
   *       ..
   *       .. Array Arguments ..
   *       DOUBLE PRECISION DX(*),DY(*)
   *       ..
   *
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *>    DAXPY constant times a vector plus a vector.
   *>    uses unrolled loops for increments equal to one.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] N
   *> \verbatim
   *>          N is INTEGER
   *>         number of elements in input vector(s)
   *> \endverbatim
   *>
   *> \param[in] DA
   *> \verbatim
   *>          DA is DOUBLE PRECISION
   *>           On entry, DA specifies the scalar alpha.
   *> \endverbatim
   *>
   *> \param[in] DX
   *> \verbatim
   *>          DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
   *> \endverbatim
   *>
   *> \param[in] INCX
   *> \verbatim
   *>          INCX is INTEGER
   *>         storage spacing between elements of DX
   *> \endverbatim
   *>
   *> \param[in,out] DY
   *> \verbatim
   *>          DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
   *> \endverbatim
   *>
   *> \param[in] INCY
   *> \verbatim
   *>          INCY is INTEGER
   *>         storage spacing between elements of DY
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee
   *> \author Univ. of California Berkeley
   *> \author Univ. of Colorado Denver
   *> \author NAG Ltd.
   *
   *> \date November 2017
   *
   *> \ingroup double_blas_level1
   *
   *> \par Further Details:
   *  =====================
   *>
   *> \verbatim
   *>
   *>     jack dongarra, linpack, 3/11/78.
   *>     modified 12/3/93, array(1) declarations changed to array(*)
   *> \endverbatim
   *>
   *  =====================================================================
       SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)        SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
   *
   *  -- Reference BLAS level1 routine (version 3.8.0) --
   *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
   *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
   *     November 2017
   *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       DOUBLE PRECISION DA        DOUBLE PRECISION DA
       INTEGER INCX,INCY,N        INTEGER INCX,INCY,N
Line 7 Line 102
       DOUBLE PRECISION DX(*),DY(*)        DOUBLE PRECISION DX(*),DY(*)
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *     DAXPY constant times a vector plus a vector.  
 *     uses unrolled loops for increments equal to one.  
 *  
 *  Further Details  
 *  ===============  
 *  
 *     jack dongarra, linpack, 3/11/78.  
 *     modified 12/3/93, array(1) declarations changed to array(*)  
 *  
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Local Scalars ..  *     .. Local Scalars ..
Line 29 Line 112
 *     ..  *     ..
       IF (N.LE.0) RETURN        IF (N.LE.0) RETURN
       IF (DA.EQ.0.0d0) RETURN        IF (DA.EQ.0.0d0) RETURN
       IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20        IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
   *
   *        code for both increments equal to 1
   *
   *
   *        clean-up loop
   *
            M = MOD(N,4)
            IF (M.NE.0) THEN
               DO I = 1,M
                  DY(I) = DY(I) + DA*DX(I)
               END DO
            END IF
            IF (N.LT.4) RETURN
            MP1 = M + 1
            DO I = MP1,N,4
               DY(I) = DY(I) + DA*DX(I)
               DY(I+1) = DY(I+1) + DA*DX(I+1)
               DY(I+2) = DY(I+2) + DA*DX(I+2)
               DY(I+3) = DY(I+3) + DA*DX(I+3)
            END DO
         ELSE
 *  *
 *        code for unequal increments or equal increments  *        code for unequal increments or equal increments
 *          not equal to 1  *          not equal to 1
 *  *
       IX = 1           IX = 1
       IY = 1           IY = 1
       IF (INCX.LT.0) IX = (-N+1)*INCX + 1           IF (INCX.LT.0) IX = (-N+1)*INCX + 1
       IF (INCY.LT.0) IY = (-N+1)*INCY + 1           IF (INCY.LT.0) IY = (-N+1)*INCY + 1
       DO 10 I = 1,N           DO I = 1,N
           DY(IY) = DY(IY) + DA*DX(IX)            DY(IY) = DY(IY) + DA*DX(IX)
           IX = IX + INCX            IX = IX + INCX
           IY = IY + INCY            IY = IY + INCY
    10 CONTINUE           END DO
       RETURN        END IF
 *  
 *        code for both increments equal to 1  
 *  
 *  
 *        clean-up loop  
 *  
    20 M = MOD(N,4)  
       IF (M.EQ.0) GO TO 40  
       DO 30 I = 1,M  
           DY(I) = DY(I) + DA*DX(I)  
    30 CONTINUE  
       IF (N.LT.4) RETURN  
    40 MP1 = M + 1  
       DO 50 I = MP1,N,4  
           DY(I) = DY(I) + DA*DX(I)  
           DY(I+1) = DY(I+1) + DA*DX(I+1)  
           DY(I+2) = DY(I+2) + DA*DX(I+2)  
           DY(I+3) = DY(I+3) + DA*DX(I+3)  
    50 CONTINUE  
       RETURN        RETURN
       END        END

Removed from v.1.3  
changed lines
  Added in v.1.15


CVSweb interface <joel.bertrand@systella.fr>