Update to 2.0.0 tree from current Fremantle build
[opencv] / 3rdparty / lapack / dswap.c
1 #include "clapack.h"
2
3 /* Subroutine */ int dswap_(integer *n, doublereal *dx, integer *incx, 
4         doublereal *dy, integer *incy)
5 {
6     /* System generated locals */
7     integer i__1;
8
9     /* Local variables */
10     integer i__, m, ix, iy, mp1;
11     doublereal dtemp;
12
13 /*     .. Scalar Arguments .. */
14 /*     .. */
15 /*     .. Array Arguments .. */
16 /*     .. */
17
18 /*  Purpose */
19 /*  ======= */
20
21 /*     interchanges two vectors. */
22 /*     uses unrolled loops for increments equal one. */
23 /*     jack dongarra, linpack, 3/11/78. */
24 /*     modified 12/3/93, array(1) declarations changed to array(*) */
25
26
27 /*     .. Local Scalars .. */
28 /*     .. */
29 /*     .. Intrinsic Functions .. */
30 /*     .. */
31     /* Parameter adjustments */
32     --dy;
33     --dx;
34
35     /* Function Body */
36     if (*n <= 0) {
37         return 0;
38     }
39     if (*incx == 1 && *incy == 1) {
40         goto L20;
41     }
42
43 /*       code for unequal increments or equal increments not equal */
44 /*         to 1 */
45
46     ix = 1;
47     iy = 1;
48     if (*incx < 0) {
49         ix = (-(*n) + 1) * *incx + 1;
50     }
51     if (*incy < 0) {
52         iy = (-(*n) + 1) * *incy + 1;
53     }
54     i__1 = *n;
55     for (i__ = 1; i__ <= i__1; ++i__) {
56         dtemp = dx[ix];
57         dx[ix] = dy[iy];
58         dy[iy] = dtemp;
59         ix += *incx;
60         iy += *incy;
61 /* L10: */
62     }
63     return 0;
64
65 /*       code for both increments equal to 1 */
66
67
68 /*       clean-up loop */
69
70 L20:
71     m = *n % 3;
72     if (m == 0) {
73         goto L40;
74     }
75     i__1 = m;
76     for (i__ = 1; i__ <= i__1; ++i__) {
77         dtemp = dx[i__];
78         dx[i__] = dy[i__];
79         dy[i__] = dtemp;
80 /* L30: */
81     }
82     if (*n < 3) {
83         return 0;
84     }
85 L40:
86     mp1 = m + 1;
87     i__1 = *n;
88     for (i__ = mp1; i__ <= i__1; i__ += 3) {
89         dtemp = dx[i__];
90         dx[i__] = dy[i__];
91         dy[i__] = dtemp;
92         dtemp = dx[i__ + 1];
93         dx[i__ + 1] = dy[i__ + 1];
94         dy[i__ + 1] = dtemp;
95         dtemp = dx[i__ + 2];
96         dx[i__ + 2] = dy[i__ + 2];
97         dy[i__ + 2] = dtemp;
98 /* L50: */
99     }
100     return 0;
101 } /* dswap_ */