xref: /aosp_15_r20/external/eigen/blas/f2c/srotm.c (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li /* srotm.f -- translated by f2c (version 20100827).
2*bf2c3715SXin Li    You must link the resulting object file with libf2c:
3*bf2c3715SXin Li 	on Microsoft Windows system, link with libf2c.lib;
4*bf2c3715SXin Li 	on Linux or Unix systems, link with .../path/to/libf2c.a -lm
5*bf2c3715SXin Li 	or, if you install libf2c.a in a standard place, with -lf2c -lm
6*bf2c3715SXin Li 	-- in that order, at the end of the command line, as in
7*bf2c3715SXin Li 		cc *.o -lf2c -lm
8*bf2c3715SXin Li 	Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
9*bf2c3715SXin Li 
10*bf2c3715SXin Li 		http://www.netlib.org/f2c/libf2c.zip
11*bf2c3715SXin Li */
12*bf2c3715SXin Li 
13*bf2c3715SXin Li #include "datatypes.h"
14*bf2c3715SXin Li 
srotm_(integer * n,real * sx,integer * incx,real * sy,integer * incy,real * sparam)15*bf2c3715SXin Li /* Subroutine */ int srotm_(integer *n, real *sx, integer *incx, real *sy,
16*bf2c3715SXin Li 	integer *incy, real *sparam)
17*bf2c3715SXin Li {
18*bf2c3715SXin Li     /* Initialized data */
19*bf2c3715SXin Li 
20*bf2c3715SXin Li     static real zero = 0.f;
21*bf2c3715SXin Li     static real two = 2.f;
22*bf2c3715SXin Li 
23*bf2c3715SXin Li     /* System generated locals */
24*bf2c3715SXin Li     integer i__1, i__2;
25*bf2c3715SXin Li 
26*bf2c3715SXin Li     /* Local variables */
27*bf2c3715SXin Li     integer i__;
28*bf2c3715SXin Li     real w, z__;
29*bf2c3715SXin Li     integer kx, ky;
30*bf2c3715SXin Li     real sh11, sh12, sh21, sh22, sflag;
31*bf2c3715SXin Li     integer nsteps;
32*bf2c3715SXin Li 
33*bf2c3715SXin Li /*     .. Scalar Arguments .. */
34*bf2c3715SXin Li /*     .. */
35*bf2c3715SXin Li /*     .. Array Arguments .. */
36*bf2c3715SXin Li /*     .. */
37*bf2c3715SXin Li 
38*bf2c3715SXin Li /*  Purpose */
39*bf2c3715SXin Li /*  ======= */
40*bf2c3715SXin Li 
41*bf2c3715SXin Li /*     APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX */
42*bf2c3715SXin Li 
43*bf2c3715SXin Li /*     (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN */
44*bf2c3715SXin Li /*     (DX**T) */
45*bf2c3715SXin Li 
46*bf2c3715SXin Li /*     SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE */
47*bf2c3715SXin Li /*     LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY. */
48*bf2c3715SXin Li /*     WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. */
49*bf2c3715SXin Li 
50*bf2c3715SXin Li /*     SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0 */
51*bf2c3715SXin Li 
52*bf2c3715SXin Li /*       (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0) */
53*bf2c3715SXin Li /*     H=(          )    (          )    (          )    (          ) */
54*bf2c3715SXin Li /*       (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0). */
55*bf2c3715SXin Li /*     SEE  SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM. */
56*bf2c3715SXin Li 
57*bf2c3715SXin Li 
58*bf2c3715SXin Li /*  Arguments */
59*bf2c3715SXin Li /*  ========= */
60*bf2c3715SXin Li 
61*bf2c3715SXin Li /*  N      (input) INTEGER */
62*bf2c3715SXin Li /*         number of elements in input vector(s) */
63*bf2c3715SXin Li 
64*bf2c3715SXin Li /*  SX     (input/output) REAL array, dimension N */
65*bf2c3715SXin Li /*         double precision vector with N elements */
66*bf2c3715SXin Li 
67*bf2c3715SXin Li /*  INCX   (input) INTEGER */
68*bf2c3715SXin Li /*         storage spacing between elements of SX */
69*bf2c3715SXin Li 
70*bf2c3715SXin Li /*  SY     (input/output) REAL array, dimension N */
71*bf2c3715SXin Li /*         double precision vector with N elements */
72*bf2c3715SXin Li 
73*bf2c3715SXin Li /*  INCY   (input) INTEGER */
74*bf2c3715SXin Li /*         storage spacing between elements of SY */
75*bf2c3715SXin Li 
76*bf2c3715SXin Li /*  SPARAM (input/output)  REAL array, dimension 5 */
77*bf2c3715SXin Li /*     SPARAM(1)=SFLAG */
78*bf2c3715SXin Li /*     SPARAM(2)=SH11 */
79*bf2c3715SXin Li /*     SPARAM(3)=SH21 */
80*bf2c3715SXin Li /*     SPARAM(4)=SH12 */
81*bf2c3715SXin Li /*     SPARAM(5)=SH22 */
82*bf2c3715SXin Li 
83*bf2c3715SXin Li /*  ===================================================================== */
84*bf2c3715SXin Li 
85*bf2c3715SXin Li /*     .. Local Scalars .. */
86*bf2c3715SXin Li /*     .. */
87*bf2c3715SXin Li /*     .. Data statements .. */
88*bf2c3715SXin Li     /* Parameter adjustments */
89*bf2c3715SXin Li     --sparam;
90*bf2c3715SXin Li     --sy;
91*bf2c3715SXin Li     --sx;
92*bf2c3715SXin Li 
93*bf2c3715SXin Li     /* Function Body */
94*bf2c3715SXin Li /*     .. */
95*bf2c3715SXin Li 
96*bf2c3715SXin Li     sflag = sparam[1];
97*bf2c3715SXin Li     if (*n <= 0 || sflag + two == zero) {
98*bf2c3715SXin Li 	goto L140;
99*bf2c3715SXin Li     }
100*bf2c3715SXin Li     if (! (*incx == *incy && *incx > 0)) {
101*bf2c3715SXin Li 	goto L70;
102*bf2c3715SXin Li     }
103*bf2c3715SXin Li 
104*bf2c3715SXin Li     nsteps = *n * *incx;
105*bf2c3715SXin Li     if (sflag < 0.f) {
106*bf2c3715SXin Li 	goto L50;
107*bf2c3715SXin Li     } else if (sflag == 0) {
108*bf2c3715SXin Li 	goto L10;
109*bf2c3715SXin Li     } else {
110*bf2c3715SXin Li 	goto L30;
111*bf2c3715SXin Li     }
112*bf2c3715SXin Li L10:
113*bf2c3715SXin Li     sh12 = sparam[4];
114*bf2c3715SXin Li     sh21 = sparam[3];
115*bf2c3715SXin Li     i__1 = nsteps;
116*bf2c3715SXin Li     i__2 = *incx;
117*bf2c3715SXin Li     for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
118*bf2c3715SXin Li 	w = sx[i__];
119*bf2c3715SXin Li 	z__ = sy[i__];
120*bf2c3715SXin Li 	sx[i__] = w + z__ * sh12;
121*bf2c3715SXin Li 	sy[i__] = w * sh21 + z__;
122*bf2c3715SXin Li /* L20: */
123*bf2c3715SXin Li     }
124*bf2c3715SXin Li     goto L140;
125*bf2c3715SXin Li L30:
126*bf2c3715SXin Li     sh11 = sparam[2];
127*bf2c3715SXin Li     sh22 = sparam[5];
128*bf2c3715SXin Li     i__2 = nsteps;
129*bf2c3715SXin Li     i__1 = *incx;
130*bf2c3715SXin Li     for (i__ = 1; i__1 < 0 ? i__ >= i__2 : i__ <= i__2; i__ += i__1) {
131*bf2c3715SXin Li 	w = sx[i__];
132*bf2c3715SXin Li 	z__ = sy[i__];
133*bf2c3715SXin Li 	sx[i__] = w * sh11 + z__;
134*bf2c3715SXin Li 	sy[i__] = -w + sh22 * z__;
135*bf2c3715SXin Li /* L40: */
136*bf2c3715SXin Li     }
137*bf2c3715SXin Li     goto L140;
138*bf2c3715SXin Li L50:
139*bf2c3715SXin Li     sh11 = sparam[2];
140*bf2c3715SXin Li     sh12 = sparam[4];
141*bf2c3715SXin Li     sh21 = sparam[3];
142*bf2c3715SXin Li     sh22 = sparam[5];
143*bf2c3715SXin Li     i__1 = nsteps;
144*bf2c3715SXin Li     i__2 = *incx;
145*bf2c3715SXin Li     for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
146*bf2c3715SXin Li 	w = sx[i__];
147*bf2c3715SXin Li 	z__ = sy[i__];
148*bf2c3715SXin Li 	sx[i__] = w * sh11 + z__ * sh12;
149*bf2c3715SXin Li 	sy[i__] = w * sh21 + z__ * sh22;
150*bf2c3715SXin Li /* L60: */
151*bf2c3715SXin Li     }
152*bf2c3715SXin Li     goto L140;
153*bf2c3715SXin Li L70:
154*bf2c3715SXin Li     kx = 1;
155*bf2c3715SXin Li     ky = 1;
156*bf2c3715SXin Li     if (*incx < 0) {
157*bf2c3715SXin Li 	kx = (1 - *n) * *incx + 1;
158*bf2c3715SXin Li     }
159*bf2c3715SXin Li     if (*incy < 0) {
160*bf2c3715SXin Li 	ky = (1 - *n) * *incy + 1;
161*bf2c3715SXin Li     }
162*bf2c3715SXin Li 
163*bf2c3715SXin Li     if (sflag < 0.f) {
164*bf2c3715SXin Li 	goto L120;
165*bf2c3715SXin Li     } else if (sflag == 0) {
166*bf2c3715SXin Li 	goto L80;
167*bf2c3715SXin Li     } else {
168*bf2c3715SXin Li 	goto L100;
169*bf2c3715SXin Li     }
170*bf2c3715SXin Li L80:
171*bf2c3715SXin Li     sh12 = sparam[4];
172*bf2c3715SXin Li     sh21 = sparam[3];
173*bf2c3715SXin Li     i__2 = *n;
174*bf2c3715SXin Li     for (i__ = 1; i__ <= i__2; ++i__) {
175*bf2c3715SXin Li 	w = sx[kx];
176*bf2c3715SXin Li 	z__ = sy[ky];
177*bf2c3715SXin Li 	sx[kx] = w + z__ * sh12;
178*bf2c3715SXin Li 	sy[ky] = w * sh21 + z__;
179*bf2c3715SXin Li 	kx += *incx;
180*bf2c3715SXin Li 	ky += *incy;
181*bf2c3715SXin Li /* L90: */
182*bf2c3715SXin Li     }
183*bf2c3715SXin Li     goto L140;
184*bf2c3715SXin Li L100:
185*bf2c3715SXin Li     sh11 = sparam[2];
186*bf2c3715SXin Li     sh22 = sparam[5];
187*bf2c3715SXin Li     i__2 = *n;
188*bf2c3715SXin Li     for (i__ = 1; i__ <= i__2; ++i__) {
189*bf2c3715SXin Li 	w = sx[kx];
190*bf2c3715SXin Li 	z__ = sy[ky];
191*bf2c3715SXin Li 	sx[kx] = w * sh11 + z__;
192*bf2c3715SXin Li 	sy[ky] = -w + sh22 * z__;
193*bf2c3715SXin Li 	kx += *incx;
194*bf2c3715SXin Li 	ky += *incy;
195*bf2c3715SXin Li /* L110: */
196*bf2c3715SXin Li     }
197*bf2c3715SXin Li     goto L140;
198*bf2c3715SXin Li L120:
199*bf2c3715SXin Li     sh11 = sparam[2];
200*bf2c3715SXin Li     sh12 = sparam[4];
201*bf2c3715SXin Li     sh21 = sparam[3];
202*bf2c3715SXin Li     sh22 = sparam[5];
203*bf2c3715SXin Li     i__2 = *n;
204*bf2c3715SXin Li     for (i__ = 1; i__ <= i__2; ++i__) {
205*bf2c3715SXin Li 	w = sx[kx];
206*bf2c3715SXin Li 	z__ = sy[ky];
207*bf2c3715SXin Li 	sx[kx] = w * sh11 + z__ * sh12;
208*bf2c3715SXin Li 	sy[ky] = w * sh21 + z__ * sh22;
209*bf2c3715SXin Li 	kx += *incx;
210*bf2c3715SXin Li 	ky += *incy;
211*bf2c3715SXin Li /* L130: */
212*bf2c3715SXin Li     }
213*bf2c3715SXin Li L140:
214*bf2c3715SXin Li     return 0;
215*bf2c3715SXin Li } /* srotm_ */
216*bf2c3715SXin Li 
217