1       SUBROUTINE SSWAP(N,SX,INCX,SY,INCY)
 2 *     .. Scalar Arguments ..
 3       INTEGER INCX,INCY,N
 4 *     ..
 5 *     .. Array Arguments ..
 6       REAL SX(*),SY(*)
 7 *     ..
 8 *
 9 *  Purpose
10 *  =======
11 *
12 *     interchanges two vectors.
13 *     uses unrolled loops for increments equal to 1.
14 *
15 *  Further Details
16 *  ===============
17 *
18 *     jack dongarra, linpack, 3/11/78.
19 *     modified 12/3/93, array(1) declarations changed to array(*)
20 *
21 *  =====================================================================
22 *
23 *     .. Local Scalars ..
24       REAL STEMP
25       INTEGER I,IX,IY,M,MP1
26 *     ..
27 *     .. Intrinsic Functions ..
28       INTRINSIC MOD
29 *     ..
30       IF (N.LE.0RETURN
31       IF (INCX.EQ.1 .AND. INCY.EQ.1THEN
32 *
33 *       code for both increments equal to 1
34 *
35 *
36 *       clean-up loop
37 *
38          M = MOD(N,3)
39          IF (M.NE.0THEN
40             DO I = 1,M
41                STEMP = SX(I)
42                SX(I) = SY(I)
43                SY(I) = STEMP
44             END DO
45             IF (N.LT.3RETURN
46          END IF
47          MP1 = M + 1
48          DO I = MP1,N,3
49             STEMP = SX(I)
50             SX(I) = SY(I)
51             SY(I) = STEMP
52             STEMP = SX(I+1)
53             SX(I+1= SY(I+1)
54             SY(I+1= STEMP
55             STEMP = SX(I+2)
56             SX(I+2= SY(I+2)
57             SY(I+2= STEMP
58          END DO
59       ELSE
60 *
61 *       code for unequal increments or equal increments not equal
62 *         to 1
63 *
64          IX = 1
65          IY = 1
66          IF (INCX.LT.0) IX = (-N+1)*INCX + 1
67          IF (INCY.LT.0) IY = (-N+1)*INCY + 1
68          DO I = 1,N
69             STEMP = SX(IX)
70             SX(IX) = SY(IY)
71             SY(IY) = STEMP
72             IX = IX + INCX
73             IY = IY + INCY
74          END DO
75       END IF
76       RETURN
77       END