1+ /***************************************************************************
2+ Copyright (c) 2013, The OpenBLAS Project
3+ All rights reserved.
4+ Redistribution and use in source and binary forms, with or without
5+ modification, are permitted provided that the following conditions are
6+ met:
7+ 1. Redistributions of source code must retain the above copyright
8+ notice, this list of conditions and the following disclaimer.
9+ 2. Redistributions in binary form must reproduce the above copyright
10+ notice, this list of conditions and the following disclaimer in
11+ the documentation and/or other materials provided with the
12+ distribution.
13+ 3. Neither the name of the OpenBLAS project nor the names of
14+ its contributors may be used to endorse or promote products
15+ derived from this software without specific prior written permission.
16+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+ ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE
20+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
25+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26+ *****************************************************************************/
27+
28+ /**************************************************************************************
29+ * 2014/02/28 Saar
30+ * Test with lapack-3.5.0 : OK
31+ *
32+ **************************************************************************************/
33+
34+
135#include "common.h"
236#ifdef FUNCTION_PROFILE
337#include "functable.h"
741#define GAMSQ 16777216.e0
842#define RGAMSQ 5.9604645e-8
943
44+ #define TWO 2.e0
45+
1046#ifdef DOUBLE
1147#define ABS (x ) fabs(x)
1248#else
@@ -25,181 +61,168 @@ void CNAME(FLOAT *dd1, FLOAT *dd2, FLOAT *dx1, FLOAT dy1, FLOAT *dparam){
2561
2662#endif
2763
28- FLOAT du , dp1 , dp2 , dq2 , dq1 , dh11 , dh21 , dh12 , dh22 ;
29- int igo , flag ;
30- FLOAT dtemp ;
31-
32- #ifndef CBLAS
33- PRINT_DEBUG_NAME ;
34- #else
35- PRINT_DEBUG_CNAME ;
36- #endif
37-
38- dh11 = ZERO ;
39- dh12 = ZERO ;
40- dh21 = ZERO ;
41- dh22 = ZERO ;
42-
43- if (* dd1 < ZERO ) goto L60 ;
44-
45- dp2 = * dd2 * dy1 ;
46-
47- if (dp2 == ZERO ) {
48- flag = -2 ;
49- goto L260 ;
50- }
51-
52- dp1 = * dd1 * * dx1 ;
53- dq2 = dp2 * dy1 ;
54- dq1 = dp1 * * dx1 ;
55-
56- if (! (ABS (dq1 ) > ABS (dq2 ))) goto L40 ;
57-
58- dh21 = - (dy1 ) / * dx1 ;
59- dh12 = dp2 / dp1 ;
60-
61- du = ONE - dh12 * dh21 ;
62-
63- if (du <= ZERO ) goto L60 ;
64-
65- flag = 0 ;
66- * dd1 /= du ;
67- * dd2 /= du ;
68- * dx1 *= du ;
69-
70- goto L100 ;
71-
72- L40 :
73- if (dq2 < ZERO ) goto L60 ;
74-
75- flag = 1 ;
76- dh11 = dp1 / dp2 ;
77- dh22 = * dx1 / dy1 ;
78- du = ONE + dh11 * dh22 ;
79- dtemp = * dd2 / du ;
80- * dd2 = * dd1 / du ;
81- * dd1 = dtemp ;
82- * dx1 = dy1 * du ;
83- goto L100 ;
84-
85- L60 :
86- flag = -1 ;
87- dh11 = ZERO ;
88- dh12 = ZERO ;
89- dh21 = ZERO ;
90- dh22 = ZERO ;
91-
92- * dd1 = ZERO ;
93- * dd2 = ZERO ;
94- * dx1 = ZERO ;
95- goto L220 ;
96-
97-
98- L70 :
99- if (flag < 0 ) goto L90 ;
100-
101- if (flag > 0 ) goto L80 ;
102-
103- dh11 = ONE ;
104- dh22 = ONE ;
105- flag = -1 ;
106- goto L90 ;
107-
108- L80 :
109- dh21 = - ONE ;
110- dh12 = ONE ;
111- flag = -1 ;
112-
113- L90 :
114- switch (igo ) {
115- case 0 : goto L120 ;
116- case 1 : goto L150 ;
117- case 2 : goto L180 ;
118- case 3 : goto L210 ;
119- }
120-
121- L100 :
122- if (!(* dd1 <= RGAMSQ )) goto L130 ;
123- if (* dd1 == ZERO ) goto L160 ;
124- igo = 0 ;
125- goto L70 ;
126-
127- L120 :
128- * dd1 *= GAM * GAM ;
129- * dx1 /= GAM ;
130- dh11 /= GAM ;
131- dh12 /= GAM ;
132- goto L100 ;
133-
134- L130 :
135- if (! (* dd1 >= GAMSQ )) {
136- goto L160 ;
137- }
138- igo = 1 ;
139- goto L70 ;
140-
141- L150 :
142- * dd1 /= GAM * GAM ;
143- * dx1 *= GAM ;
144- dh11 *= GAM ;
145- dh12 *= GAM ;
146- goto L130 ;
147-
148- L160 :
149- if (! (ABS (* dd2 ) <= RGAMSQ )) {
150- goto L190 ;
151- }
152- if (* dd2 == ZERO ) {
153- goto L220 ;
154- }
155- igo = 2 ;
156- goto L70 ;
157-
158- L180 :
159- /* Computing 2nd power */
160- * dd2 *= GAM * GAM ;
161- dh21 /= GAM ;
162- dh22 /= GAM ;
163- goto L160 ;
164-
165- L190 :
166- if (! (ABS (* dd2 ) >= GAMSQ )) {
167- goto L220 ;
168- }
169- igo = 3 ;
170- goto L70 ;
171-
172- L210 :
173- /* Computing 2nd power */
174- * dd2 /= GAM * GAM ;
175- dh21 *= GAM ;
176- dh22 *= GAM ;
177- goto L190 ;
178-
179- L220 :
180- if (flag < 0 ) {
181- goto L250 ;
182- } else if (flag == 0 ) {
183- goto L230 ;
184- } else {
185- goto L240 ;
186- }
187- L230 :
188- dparam [2 ] = dh21 ;
189- dparam [3 ] = dh12 ;
190- goto L260 ;
191- L240 :
192- dparam [2 ] = dh11 ;
193- dparam [4 ] = dh22 ;
194- goto L260 ;
195- L250 :
196- dparam [1 ] = dh11 ;
197- dparam [2 ] = dh21 ;
198- dparam [3 ] = dh12 ;
199- dparam [4 ] = dh22 ;
200- L260 :
201- dparam [0 ] = (FLOAT ) flag ;
202- return ;
64+ FLOAT du , dp1 , dp2 , dq2 , dq1 , dh11 , dh21 , dh12 , dh22 , dflag , dtemp ;
65+
66+ if (* dd1 < ZERO )
67+ {
68+ dflag = - ONE ;
69+ dh11 = ZERO ;
70+ dh12 = ZERO ;
71+ dh21 = ZERO ;
72+ dh22 = ZERO ;
73+
74+ * dd1 = ZERO ;
75+ * dd2 = ZERO ;
76+ * dx1 = ZERO ;
77+ }
78+ else
79+ {
80+ dp2 = * dd2 * dy1 ;
81+ if (dp2 == ZERO )
82+ {
83+ dflag = - TWO ;
84+ dparam [0 ] = dflag ;
85+ return ;
86+ }
87+ dp1 = * dd1 * * dx1 ;
88+ dq2 = dp2 * dy1 ;
89+ dq1 = dp1 * * dx1 ;
90+ if (ABS (dq1 ) > ABS (dq2 ))
91+ {
92+ dh21 = - dy1 / * dx1 ;
93+ dh12 = dp2 / dp1 ;
94+
95+ du = ONE - dh12 * dh21 ;
96+ if (du > ZERO )
97+ {
98+ dflag = ZERO ;
99+ * dd1 = * dd1 / du ;
100+ * dd2 = * dd2 / du ;
101+ * dx1 = * dx1 * du ;
102+
103+ }
104+ }
105+ else
106+ {
107+ if (dq2 < ZERO )
108+ {
109+ dflag = - ONE ;
110+
111+ dh11 = ZERO ;
112+ dh12 = ZERO ;
113+ dh21 = ZERO ;
114+ dh22 = ZERO ;
115+
116+ * dd1 = ZERO ;
117+ * dd2 = ZERO ;
118+ * dx1 = ZERO ;
119+ }
120+ else
121+ {
122+ dflag = ONE ;
123+
124+ dh11 = dp1 / dp2 ;
125+ dh22 = * dx1 / dy1 ;
126+ du = ONE + dh11 * dh22 ;
127+ dtemp = * dd2 / du ;
128+
129+ * dd2 = * dd1 / du ;
130+ * dd1 = dtemp ;
131+ * dx1 = dy1 * du ;
132+ }
133+ }
134+
135+
136+ if (* dd1 != ZERO )
137+ {
138+ while ( (* dd1 <= RGAMSQ ) || (* dd1 >= GAMSQ ) )
139+ {
140+ if (dflag == ZERO )
141+ {
142+ dh11 = ONE ;
143+ dh22 = ONE ;
144+ dflag = - ONE ;
145+ }
146+ else
147+ {
148+ dh21 = - ONE ;
149+ dh12 = ONE ;
150+ dflag = - ONE ;
151+ }
152+ if ( * dd1 <= RGAMSQ )
153+ {
154+ * dd1 = * dd1 * (GAM * GAM );
155+ * dx1 = * dx1 / GAM ;
156+ dh11 = dh11 / GAM ;
157+ dh12 = dh12 / GAM ;
158+ }
159+ else
160+ {
161+ * dd1 = * dd1 / (GAM * GAM );
162+ * dx1 = * dx1 * GAM ;
163+ dh11 = dh11 * GAM ;
164+ dh12 = dh12 * GAM ;
165+ }
166+ }
167+ }
168+
169+ if (* dd2 != ZERO )
170+ {
171+ while ( (ABS (* dd2 ) <= RGAMSQ ) || (ABS (* dd2 ) >= GAMSQ ) )
172+ {
173+ if (dflag == ZERO )
174+ {
175+ dh11 = ONE ;
176+ dh22 = ONE ;
177+ dflag = - ONE ;
178+ }
179+ else
180+ {
181+ dh21 = - ONE ;
182+ dh12 = ONE ;
183+ dflag = - ONE ;
184+ }
185+ if ( ABS (* dd2 ) <= RGAMSQ )
186+ {
187+ * dd2 = * dd2 * (GAM * GAM );
188+ dh21 = dh21 / GAM ;
189+ dh22 = dh22 / GAM ;
190+ }
191+ else
192+ {
193+ * dd2 = * dd2 / (GAM * GAM );
194+ dh21 = dh21 * GAM ;
195+ dh22 = dh22 * GAM ;
196+ }
197+ }
198+ }
199+
200+ }
201+
202+ if (dflag < ZERO )
203+ {
204+ dparam [1 ] = dh11 ;
205+ dparam [2 ] = dh21 ;
206+ dparam [3 ] = dh12 ;
207+ dparam [4 ] = dh22 ;
208+ }
209+ else
210+ {
211+ if (dflag == ZERO )
212+ {
213+ dparam [2 ] = dh21 ;
214+ dparam [3 ] = dh12 ;
215+ }
216+ else
217+ {
218+ dparam [1 ] = dh11 ;
219+ dparam [4 ] = dh22 ;
220+ }
221+ }
222+
223+
224+ dparam [0 ] = dflag ;
225+ return ;
203226}
204227
205228
0 commit comments