1*> \brief \b ICOPY 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* SUBROUTINE ICOPY( N, SX, INCX, SY, INCY ) 12* 13* .. Scalar Arguments .. 14* INTEGER INCX, INCY, N 15* .. 16* .. Array Arguments .. 17* INTEGER SX( * ), SY( * ) 18* .. 19* 20* 21*> \par Purpose: 22* ============= 23*> 24*> \verbatim 25*> 26*> ICOPY copies an integer vector x to an integer vector y. 27*> Uses unrolled loops for increments equal to 1. 28*> \endverbatim 29* 30* Arguments: 31* ========== 32* 33*> \param[in] N 34*> \verbatim 35*> N is INTEGER 36*> The length of the vectors SX and SY. 37*> \endverbatim 38*> 39*> \param[in] SX 40*> \verbatim 41*> SX is INTEGER array, dimension (1+(N-1)*abs(INCX)) 42*> The vector X. 43*> \endverbatim 44*> 45*> \param[in] INCX 46*> \verbatim 47*> INCX is INTEGER 48*> The spacing between consecutive elements of SX. 49*> \endverbatim 50*> 51*> \param[out] SY 52*> \verbatim 53*> SY is INTEGER array, dimension (1+(N-1)*abs(INCY)) 54*> The vector Y. 55*> \endverbatim 56*> 57*> \param[in] INCY 58*> \verbatim 59*> INCY is INTEGER 60*> The spacing between consecutive elements of SY. 61*> \endverbatim 62* 63* Authors: 64* ======== 65* 66*> \author Univ. of Tennessee 67*> \author Univ. of California Berkeley 68*> \author Univ. of Colorado Denver 69*> \author NAG Ltd. 70* 71*> \ingroup aux_lin 72* 73* ===================================================================== 74 SUBROUTINE ICOPY( N, SX, INCX, SY, INCY ) 75* 76* -- LAPACK test routine -- 77* -- LAPACK is a software package provided by Univ. of Tennessee, -- 78* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 79* 80* .. Scalar Arguments .. 81 INTEGER INCX, INCY, N 82* .. 83* .. Array Arguments .. 84 INTEGER SX( * ), SY( * ) 85* .. 86* 87* ===================================================================== 88* 89* .. Local Scalars .. 90 INTEGER I, IX, IY, M, MP1 91* .. 92* .. Intrinsic Functions .. 93 INTRINSIC MOD 94* .. 95* .. Executable Statements .. 96* 97 IF( N.LE.0 ) 98 $ RETURN 99 IF( INCX.EQ.1 .AND. INCY.EQ.1 ) 100 $ GO TO 20 101* 102* Code for unequal increments or equal increments not equal to 1 103* 104 IX = 1 105 IY = 1 106 IF( INCX.LT.0 ) 107 $ IX = ( -N+1 )*INCX + 1 108 IF( INCY.LT.0 ) 109 $ IY = ( -N+1 )*INCY + 1 110 DO 10 I = 1, N 111 SY( IY ) = SX( IX ) 112 IX = IX + INCX 113 IY = IY + INCY 114 10 CONTINUE 115 RETURN 116* 117* Code for both increments equal to 1 118* 119* Clean-up loop 120* 121 20 CONTINUE 122 M = MOD( N, 7 ) 123 IF( M.EQ.0 ) 124 $ GO TO 40 125 DO 30 I = 1, M 126 SY( I ) = SX( I ) 127 30 CONTINUE 128 IF( N.LT.7 ) 129 $ RETURN 130 40 CONTINUE 131 MP1 = M + 1 132 DO 50 I = MP1, N, 7 133 SY( I ) = SX( I ) 134 SY( I+1 ) = SX( I+1 ) 135 SY( I+2 ) = SX( I+2 ) 136 SY( I+3 ) = SX( I+3 ) 137 SY( I+4 ) = SX( I+4 ) 138 SY( I+5 ) = SX( I+5 ) 139 SY( I+6 ) = SX( I+6 ) 140 50 CONTINUE 141 RETURN 142* 143* End of ICOPY 144* 145 END 146