Update to 2.0.0 tree from current Fremantle build
[opencv] / 3rdparty / lapack / saxpy.c
1 #include "clapack.h"
2
3 /* Subroutine */ int saxpy_(integer *n, real *sa, real *sx, integer *incx, 
4         real *sy, integer *incy)
5 {
6     /* System generated locals */
7     integer i__1;
8
9     /* Local variables */
10     integer i__, m, ix, iy, mp1;
11
12 /*     .. Scalar Arguments .. */
13 /*     .. */
14 /*     .. Array Arguments .. */
15 /*     .. */
16
17 /*  Purpose */
18 /*  ======= */
19
20 /*     SAXPY constant times a vector plus a vector. */
21 /*     uses unrolled loop for increments equal to one. */
22 /*     jack dongarra, linpack, 3/11/78. */
23 /*     modified 12/3/93, array(1) declarations changed to array(*) */
24
25
26 /*     .. Local Scalars .. */
27 /*     .. */
28 /*     .. Intrinsic Functions .. */
29 /*     .. */
30     /* Parameter adjustments */
31     --sy;
32     --sx;
33
34     /* Function Body */
35     if (*n <= 0) {
36         return 0;
37     }
38     if (*sa == 0.f) {
39         return 0;
40     }
41     if (*incx == 1 && *incy == 1) {
42         goto L20;
43     }
44
45 /*        code for unequal increments or equal increments */
46 /*          not equal to 1 */
47
48     ix = 1;
49     iy = 1;
50     if (*incx < 0) {
51         ix = (-(*n) + 1) * *incx + 1;
52     }
53     if (*incy < 0) {
54         iy = (-(*n) + 1) * *incy + 1;
55     }
56     i__1 = *n;
57     for (i__ = 1; i__ <= i__1; ++i__) {
58         sy[iy] += *sa * sx[ix];
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 % 4;
72     if (m == 0) {
73         goto L40;
74     }
75     i__1 = m;
76     for (i__ = 1; i__ <= i__1; ++i__) {
77         sy[i__] += *sa * sx[i__];
78 /* L30: */
79     }
80     if (*n < 4) {
81         return 0;
82     }
83 L40:
84     mp1 = m + 1;
85     i__1 = *n;
86     for (i__ = mp1; i__ <= i__1; i__ += 4) {
87         sy[i__] += *sa * sx[i__];
88         sy[i__ + 1] += *sa * sx[i__ + 1];
89         sy[i__ + 2] += *sa * sx[i__ + 2];
90         sy[i__ + 3] += *sa * sx[i__ + 3];
91 /* L50: */
92     }
93     return 0;
94 } /* saxpy_ */