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