xref: /aosp_15_r20/external/eigen/blas/f2c/srotmg.c (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li /* srotmg.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 
srotmg_(real * sd1,real * sd2,real * sx1,real * sy1,real * sparam)15*bf2c3715SXin Li /* Subroutine */ int srotmg_(real *sd1, real *sd2, real *sx1, real *sy1, real
16*bf2c3715SXin Li 	*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 one = 1.f;
22*bf2c3715SXin Li     static real two = 2.f;
23*bf2c3715SXin Li     static real gam = 4096.f;
24*bf2c3715SXin Li     static real gamsq = 16777200.f;
25*bf2c3715SXin Li     static real rgamsq = 5.96046e-8f;
26*bf2c3715SXin Li 
27*bf2c3715SXin Li     /* Format strings */
28*bf2c3715SXin Li     static char fmt_120[] = "";
29*bf2c3715SXin Li     static char fmt_150[] = "";
30*bf2c3715SXin Li     static char fmt_180[] = "";
31*bf2c3715SXin Li     static char fmt_210[] = "";
32*bf2c3715SXin Li 
33*bf2c3715SXin Li     /* System generated locals */
34*bf2c3715SXin Li     real r__1;
35*bf2c3715SXin Li 
36*bf2c3715SXin Li     /* Local variables */
37*bf2c3715SXin Li     real su, sp1, sp2, sq1, sq2, sh11, sh12, sh21, sh22;
38*bf2c3715SXin Li     integer igo;
39*bf2c3715SXin Li     real sflag, stemp;
40*bf2c3715SXin Li 
41*bf2c3715SXin Li     /* Assigned format variables */
42*bf2c3715SXin Li     static char *igo_fmt;
43*bf2c3715SXin Li 
44*bf2c3715SXin Li /*     .. Scalar Arguments .. */
45*bf2c3715SXin Li /*     .. */
46*bf2c3715SXin Li /*     .. Array Arguments .. */
47*bf2c3715SXin Li /*     .. */
48*bf2c3715SXin Li 
49*bf2c3715SXin Li /*  Purpose */
50*bf2c3715SXin Li /*  ======= */
51*bf2c3715SXin Li 
52*bf2c3715SXin Li /*     CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS */
53*bf2c3715SXin Li /*     THE SECOND COMPONENT OF THE 2-VECTOR  (SQRT(SD1)*SX1,SQRT(SD2)* */
54*bf2c3715SXin Li /*     SY2)**T. */
55*bf2c3715SXin Li /*     WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. */
56*bf2c3715SXin Li 
57*bf2c3715SXin Li /*     SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0 */
58*bf2c3715SXin Li 
59*bf2c3715SXin Li /*       (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0) */
60*bf2c3715SXin Li /*     H=(          )    (          )    (          )    (          ) */
61*bf2c3715SXin Li /*       (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0). */
62*bf2c3715SXin Li /*     LOCATIONS 2-4 OF SPARAM CONTAIN SH11,SH21,SH12, AND SH22 */
63*bf2c3715SXin Li /*     RESPECTIVELY. (VALUES OF 1.E0, -1.E0, OR 0.E0 IMPLIED BY THE */
64*bf2c3715SXin Li /*     VALUE OF SPARAM(1) ARE NOT STORED IN SPARAM.) */
65*bf2c3715SXin Li 
66*bf2c3715SXin Li /*     THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE */
67*bf2c3715SXin Li /*     INEXACT.  THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE */
68*bf2c3715SXin Li /*     OF SD1 AND SD2.  ALL ACTUAL SCALING OF DATA IS DONE USING GAM. */
69*bf2c3715SXin Li 
70*bf2c3715SXin Li 
71*bf2c3715SXin Li /*  Arguments */
72*bf2c3715SXin Li /*  ========= */
73*bf2c3715SXin Li 
74*bf2c3715SXin Li 
75*bf2c3715SXin Li /*  SD1    (input/output) REAL */
76*bf2c3715SXin Li 
77*bf2c3715SXin Li /*  SD2    (input/output) REAL */
78*bf2c3715SXin Li 
79*bf2c3715SXin Li /*  SX1    (input/output) REAL */
80*bf2c3715SXin Li 
81*bf2c3715SXin Li /*  SY1    (input) REAL */
82*bf2c3715SXin Li 
83*bf2c3715SXin Li 
84*bf2c3715SXin Li /*  SPARAM (input/output)  REAL array, dimension 5 */
85*bf2c3715SXin Li /*     SPARAM(1)=SFLAG */
86*bf2c3715SXin Li /*     SPARAM(2)=SH11 */
87*bf2c3715SXin Li /*     SPARAM(3)=SH21 */
88*bf2c3715SXin Li /*     SPARAM(4)=SH12 */
89*bf2c3715SXin Li /*     SPARAM(5)=SH22 */
90*bf2c3715SXin Li 
91*bf2c3715SXin Li /*  ===================================================================== */
92*bf2c3715SXin Li 
93*bf2c3715SXin Li /*     .. Local Scalars .. */
94*bf2c3715SXin Li /*     .. */
95*bf2c3715SXin Li /*     .. Intrinsic Functions .. */
96*bf2c3715SXin Li /*     .. */
97*bf2c3715SXin Li /*     .. Data statements .. */
98*bf2c3715SXin Li 
99*bf2c3715SXin Li     /* Parameter adjustments */
100*bf2c3715SXin Li     --sparam;
101*bf2c3715SXin Li 
102*bf2c3715SXin Li     /* Function Body */
103*bf2c3715SXin Li /*     .. */
104*bf2c3715SXin Li     if (! (*sd1 < zero)) {
105*bf2c3715SXin Li 	goto L10;
106*bf2c3715SXin Li     }
107*bf2c3715SXin Li /*       GO ZERO-H-D-AND-SX1.. */
108*bf2c3715SXin Li     goto L60;
109*bf2c3715SXin Li L10:
110*bf2c3715SXin Li /*     CASE-SD1-NONNEGATIVE */
111*bf2c3715SXin Li     sp2 = *sd2 * *sy1;
112*bf2c3715SXin Li     if (! (sp2 == zero)) {
113*bf2c3715SXin Li 	goto L20;
114*bf2c3715SXin Li     }
115*bf2c3715SXin Li     sflag = -two;
116*bf2c3715SXin Li     goto L260;
117*bf2c3715SXin Li /*     REGULAR-CASE.. */
118*bf2c3715SXin Li L20:
119*bf2c3715SXin Li     sp1 = *sd1 * *sx1;
120*bf2c3715SXin Li     sq2 = sp2 * *sy1;
121*bf2c3715SXin Li     sq1 = sp1 * *sx1;
122*bf2c3715SXin Li 
123*bf2c3715SXin Li     if (! (dabs(sq1) > dabs(sq2))) {
124*bf2c3715SXin Li 	goto L40;
125*bf2c3715SXin Li     }
126*bf2c3715SXin Li     sh21 = -(*sy1) / *sx1;
127*bf2c3715SXin Li     sh12 = sp2 / sp1;
128*bf2c3715SXin Li 
129*bf2c3715SXin Li     su = one - sh12 * sh21;
130*bf2c3715SXin Li 
131*bf2c3715SXin Li     if (! (su <= zero)) {
132*bf2c3715SXin Li 	goto L30;
133*bf2c3715SXin Li     }
134*bf2c3715SXin Li /*         GO ZERO-H-D-AND-SX1.. */
135*bf2c3715SXin Li     goto L60;
136*bf2c3715SXin Li L30:
137*bf2c3715SXin Li     sflag = zero;
138*bf2c3715SXin Li     *sd1 /= su;
139*bf2c3715SXin Li     *sd2 /= su;
140*bf2c3715SXin Li     *sx1 *= su;
141*bf2c3715SXin Li /*         GO SCALE-CHECK.. */
142*bf2c3715SXin Li     goto L100;
143*bf2c3715SXin Li L40:
144*bf2c3715SXin Li     if (! (sq2 < zero)) {
145*bf2c3715SXin Li 	goto L50;
146*bf2c3715SXin Li     }
147*bf2c3715SXin Li /*         GO ZERO-H-D-AND-SX1.. */
148*bf2c3715SXin Li     goto L60;
149*bf2c3715SXin Li L50:
150*bf2c3715SXin Li     sflag = one;
151*bf2c3715SXin Li     sh11 = sp1 / sp2;
152*bf2c3715SXin Li     sh22 = *sx1 / *sy1;
153*bf2c3715SXin Li     su = one + sh11 * sh22;
154*bf2c3715SXin Li     stemp = *sd2 / su;
155*bf2c3715SXin Li     *sd2 = *sd1 / su;
156*bf2c3715SXin Li     *sd1 = stemp;
157*bf2c3715SXin Li     *sx1 = *sy1 * su;
158*bf2c3715SXin Li /*         GO SCALE-CHECK */
159*bf2c3715SXin Li     goto L100;
160*bf2c3715SXin Li /*     PROCEDURE..ZERO-H-D-AND-SX1.. */
161*bf2c3715SXin Li L60:
162*bf2c3715SXin Li     sflag = -one;
163*bf2c3715SXin Li     sh11 = zero;
164*bf2c3715SXin Li     sh12 = zero;
165*bf2c3715SXin Li     sh21 = zero;
166*bf2c3715SXin Li     sh22 = zero;
167*bf2c3715SXin Li 
168*bf2c3715SXin Li     *sd1 = zero;
169*bf2c3715SXin Li     *sd2 = zero;
170*bf2c3715SXin Li     *sx1 = zero;
171*bf2c3715SXin Li /*         RETURN.. */
172*bf2c3715SXin Li     goto L220;
173*bf2c3715SXin Li /*     PROCEDURE..FIX-H.. */
174*bf2c3715SXin Li L70:
175*bf2c3715SXin Li     if (! (sflag >= zero)) {
176*bf2c3715SXin Li 	goto L90;
177*bf2c3715SXin Li     }
178*bf2c3715SXin Li 
179*bf2c3715SXin Li     if (! (sflag == zero)) {
180*bf2c3715SXin Li 	goto L80;
181*bf2c3715SXin Li     }
182*bf2c3715SXin Li     sh11 = one;
183*bf2c3715SXin Li     sh22 = one;
184*bf2c3715SXin Li     sflag = -one;
185*bf2c3715SXin Li     goto L90;
186*bf2c3715SXin Li L80:
187*bf2c3715SXin Li     sh21 = -one;
188*bf2c3715SXin Li     sh12 = one;
189*bf2c3715SXin Li     sflag = -one;
190*bf2c3715SXin Li L90:
191*bf2c3715SXin Li     switch (igo) {
192*bf2c3715SXin Li 	case 0: goto L120;
193*bf2c3715SXin Li 	case 1: goto L150;
194*bf2c3715SXin Li 	case 2: goto L180;
195*bf2c3715SXin Li 	case 3: goto L210;
196*bf2c3715SXin Li     }
197*bf2c3715SXin Li /*     PROCEDURE..SCALE-CHECK */
198*bf2c3715SXin Li L100:
199*bf2c3715SXin Li L110:
200*bf2c3715SXin Li     if (! (*sd1 <= rgamsq)) {
201*bf2c3715SXin Li 	goto L130;
202*bf2c3715SXin Li     }
203*bf2c3715SXin Li     if (*sd1 == zero) {
204*bf2c3715SXin Li 	goto L160;
205*bf2c3715SXin Li     }
206*bf2c3715SXin Li     igo = 0;
207*bf2c3715SXin Li     igo_fmt = fmt_120;
208*bf2c3715SXin Li /*              FIX-H.. */
209*bf2c3715SXin Li     goto L70;
210*bf2c3715SXin Li L120:
211*bf2c3715SXin Li /* Computing 2nd power */
212*bf2c3715SXin Li     r__1 = gam;
213*bf2c3715SXin Li     *sd1 *= r__1 * r__1;
214*bf2c3715SXin Li     *sx1 /= gam;
215*bf2c3715SXin Li     sh11 /= gam;
216*bf2c3715SXin Li     sh12 /= gam;
217*bf2c3715SXin Li     goto L110;
218*bf2c3715SXin Li L130:
219*bf2c3715SXin Li L140:
220*bf2c3715SXin Li     if (! (*sd1 >= gamsq)) {
221*bf2c3715SXin Li 	goto L160;
222*bf2c3715SXin Li     }
223*bf2c3715SXin Li     igo = 1;
224*bf2c3715SXin Li     igo_fmt = fmt_150;
225*bf2c3715SXin Li /*              FIX-H.. */
226*bf2c3715SXin Li     goto L70;
227*bf2c3715SXin Li L150:
228*bf2c3715SXin Li /* Computing 2nd power */
229*bf2c3715SXin Li     r__1 = gam;
230*bf2c3715SXin Li     *sd1 /= r__1 * r__1;
231*bf2c3715SXin Li     *sx1 *= gam;
232*bf2c3715SXin Li     sh11 *= gam;
233*bf2c3715SXin Li     sh12 *= gam;
234*bf2c3715SXin Li     goto L140;
235*bf2c3715SXin Li L160:
236*bf2c3715SXin Li L170:
237*bf2c3715SXin Li     if (! (dabs(*sd2) <= rgamsq)) {
238*bf2c3715SXin Li 	goto L190;
239*bf2c3715SXin Li     }
240*bf2c3715SXin Li     if (*sd2 == zero) {
241*bf2c3715SXin Li 	goto L220;
242*bf2c3715SXin Li     }
243*bf2c3715SXin Li     igo = 2;
244*bf2c3715SXin Li     igo_fmt = fmt_180;
245*bf2c3715SXin Li /*              FIX-H.. */
246*bf2c3715SXin Li     goto L70;
247*bf2c3715SXin Li L180:
248*bf2c3715SXin Li /* Computing 2nd power */
249*bf2c3715SXin Li     r__1 = gam;
250*bf2c3715SXin Li     *sd2 *= r__1 * r__1;
251*bf2c3715SXin Li     sh21 /= gam;
252*bf2c3715SXin Li     sh22 /= gam;
253*bf2c3715SXin Li     goto L170;
254*bf2c3715SXin Li L190:
255*bf2c3715SXin Li L200:
256*bf2c3715SXin Li     if (! (dabs(*sd2) >= gamsq)) {
257*bf2c3715SXin Li 	goto L220;
258*bf2c3715SXin Li     }
259*bf2c3715SXin Li     igo = 3;
260*bf2c3715SXin Li     igo_fmt = fmt_210;
261*bf2c3715SXin Li /*              FIX-H.. */
262*bf2c3715SXin Li     goto L70;
263*bf2c3715SXin Li L210:
264*bf2c3715SXin Li /* Computing 2nd power */
265*bf2c3715SXin Li     r__1 = gam;
266*bf2c3715SXin Li     *sd2 /= r__1 * r__1;
267*bf2c3715SXin Li     sh21 *= gam;
268*bf2c3715SXin Li     sh22 *= gam;
269*bf2c3715SXin Li     goto L200;
270*bf2c3715SXin Li L220:
271*bf2c3715SXin Li     if (sflag < 0.f) {
272*bf2c3715SXin Li 	goto L250;
273*bf2c3715SXin Li     } else if (sflag == 0) {
274*bf2c3715SXin Li 	goto L230;
275*bf2c3715SXin Li     } else {
276*bf2c3715SXin Li 	goto L240;
277*bf2c3715SXin Li     }
278*bf2c3715SXin Li L230:
279*bf2c3715SXin Li     sparam[3] = sh21;
280*bf2c3715SXin Li     sparam[4] = sh12;
281*bf2c3715SXin Li     goto L260;
282*bf2c3715SXin Li L240:
283*bf2c3715SXin Li     sparam[2] = sh11;
284*bf2c3715SXin Li     sparam[5] = sh22;
285*bf2c3715SXin Li     goto L260;
286*bf2c3715SXin Li L250:
287*bf2c3715SXin Li     sparam[2] = sh11;
288*bf2c3715SXin Li     sparam[3] = sh21;
289*bf2c3715SXin Li     sparam[4] = sh12;
290*bf2c3715SXin Li     sparam[5] = sh22;
291*bf2c3715SXin Li L260:
292*bf2c3715SXin Li     sparam[1] = sflag;
293*bf2c3715SXin Li     return 0;
294*bf2c3715SXin Li } /* srotmg_ */
295*bf2c3715SXin Li 
296