]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/glibc/glibc-rh837918.patch
dhcpcd: fix delay after dhcp down.
[ipfire-2.x.git] / src / patches / glibc / glibc-rh837918.patch
CommitLineData
30a4e827
MT
1diff -Nrup a/math/libm-test.inc b/math/libm-test.inc
2--- a/math/libm-test.inc 2010-05-04 05:27:23.000000000 -0600
3+++ b/math/libm-test.inc 2012-08-06 09:54:00.821929695 -0600
4@@ -2018,6 +2018,142 @@ cos_test (void)
5
6
7 static void
8+cos_test_tonearest (void)
9+{
10+ int save_round_mode;
11+ errno = 0;
12+ FUNC(cos) (0);
13+ if (errno == ENOSYS)
14+ /* Function not implemented. */
15+ return;
16+
17+ START (cos_tonearest);
18+
19+ save_round_mode = fegetround ();
20+
21+ if (!fesetround (FE_TONEAREST))
22+ {
23+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
24+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
25+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
26+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
27+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
28+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
29+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
30+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
31+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
32+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
33+ }
34+
35+ fesetround (save_round_mode);
36+
37+ END (cos_tonearest);
38+}
39+
40+
41+static void
42+cos_test_towardzero (void)
43+{
44+ int save_round_mode;
45+ errno = 0;
46+ FUNC(cos) (0);
47+ if (errno == ENOSYS)
48+ /* Function not implemented. */
49+ return;
50+
51+ START (cos_towardzero);
52+
53+ save_round_mode = fegetround ();
54+
55+ if (!fesetround (FE_TOWARDZERO))
56+ {
57+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
58+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
59+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
60+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
61+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
62+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
63+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
64+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
65+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
66+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
67+ }
68+
69+ fesetround (save_round_mode);
70+
71+ END (cos_towardzero);
72+}
73+
74+
75+static void
76+cos_test_downward (void)
77+{
78+ int save_round_mode;
79+ errno = 0;
80+ FUNC(cos) (0);
81+ if (errno == ENOSYS)
82+ /* Function not implemented. */
83+ return;
84+
85+ START (cos_downward);
86+
87+ save_round_mode = fegetround ();
88+
89+ if (!fesetround (FE_DOWNWARD))
90+ {
91+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
92+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
93+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
94+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
95+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
96+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
97+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
98+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
99+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
100+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
101+ }
102+
103+ fesetround (save_round_mode);
104+
105+ END (cos_downward);
106+}
107+
108+
109+static void
110+cos_test_upward (void)
111+{
112+ int save_round_mode;
113+ errno = 0;
114+ FUNC(cos) (0);
115+ if (errno == ENOSYS)
116+ /* Function not implemented. */
117+ return;
118+
119+ START (cos_upward);
120+
121+ save_round_mode = fegetround ();
122+
123+ if (!fesetround (FE_UPWARD))
124+ {
125+ TEST_f_f (cos, 1, 0.5403023058681397174009366074429766037323L);
126+ TEST_f_f (cos, 2, -0.4161468365471423869975682295007621897660L);
127+ TEST_f_f (cos, 3, -0.9899924966004454572715727947312613023937L);
128+ TEST_f_f (cos, 4, -0.6536436208636119146391681830977503814241L);
129+ TEST_f_f (cos, 5, 0.2836621854632262644666391715135573083344L);
130+ TEST_f_f (cos, 6, 0.9601702866503660205456522979229244054519L);
131+ TEST_f_f (cos, 7, 0.7539022543433046381411975217191820122183L);
132+ TEST_f_f (cos, 8, -0.1455000338086135258688413818311946826093L);
133+ TEST_f_f (cos, 9, -0.9111302618846769883682947111811653112463L);
134+ TEST_f_f (cos, 10, -0.8390715290764524522588639478240648345199L);
135+ }
136+
137+ fesetround (save_round_mode);
138+
139+ END (cos_upward);
140+}
141+
142+
143+static void
144 cosh_test (void)
145 {
146 errno = 0;
147@@ -2043,6 +2179,114 @@ cosh_test (void)
148
149
150 static void
151+cosh_test_tonearest (void)
152+{
153+ int save_round_mode;
154+ errno = 0;
155+ FUNC(cosh) (0);
156+ if (errno == ENOSYS)
157+ /* Function not implemented. */
158+ return;
159+
160+ START (cosh_tonearest);
161+
162+ save_round_mode = fegetround ();
163+
164+ if (!fesetround (FE_TONEAREST))
165+ {
166+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
167+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
168+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
169+ }
170+
171+ fesetround (save_round_mode);
172+
173+ END (cosh_tonearest);
174+}
175+
176+
177+static void
178+cosh_test_towardzero (void)
179+{
180+ int save_round_mode;
181+ errno = 0;
182+ FUNC(cosh) (0);
183+ if (errno == ENOSYS)
184+ /* Function not implemented. */
185+ return;
186+
187+ START (cosh_towardzero);
188+
189+ save_round_mode = fegetround ();
190+
191+ if (!fesetround (FE_TOWARDZERO))
192+ {
193+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
194+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
195+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
196+ }
197+
198+ fesetround (save_round_mode);
199+
200+ END (cosh_towardzero);
201+}
202+
203+
204+static void
205+cosh_test_downward (void)
206+{
207+ int save_round_mode;
208+ errno = 0;
209+ FUNC(cosh) (0);
210+ if (errno == ENOSYS)
211+ /* Function not implemented. */
212+ return;
213+
214+ START (cosh_downward);
215+
216+ save_round_mode = fegetround ();
217+
218+ if (!fesetround (FE_DOWNWARD))
219+ {
220+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
221+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
222+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
223+ }
224+
225+ fesetround (save_round_mode);
226+
227+ END (cosh_downward);
228+}
229+
230+
231+static void
232+cosh_test_upward (void)
233+{
234+ int save_round_mode;
235+ errno = 0;
236+ FUNC(cosh) (0);
237+ if (errno == ENOSYS)
238+ /* Function not implemented. */
239+ return;
240+
241+ START (cosh_upward);
242+
243+ save_round_mode = fegetround ();
244+
245+ if (!fesetround (FE_UPWARD))
246+ {
247+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
248+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
249+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
250+ }
251+
252+ fesetround (save_round_mode);
253+
254+ END (cosh_upward);
255+}
256+
257+
258+static void
259 cpow_test (void)
260 {
261 errno = 0;
262@@ -2527,6 +2771,114 @@ exp_test (void)
263
264
265 static void
266+exp_test_tonearest (void)
267+{
268+ int save_round_mode;
269+ errno = 0;
270+ FUNC(exp) (0);
271+ if (errno == ENOSYS)
272+ /* Function not implemented. */
273+ return;
274+
275+ START (exp_tonearest);
276+
277+ save_round_mode = fegetround ();
278+
279+ if (!fesetround (FE_TONEAREST))
280+ {
281+ TEST_f_f (exp, 1, M_El);
282+ TEST_f_f (exp, 2, M_E2l);
283+ TEST_f_f (exp, 3, M_E3l);
284+ }
285+
286+ fesetround (save_round_mode);
287+
288+ END (exp_tonearest);
289+}
290+
291+
292+static void
293+exp_test_towardzero (void)
294+{
295+ int save_round_mode;
296+ errno = 0;
297+ FUNC(exp) (0);
298+ if (errno == ENOSYS)
299+ /* Function not implemented. */
300+ return;
301+
302+ START (exp_towardzero);
303+
304+ save_round_mode = fegetround ();
305+
306+ if (!fesetround (FE_TOWARDZERO))
307+ {
308+ TEST_f_f (exp, 1, M_El);
309+ TEST_f_f (exp, 2, M_E2l);
310+ TEST_f_f (exp, 3, M_E3l);
311+ }
312+
313+ fesetround (save_round_mode);
314+
315+ END (exp_towardzero);
316+}
317+
318+
319+static void
320+exp_test_downward (void)
321+{
322+ int save_round_mode;
323+ errno = 0;
324+ FUNC(exp) (0);
325+ if (errno == ENOSYS)
326+ /* Function not implemented. */
327+ return;
328+
329+ START (exp_downward);
330+
331+ save_round_mode = fegetround ();
332+
333+ if (!fesetround (FE_DOWNWARD))
334+ {
335+ TEST_f_f (exp, 1, M_El);
336+ TEST_f_f (exp, 2, M_E2l);
337+ TEST_f_f (exp, 3, M_E3l);
338+ }
339+
340+ fesetround (save_round_mode);
341+
342+ END (exp_downward);
343+}
344+
345+
346+static void
347+exp_test_upward (void)
348+{
349+ int save_round_mode;
350+ errno = 0;
351+ FUNC(exp) (0);
352+ if (errno == ENOSYS)
353+ /* Function not implemented. */
354+ return;
355+
356+ START (exp_upward);
357+
358+ save_round_mode = fegetround ();
359+
360+ if (!fesetround (FE_UPWARD))
361+ {
362+ TEST_f_f (exp, 1, M_El);
363+ TEST_f_f (exp, 2, M_E2l);
364+ TEST_f_f (exp, 3, M_E3l);
365+ }
366+
367+ fesetround (save_round_mode);
368+
369+ END (exp_upward);
370+}
371+
372+
373+static void
374 exp10_test (void)
375 {
376 errno = 0;
377@@ -4848,22 +5200,127 @@ pow_test (void)
378 END (pow);
379 }
380
381+
382 static void
383-remainder_test (void)
384+pow_test_tonearest (void)
385 {
386+ int save_round_mode;
387 errno = 0;
388- FUNC(remainder) (1.625, 1.0);
389+ FUNC(pow) (0, 0);
390 if (errno == ENOSYS)
391 /* Function not implemented. */
392 return;
393
394- START (remainder);
395+ START (pow_tonearest);
396
397- TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
398- TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
399- TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
400- TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
401- TEST_ff_f (remainder, nan_value, nan_value, nan_value);
402+ save_round_mode = fegetround ();
403+
404+ if (!fesetround (FE_TONEAREST))
405+ {
406+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
407+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
408+ }
409+
410+ fesetround (save_round_mode);
411+
412+ END (pow_tonearest);
413+}
414+
415+
416+static void
417+pow_test_towardzero (void)
418+{
419+ int save_round_mode;
420+ errno = 0;
421+ FUNC(pow) (0, 0);
422+ if (errno == ENOSYS)
423+ /* Function not implemented. */
424+ return;
425+
426+ START (pow_towardzero);
427+
428+ save_round_mode = fegetround ();
429+
430+ if (!fesetround (FE_TOWARDZERO))
431+ {
432+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
433+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
434+ }
435+
436+ fesetround (save_round_mode);
437+
438+ END (pow_towardzero);
439+}
440+
441+
442+static void
443+pow_test_downward (void)
444+{
445+ int save_round_mode;
446+ errno = 0;
447+ FUNC(pow) (0, 0);
448+ if (errno == ENOSYS)
449+ /* Function not implemented. */
450+ return;
451+
452+ START (pow_downward);
453+
454+ save_round_mode = fegetround ();
455+
456+ if (!fesetround (FE_DOWNWARD))
457+ {
458+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
459+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
460+ }
461+
462+ fesetround (save_round_mode);
463+
464+ END (pow_downward);
465+}
466+
467+
468+static void
469+pow_test_upward (void)
470+{
471+ int save_round_mode;
472+ errno = 0;
473+ FUNC(pow) (0, 0);
474+ if (errno == ENOSYS)
475+ /* Function not implemented. */
476+ return;
477+
478+ START (pow_upward);
479+
480+ save_round_mode = fegetround ();
481+
482+ if (!fesetround (FE_UPWARD))
483+ {
484+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
485+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
486+ }
487+
488+ fesetround (save_round_mode);
489+
490+ END (pow_upward);
491+}
492+
493+
494+static void
495+remainder_test (void)
496+{
497+ errno = 0;
498+ FUNC(remainder) (1.625, 1.0);
499+ if (errno == ENOSYS)
500+ /* Function not implemented. */
501+ return;
502+
503+ START (remainder);
504+
505+ TEST_ff_f (remainder, 1, 0, nan_value, INVALID_EXCEPTION);
506+ TEST_ff_f (remainder, 1, minus_zero, nan_value, INVALID_EXCEPTION);
507+ TEST_ff_f (remainder, plus_infty, 1, nan_value, INVALID_EXCEPTION);
508+ TEST_ff_f (remainder, minus_infty, 1, nan_value, INVALID_EXCEPTION);
509+ TEST_ff_f (remainder, nan_value, nan_value, nan_value);
510
511 TEST_ff_f (remainder, 1.625, 1.0, -0.375);
512 TEST_ff_f (remainder, -1.625, 1.0, 0.375);
513@@ -5545,6 +6002,7 @@ sin_test (void)
514
515 #ifdef TEST_DOUBLE
516 TEST_f_f (sin, 0.80190127184058835, 0.71867942238767868);
517+ TEST_f_f (sin, 2.522464e-1, 2.4957989804940911e-1);
518 #endif
519
520 END (sin);
521@@ -5553,6 +6011,142 @@ sin_test (void)
522
523
524 static void
525+sin_test_tonearest (void)
526+{
527+ int save_round_mode;
528+ errno = 0;
529+ FUNC(sin) (0);
530+ if (errno == ENOSYS)
531+ /* Function not implemented. */
532+ return;
533+
534+ START (sin_tonearest);
535+
536+ save_round_mode = fegetround ();
537+
538+ if (!fesetround (FE_TONEAREST))
539+ {
540+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
541+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
542+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
543+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
544+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
545+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
546+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
547+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
548+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
549+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
550+ }
551+
552+ fesetround (save_round_mode);
553+
554+ END (sin_tonearest);
555+}
556+
557+
558+static void
559+sin_test_towardzero (void)
560+{
561+ int save_round_mode;
562+ errno = 0;
563+ FUNC(sin) (0);
564+ if (errno == ENOSYS)
565+ /* Function not implemented. */
566+ return;
567+
568+ START (sin_towardzero);
569+
570+ save_round_mode = fegetround ();
571+
572+ if (!fesetround (FE_TOWARDZERO))
573+ {
574+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
575+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
576+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
577+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
578+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
579+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
580+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
581+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
582+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
583+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
584+ }
585+
586+ fesetround (save_round_mode);
587+
588+ END (sin_towardzero);
589+}
590+
591+
592+static void
593+sin_test_downward (void)
594+{
595+ int save_round_mode;
596+ errno = 0;
597+ FUNC(sin) (0);
598+ if (errno == ENOSYS)
599+ /* Function not implemented. */
600+ return;
601+
602+ START (sin_downward);
603+
604+ save_round_mode = fegetround ();
605+
606+ if (!fesetround (FE_DOWNWARD))
607+ {
608+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
609+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
610+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
611+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
612+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
613+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
614+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
615+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
616+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
617+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
618+ }
619+
620+ fesetround (save_round_mode);
621+
622+ END (sin_downward);
623+}
624+
625+
626+static void
627+sin_test_upward (void)
628+{
629+ int save_round_mode;
630+ errno = 0;
631+ FUNC(sin) (0);
632+ if (errno == ENOSYS)
633+ /* Function not implemented. */
634+ return;
635+
636+ START (sin_upward);
637+
638+ save_round_mode = fegetround ();
639+
640+ if (!fesetround (FE_UPWARD))
641+ {
642+ TEST_f_f (sin, 1, 0.8414709848078965066525023216302989996226L);
643+ TEST_f_f (sin, 2, 0.9092974268256816953960198659117448427023L);
644+ TEST_f_f (sin, 3, 0.1411200080598672221007448028081102798469L);
645+ TEST_f_f (sin, 4, -0.7568024953079282513726390945118290941359L);
646+ TEST_f_f (sin, 5, -0.9589242746631384688931544061559939733525L);
647+ TEST_f_f (sin, 6, -0.2794154981989258728115554466118947596280L);
648+ TEST_f_f (sin, 7, 0.6569865987187890903969990915936351779369L);
649+ TEST_f_f (sin, 8, 0.9893582466233817778081235982452886721164L);
650+ TEST_f_f (sin, 9, 0.4121184852417565697562725663524351793439L);
651+ TEST_f_f (sin, 10, -0.5440211108893698134047476618513772816836L);
652+ }
653+
654+ fesetround (save_round_mode);
655+
656+ END (sin_upward);
657+}
658+
659+
660+static void
661 sincos_test (void)
662 {
663 FLOAT sin_res, cos_res;
664@@ -5610,6 +6204,115 @@ sinh_test (void)
665 END (sinh);
666 }
667
668+
669+static void
670+sinh_test_tonearest (void)
671+{
672+ int save_round_mode;
673+ errno = 0;
674+ FUNC(sinh) (0);
675+ if (errno == ENOSYS)
676+ /* Function not implemented. */
677+ return;
678+
679+ START (sinh_tonearest);
680+
681+ save_round_mode = fegetround ();
682+
683+ if (!fesetround (FE_TONEAREST))
684+ {
685+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
686+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
687+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
688+ }
689+
690+ fesetround (save_round_mode);
691+
692+ END (sinh_tonearest);
693+}
694+
695+
696+static void
697+sinh_test_towardzero (void)
698+{
699+ int save_round_mode;
700+ errno = 0;
701+ FUNC(sinh) (0);
702+ if (errno == ENOSYS)
703+ /* Function not implemented. */
704+ return;
705+
706+ START (sinh_towardzero);
707+
708+ save_round_mode = fegetround ();
709+
710+ if (!fesetround (FE_TOWARDZERO))
711+ {
712+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
713+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
714+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
715+ }
716+
717+ fesetround (save_round_mode);
718+
719+ END (sinh_towardzero);
720+}
721+
722+
723+static void
724+sinh_test_downward (void)
725+{
726+ int save_round_mode;
727+ errno = 0;
728+ FUNC(sinh) (0);
729+ if (errno == ENOSYS)
730+ /* Function not implemented. */
731+ return;
732+
733+ START (sinh_downward);
734+
735+ save_round_mode = fegetround ();
736+
737+ if (!fesetround (FE_DOWNWARD))
738+ {
739+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
740+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
741+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
742+ }
743+
744+ fesetround (save_round_mode);
745+
746+ END (sinh_downward);
747+}
748+
749+
750+static void
751+sinh_test_upward (void)
752+{
753+ int save_round_mode;
754+ errno = 0;
755+ FUNC(sinh) (0);
756+ if (errno == ENOSYS)
757+ /* Function not implemented. */
758+ return;
759+
760+ START (sinh_upward);
761+
762+ save_round_mode = fegetround ();
763+
764+ if (!fesetround (FE_UPWARD))
765+ {
766+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
767+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
768+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
769+ }
770+
771+ fesetround (save_round_mode);
772+
773+ END (sinh_upward);
774+}
775+
776+
777 static void
778 sqrt_test (void)
779 {
780@@ -5673,6 +6376,143 @@ tan_test (void)
781 END (tan);
782 }
783
784+
785+static void
786+tan_test_tonearest (void)
787+{
788+ int save_round_mode;
789+ errno = 0;
790+ FUNC(tan) (0);
791+ if (errno == ENOSYS)
792+ /* Function not implemented. */
793+ return;
794+
795+ START (tan_tonearest);
796+
797+ save_round_mode = fegetround ();
798+
799+ if (!fesetround (FE_TONEAREST))
800+ {
801+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
802+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
803+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
804+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
805+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
806+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
807+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
808+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
809+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
810+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
811+ }
812+
813+ fesetround (save_round_mode);
814+
815+ END (tan_tonearest);
816+}
817+
818+
819+static void
820+tan_test_towardzero (void)
821+{
822+ int save_round_mode;
823+ errno = 0;
824+ FUNC(tan) (0);
825+ if (errno == ENOSYS)
826+ /* Function not implemented. */
827+ return;
828+
829+ START (tan_towardzero);
830+
831+ save_round_mode = fegetround ();
832+
833+ if (!fesetround (FE_TOWARDZERO))
834+ {
835+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
836+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
837+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
838+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
839+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
840+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
841+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
842+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
843+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
844+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
845+ }
846+
847+ fesetround (save_round_mode);
848+
849+ END (tan_towardzero);
850+}
851+
852+
853+static void
854+tan_test_downward (void)
855+{
856+ int save_round_mode;
857+ errno = 0;
858+ FUNC(tan) (0);
859+ if (errno == ENOSYS)
860+ /* Function not implemented. */
861+ return;
862+
863+ START (tan_downward);
864+
865+ save_round_mode = fegetround ();
866+
867+ if (!fesetround (FE_DOWNWARD))
868+ {
869+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
870+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
871+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
872+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
873+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
874+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
875+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
876+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
877+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
878+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
879+ }
880+
881+ fesetround (save_round_mode);
882+
883+ END (tan_downward);
884+}
885+
886+
887+static void
888+tan_test_upward (void)
889+{
890+ int save_round_mode;
891+ errno = 0;
892+ FUNC(tan) (0);
893+ if (errno == ENOSYS)
894+ /* Function not implemented. */
895+ return;
896+
897+ START (tan_upward);
898+
899+ save_round_mode = fegetround ();
900+
901+ if (!fesetround (FE_UPWARD))
902+ {
903+ TEST_f_f (tan, 1, 1.5574077246549022305069748074583601730873L);
904+ TEST_f_f (tan, 2, -2.1850398632615189916433061023136825434320L);
905+ TEST_f_f (tan, 3, -0.1425465430742778052956354105339134932261L);
906+ TEST_f_f (tan, 4, 1.1578212823495775831373424182673239231198L);
907+ TEST_f_f (tan, 5, -3.3805150062465856369827058794473439087096L);
908+ TEST_f_f (tan, 6, -0.2910061913847491570536995888681755428312L);
909+ TEST_f_f (tan, 7, 0.8714479827243187364564508896003135663222L);
910+ TEST_f_f (tan, 8, -6.7997114552203786999252627596086333648814L);
911+ TEST_f_f (tan, 9, -0.4523156594418098405903708757987855343087L);
912+ TEST_f_f (tan, 10, 0.6483608274590866712591249330098086768169L);
913+ }
914+
915+ fesetround (save_round_mode);
916+
917+ END (tan_upward);
918+}
919+
920+
921 static void
922 tanh_test (void)
923 {
924@@ -6171,20 +7011,44 @@ main (int argc, char **argv)
925 atan_test ();
926 atan2_test ();
927 cos_test ();
928+ cos_test_tonearest ();
929+ cos_test_towardzero ();
930+ cos_test_downward ();
931+ cos_test_upward ();
932 sin_test ();
933+ sin_test_tonearest ();
934+ sin_test_towardzero ();
935+ sin_test_downward ();
936+ sin_test_upward ();
937 sincos_test ();
938 tan_test ();
939+ tan_test_tonearest ();
940+ tan_test_towardzero ();
941+ tan_test_downward ();
942+ tan_test_upward ();
943
944 /* Hyperbolic functions: */
945 acosh_test ();
946 asinh_test ();
947 atanh_test ();
948 cosh_test ();
949+ cosh_test_tonearest ();
950+ cosh_test_towardzero ();
951+ cosh_test_downward ();
952+ cosh_test_upward ();
953 sinh_test ();
954+ sinh_test_tonearest ();
955+ sinh_test_towardzero ();
956+ sinh_test_downward ();
957+ sinh_test_upward ();
958 tanh_test ();
959
960 /* Exponential and logarithmic functions: */
961 exp_test ();
962+ exp_test_tonearest ();
963+ exp_test_towardzero ();
964+ exp_test_downward ();
965+ exp_test_upward ();
966 exp10_test ();
967 exp2_test ();
968 expm1_test ();
969@@ -6207,6 +7071,10 @@ main (int argc, char **argv)
970 fabs_test ();
971 hypot_test ();
972 pow_test ();
973+ pow_test_tonearest ();
974+ pow_test_towardzero ();
975+ pow_test_downward ();
976+ pow_test_upward ();
977 sqrt_test ();
978
979 /* Error and gamma functions: */
980diff -Nrup a/math/math_private.h b/math/math_private.h
981--- a/math/math_private.h 2010-05-04 05:27:23.000000000 -0600
982+++ b/math/math_private.h 2012-08-06 09:54:00.821929695 -0600
983@@ -357,4 +357,41 @@ extern void __docos (double __x, double
984 #define math_force_eval(x) __asm __volatile ("" : : "m" (x))
985 #endif
986
987+
988+/* The standards only specify one variant of the fenv.h interfaces.
989+ But at least for some architectures we can be more efficient if we
990+ know what operations are going to be performed. Therefore we
991+ define additional interfaces. By default they refer to the normal
992+ interfaces. */
993+#define libc_fegetround() fegetround ()
994+#define libc_fegetroundf() fegetround ()
995+#define libc_fegetroundl() fegetround ()
996+
997+#define libc_fesetround(r) (void) fesetround (r)
998+#define libc_fesetroundf(r) (void) fesetround (r)
999+#define libc_fesetroundl(r) (void) fesetround (r)
1000+
1001+#define libc_feholdexcept(e) (void) feholdexcept (e)
1002+#define libc_feholdexceptf(e) (void) feholdexcept (e)
1003+#define libc_feholdexceptl(e) (void) feholdexcept (e)
1004+
1005+#define libc_feholdexcept_setround(e, r) \
1006+ do { feholdexcept (e); fesetround (r); } while (0)
1007+#define libc_feholdexcept_setroundf(e, r) \
1008+ do { feholdexcept (e); fesetround (r); } while (0)
1009+#define libc_feholdexcept_setroundl(e, r) \
1010+ do { feholdexcept (e); fesetround (r); } while (0)
1011+
1012+#define libc_fetestexcept(e) fetestexcept (e)
1013+#define libc_fetestexceptf(e) fetestexcept (e)
1014+#define libc_fetestexceptl(e) fetestexcept (e)
1015+
1016+#define libc_fesetenv(e) (void) fesetenv (e)
1017+#define libc_fesetenvf(e) (void) fesetenv (e)
1018+#define libc_fesetenvl(e) (void) fesetenv (e)
1019+
1020+#define libc_feupdateenv(e) (void) feupdateenv (e)
1021+#define libc_feupdateenvf(e) (void) feupdateenv (e)
1022+#define libc_feupdateenvl(e) (void) feupdateenv (e)
1023+
1024 #endif /* _MATH_PRIVATE_H_ */
1025diff -Nrup a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps
1026--- a/sysdeps/i386/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
1027+++ b/sysdeps/i386/fpu/libm-test-ulps 2012-08-06 11:29:16.370874961 -0600
1028@@ -9,18 +9,12 @@ ldouble: 1
1029 Test "asin (-0.5) == -pi/6":
1030 ildouble: 1
1031 ldouble: 1
1032-Test "asin (-1.0) == -pi/2":
1033-ildouble: 1
1034-ldouble: 1
1035 Test "asin (0.5) == pi/6":
1036 ildouble: 1
1037 ldouble: 1
1038 Test "asin (0.75) == 0.848062078981481008052944338998418080":
1039 ildouble: 1
1040 ldouble: 1
1041-Test "asin (1.0) == pi/2":
1042-ildouble: 1
1043-ldouble: 1
1044
1045 # atanh
1046 Test "atanh (0.75) == 0.972955074527656652552676371721589865":
1047@@ -35,20 +29,6 @@ ildouble: 2
1048 ldouble: 2
1049
1050 # cacosh
1051-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
1052-double: 1
1053-float: 9
1054-idouble: 1
1055-ifloat: 9
1056-ildouble: 6
1057-ldouble: 6
1058-Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
1059-double: 1
1060-float: 4
1061-idouble: 1
1062-ifloat: 4
1063-ildouble: 1
1064-ldouble: 1
1065 Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i":
1066 ildouble: 1
1067 ldouble: 1
1068@@ -124,8 +104,6 @@ ldouble: 1
1069 Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
1070 float: 1
1071 ifloat: 1
1072-ildouble: 1
1073-ldouble: 1
1074 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
1075 double: 1
1076 idouble: 1
1077@@ -149,9 +127,7 @@ float: 1
1078 idouble: 1
1079 ifloat: 1
1080 Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
1081-double: 1
1082 float: 1
1083-idouble: 1
1084 ifloat: 1
1085
1086 # cexp
1087@@ -186,8 +162,6 @@ ifloat: 1
1088 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
1089 double: 1
1090 idouble: 1
1091-ildouble: 1
1092-ldouble: 1
1093 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
1094 double: 1
1095 float: 1
1096@@ -262,27 +236,175 @@ ifloat: 1
1097 # cos
1098 Test "cos (M_PI_6l * 2.0) == 0.5":
1099 double: 1
1100-float: 1
1101 idouble: 1
1102-ifloat: 1
1103 Test "cos (M_PI_6l * 4.0) == -0.5":
1104 double: 2
1105 float: 1
1106 idouble: 2
1107 ifloat: 1
1108+
1109+# cos_downward
1110+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
1111+double: 1
1112+idouble: 1
1113+ildouble: 1
1114+ldouble: 1
1115+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
1116+double: 1
1117+float: 1
1118+idouble: 1
1119+ifloat: 1
1120+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
1121+double: 1
1122+idouble: 1
1123+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
1124+float: 1
1125+ifloat: 1
1126+ildouble: 1
1127+ldouble: 1
1128+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
1129+float: 1
1130+ifloat: 1
1131+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
1132+float: 1
1133+ifloat: 1
1134+ildouble: 1
1135+ldouble: 1
1136+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
1137+ildouble: 1
1138+ldouble: 1
1139+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
1140+double: 1
1141+float: 1
1142+idouble: 1
1143+ifloat: 1
1144+ildouble: 1
1145+ldouble: 1
1146+
1147+# cos_tonearest
1148+Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093":
1149+ildouble: 1
1150+ldouble: 1
1151+Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463":
1152+ildouble: 1
1153+ldouble: 1
1154+
1155+# cos_towardzero
1156+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
1157+double: 1
1158+idouble: 1
1159+ildouble: 1
1160+ldouble: 1
1161+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
1162 ildouble: 1
1163 ldouble: 1
1164-Test "cos (pi/2) == 0":
1165+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
1166 double: 1
1167 float: 1
1168 idouble: 1
1169 ifloat: 1
1170 ildouble: 1
1171 ldouble: 1
1172+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
1173+float: 1
1174+ifloat: 1
1175+ildouble: 1
1176+ldouble: 1
1177+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
1178+double: 1
1179+idouble: 1
1180+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
1181+float: 1
1182+ifloat: 1
1183+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
1184+float: 1
1185+ifloat: 1
1186+ildouble: 1
1187+ldouble: 1
1188+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
1189+double: 1
1190+float: 1
1191+idouble: 1
1192+ifloat: 1
1193
1194-# cosh
1195-Test "cosh (0.75) == 1.29468328467684468784170818539018176":
1196+# cos_upward
1197+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323":
1198+float: 1
1199+ifloat: 1
1200+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
1201+ildouble: 1
1202+ldouble: 1
1203+Test "cos_upward (2) == -0.4161468365471423869975682295007621897660":
1204+double: 1
1205+float: 1
1206+idouble: 1
1207+ifloat: 1
1208+ildouble: 1
1209+ldouble: 1
1210+Test "cos_upward (3) == -0.9899924966004454572715727947312613023937":
1211+float: 1
1212+ifloat: 1
1213+ildouble: 1
1214+ldouble: 1
1215+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
1216+double: 1
1217+idouble: 1
1218+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
1219+double: 1
1220+idouble: 1
1221+ildouble: 1
1222+ldouble: 1
1223+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
1224+double: 1
1225+float: 1
1226+idouble: 1
1227+ifloat: 1
1228 ildouble: 1
1229+ldouble: 1
1230+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
1231+double: 1
1232+idouble: 1
1233+Test "cos_upward (8) == -0.1455000338086135258688413818311946826093":
1234+double: 1
1235+float: 1
1236+idouble: 1
1237+ifloat: 1
1238+
1239+# cosh_downward
1240+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
1241+double: 1
1242+float: 1
1243+ldouble: 2
1244+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
1245+double: 1
1246+float: 1
1247+ldouble: 1
1248+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
1249+float: 1
1250+ldouble: 1
1251+
1252+# cosh_tonearest
1253+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
1254+ldouble: 1
1255+
1256+# cosh_towardzero
1257+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
1258+double: 1
1259+float: 1
1260+ldouble: 2
1261+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
1262+double: 1
1263+float: 1
1264+ldouble: 1
1265+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
1266+float: 1
1267+ldouble: 1
1268+
1269+# cosh_upward
1270+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
1271+ldouble: 1
1272+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
1273+double: 1
1274
1275 # cpow
1276 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
1277@@ -353,12 +475,8 @@ double: 1
1278 float: 1
1279 idouble: 1
1280 ifloat: 1
1281-ildouble: 2
1282-ldouble: 2
1283 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
1284-double: 1
1285 float: 1
1286-idouble: 1
1287 ifloat: 1
1288 ildouble: 1
1289 ldouble: 1
1290@@ -370,40 +488,36 @@ ifloat: 1
1291 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
1292 double: 1
1293 idouble: 1
1294-ildouble: 439
1295-ldouble: 439
1296+ildouble: 1
1297+ldouble: 1
1298 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
1299 float: 1
1300 ifloat: 1
1301-ildouble: 2
1302-ldouble: 2
1303+ildouble: 1
1304+ldouble: 1
1305 Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
1306 ildouble: 1
1307 ldouble: 1
1308 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
1309-double: 1
1310 float: 1
1311-idouble: 1
1312 ifloat: 1
1313 ildouble: 3
1314 ldouble: 3
1315
1316 # ctanh
1317 Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
1318-ildouble: 5
1319-ldouble: 5
1320+ildouble: 3
1321+ldouble: 3
1322 Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
1323 float: 1
1324 ifloat: 1
1325-ildouble: 25
1326-ldouble: 25
1327+ildouble: 1
1328+ldouble: 1
1329 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
1330 float: 1
1331 ifloat: 1
1332 Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
1333-double: 1
1334 float: 1
1335-idouble: 1
1336 ifloat: 1
1337 Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
1338 double: 1
1339@@ -419,9 +533,6 @@ double: 1
1340 idouble: 1
1341
1342 # erfc
1343-Test "erfc (0.75) == 0.288844366346484868401062165408589223":
1344-float: 1
1345-ifloat: 1
1346 Test "erfc (1.25) == 0.0770998717435417698634765188027188596":
1347 ildouble: 1
1348 ldouble: 1
1349@@ -434,14 +545,6 @@ idouble: 1
1350 ildouble: 1
1351 ldouble: 1
1352
1353-# exp
1354-Test "exp (0.75) == 2.11700001661267466854536981983709561":
1355-ildouble: 1
1356-Test "exp (1000.0) == 0.197007111401704699388887935224332313e435":
1357-ildouble: 754
1358-Test "exp (50.0) == 5184705528587072464087.45332293348538":
1359-ildouble: 16
1360-
1361 # exp10
1362 Test "exp10 (-1) == 0.1":
1363 ildouble: 1
1364@@ -453,6 +556,51 @@ Test "exp10 (3) == 1000":
1365 ildouble: 8
1366 ldouble: 8
1367
1368+# exp_downward
1369+Test "exp_downward (1) == e":
1370+ildouble: 1
1371+ldouble: 1
1372+Test "exp_downward (2) == e^2":
1373+double: 1
1374+float: 1
1375+idouble: 1
1376+ifloat: 1
1377+ildouble: 2
1378+ldouble: 2
1379+Test "exp_downward (3) == e^3":
1380+double: 1
1381+float: 1
1382+idouble: 1
1383+ifloat: 1
1384+ildouble: 1
1385+ldouble: 1
1386+
1387+# exp_towardzero
1388+Test "exp_towardzero (1) == e":
1389+ildouble: 1
1390+ldouble: 1
1391+Test "exp_towardzero (2) == e^2":
1392+double: 1
1393+float: 1
1394+idouble: 1
1395+ifloat: 1
1396+ildouble: 2
1397+ldouble: 2
1398+Test "exp_towardzero (3) == e^3":
1399+double: 1
1400+float: 1
1401+idouble: 1
1402+ifloat: 1
1403+ildouble: 1
1404+ldouble: 1
1405+
1406+# exp_upward
1407+Test "exp_upward (1) == e":
1408+double: 1
1409+float: 1
1410+idouble: 1
1411+ifloat: 1
1412+
1413 # expm1
1414 Test "expm1 (1) == M_El - 1.0":
1415 ildouble: 1
1416@@ -485,26 +633,24 @@ float: 1
1417 # j0
1418 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
1419 double: 1
1420-float: 2
1421+float: 1
1422 idouble: 1
1423-ifloat: 2
1424+ifloat: 1
1425 ildouble: 1
1426 ldouble: 1
1427 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
1428-double: 3
1429+double: 1
1430 float: 1
1431-idouble: 3
1432+idouble: 1
1433 ifloat: 1
1434 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
1435-double: 1
1436 float: 1
1437-idouble: 1
1438 ifloat: 1
1439 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
1440 double: 1
1441-float: 2
1442+float: 1
1443 idouble: 1
1444-ifloat: 2
1445+ifloat: 1
1446 ildouble: 1
1447 ldouble: 1
1448 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
1449@@ -512,13 +658,8 @@ float: 1
1450 ifloat: 1
1451
1452 # j1
1453-Test "j1 (0.75) == 0.349243602174862192523281016426251335":
1454-double: 1
1455-idouble: 1
1456 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
1457-double: 1
1458 float: 1
1459-idouble: 1
1460 ifloat: 1
1461 ildouble: 1
1462 ldouble: 1
1463@@ -526,9 +667,7 @@ Test "j1 (2.0) == 0.57672480775687338720
1464 double: 1
1465 idouble: 1
1466 Test "j1 (8.0) == 0.234636346853914624381276651590454612":
1467-double: 1
1468 float: 1
1469-idouble: 1
1470 ifloat: 1
1471 ildouble: 1
1472 ldouble: 1
1473@@ -536,38 +675,31 @@ ldouble: 1
1474 # jn
1475 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
1476 double: 1
1477-float: 2
1478+float: 1
1479 idouble: 1
1480-ifloat: 2
1481+ifloat: 1
1482 ildouble: 1
1483 ldouble: 1
1484 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
1485-double: 3
1486+double: 1
1487 float: 1
1488-idouble: 3
1489+idouble: 1
1490 ifloat: 1
1491 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
1492-double: 1
1493 float: 1
1494-idouble: 1
1495 ifloat: 1
1496 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
1497 double: 1
1498-float: 2
1499+float: 1
1500 idouble: 1
1501-ifloat: 2
1502+ifloat: 1
1503 ildouble: 1
1504 ldouble: 1
1505 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
1506 float: 1
1507 ifloat: 1
1508-Test "jn (1, 0.75) == 0.349243602174862192523281016426251335":
1509-double: 1
1510-idouble: 1
1511 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
1512-double: 1
1513 float: 1
1514-idouble: 1
1515 ifloat: 1
1516 ildouble: 1
1517 ldouble: 1
1518@@ -575,9 +707,7 @@ Test "jn (1, 2.0) == 0.57672480775687338
1519 double: 1
1520 idouble: 1
1521 Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
1522-double: 1
1523 float: 1
1524-idouble: 1
1525 ifloat: 1
1526 ildouble: 1
1527 ldouble: 1
1528@@ -589,9 +719,7 @@ ifloat: 1
1529 ildouble: 1
1530 ldouble: 1
1531 Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
1532-double: 1
1533 float: 1
1534-idouble: 1
1535 ifloat: 1
1536 Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
1537 float: 1
1538@@ -606,38 +734,32 @@ ifloat: 1
1539 ildouble: 1
1540 ldouble: 1
1541 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
1542-double: 5
1543-float: 2
1544-idouble: 5
1545-ifloat: 2
1546+double: 1
1547+float: 1
1548+idouble: 1
1549+ifloat: 1
1550 ildouble: 2
1551 ldouble: 2
1552 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
1553-double: 2
1554-idouble: 2
1555 ildouble: 1
1556 ldouble: 1
1557 Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083":
1558 ildouble: 1
1559 ldouble: 1
1560 Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
1561-double: 1
1562 float: 1
1563-idouble: 1
1564 ifloat: 1
1565 Test "jn (3, 1.0) == 0.0195633539826684059189053216217515083":
1566 ildouble: 1
1567 ldouble: 1
1568 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
1569-double: 5
1570-float: 2
1571-idouble: 5
1572-ifloat: 2
1573+double: 1
1574+float: 1
1575+idouble: 1
1576+ifloat: 1
1577 ildouble: 1
1578 ldouble: 1
1579 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
1580-double: 1
1581-idouble: 1
1582 ildouble: 1
1583 ldouble: 1
1584
1585@@ -648,9 +770,7 @@ idouble: 1
1586 ildouble: 1
1587 ldouble: 1
1588 Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
1589-double: 1
1590 float: 1
1591-idouble: 1
1592 ifloat: 1
1593 Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
1594 double: 1
1595@@ -660,11 +780,6 @@ ifloat: 2
1596 ildouble: 1
1597 ldouble: 1
1598
1599-# log
1600-Test "log (e) == 1":
1601-float: 1
1602-ifloat: 1
1603-
1604 # log10
1605 Test "log10 (0.75) == -0.124938736608299953132449886193870744":
1606 ildouble: 1
1607@@ -675,20 +790,179 @@ ifloat: 1
1608 ildouble: 1
1609 ldouble: 1
1610
1611-# sincos
1612-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
1613+# pow_downward
1614+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
1615 double: 1
1616+idouble: 1
1617+ildouble: 1
1618+ldouble: 1
1619+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
1620 float: 1
1621+ifloat: 1
1622+ildouble: 1
1623+ldouble: 1
1624+
1625+# pow_towardzero
1626+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
1627+double: 1
1628 idouble: 1
1629+ildouble: 1
1630+ldouble: 1
1631+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
1632+float: 1
1633 ifloat: 1
1634-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
1635+ildouble: 1
1636+ldouble: 1
1637+
1638+# pow_upward
1639+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
1640+float: 1
1641+ifloat: 1
1642+ildouble: 1
1643+ldouble: 1
1644+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
1645+double: 1
1646+idouble: 1
1647+ildouble: 1
1648+ldouble: 1
1649+
1650+# sin_downward
1651+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
1652+ildouble: 1
1653+ldouble: 1
1654+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
1655+double: 1
1656+idouble: 1
1657+ildouble: 1
1658+ldouble: 1
1659+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
1660+double: 1
1661+idouble: 1
1662+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
1663+ildouble: 1
1664+ldouble: 1
1665+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
1666+double: 1
1667+idouble: 1
1668+ildouble: 1
1669+ldouble: 1
1670+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
1671+double: 1
1672+idouble: 1
1673+ildouble: 1
1674+ldouble: 1
1675+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
1676 double: 1
1677 float: 1
1678 idouble: 1
1679 ifloat: 1
1680+Test "sin_downward (7) == 0.6569865987187890903969990915936351779369":
1681 ildouble: 1
1682 ldouble: 1
1683-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
1684+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
1685+double: 1
1686+idouble: 1
1687+ildouble: 1
1688+ldouble: 1
1689+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439":
1690+double: 1
1691+float: 1
1692+idouble: 1
1693+ifloat: 1
1694+ildouble: 1
1695+ldouble: 1
1696+
1697+# sin_tonearest
1698+Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836":
1699+ildouble: 1
1700+ldouble: 1
1701+Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359":
1702+ildouble: 1
1703+ldouble: 1
1704+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
1705+ildouble: 1
1706+ldouble: 1
1707+
1708+# sin_towardzero
1709+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
1710+ildouble: 1
1711+ldouble: 1
1712+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
1713+float: 1
1714+ifloat: 1
1715+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
1716+double: 1
1717+idouble: 1
1718+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
1719+ildouble: 1
1720+ldouble: 1
1721+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
1722+float: 1
1723+ifloat: 1
1724+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
1725+float: 1
1726+ifloat: 1
1727+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
1728+ildouble: 1
1729+ldouble: 1
1730+Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369":
1731+ildouble: 1
1732+ldouble: 1
1733+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
1734+double: 1
1735+idouble: 1
1736+ildouble: 1
1737+ldouble: 1
1738+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
1739+double: 1
1740+float: 1
1741+idouble: 1
1742+ifloat: 1
1743+ildouble: 1
1744+ldouble: 1
1745+
1746+# sin_upward
1747+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
1748+double: 1
1749+float: 1
1750+idouble: 1
1751+ifloat: 1
1752+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836":
1753+float: 1
1754+ifloat: 1
1755+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
1756+float: 1
1757+ifloat: 1
1758+ildouble: 1
1759+ldouble: 1
1760+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
1761+double: 1
1762+float: 1
1763+idouble: 1
1764+ifloat: 1
1765+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
1766+float: 1
1767+ifloat: 1
1768+Test "sin_upward (5) == -0.9589242746631384688931544061559939733525":
1769+float: 1
1770+ifloat: 1
1771+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
1772+ildouble: 1
1773+ldouble: 1
1774+Test "sin_upward (7) == 0.6569865987187890903969990915936351779369":
1775+double: 1
1776+float: 1
1777+idouble: 1
1778+ifloat: 1
1779+Test "sin_upward (8) == 0.9893582466233817778081235982452886721164":
1780+float: 1
1781+ifloat: 1
1782+
1783+# sincos
1784+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
1785+double: 1
1786+idouble: 1
1787+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
1788 double: 1
1789 float: 1
1790 idouble: 1
1791@@ -698,66 +972,237 @@ ldouble: 1
1792
1793 # sinh
1794 Test "sinh (0.75) == 0.822316731935829980703661634446913849":
1795-double: 1
1796 ildouble: 1
1797
1798-# tan
1799-Test "tan (pi/4) == 1":
1800+# sinh_downward
1801+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
1802 double: 1
1803+float: 1
1804+idouble: 1
1805+ifloat: 1
1806+ldouble: 4
1807+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
1808+double: 1
1809+float: 1
1810 idouble: 1
1811+ifloat: 1
1812+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
1813+float: 1
1814+ifloat: 1
1815+ldouble: 5
1816
1817-# tgamma
1818-Test "tgamma (-0.5) == -2 sqrt (pi)":
1819-double: 2
1820+# sinh_tonearest
1821+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
1822+ldouble: 3
1823+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
1824+ldouble: 1
1825+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
1826+ldouble: 6
1827+
1828+# sinh_towardzero
1829+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
1830+double: 1
1831+float: 1
1832+idouble: 1
1833+ifloat: 1
1834+ldouble: 4
1835+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
1836+double: 1
1837+float: 1
1838+idouble: 1
1839+ifloat: 1
1840+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
1841+float: 1
1842+ifloat: 1
1843+ldouble: 5
1844+
1845+# sinh_upward
1846+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
1847+ldouble: 16
1848+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
1849+ldouble: 27
1850+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
1851+double: 1
1852+idouble: 1
1853+ldouble: 7
1854+
1855+# tan_downward
1856+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
1857+double: 1
1858+float: 1
1859+idouble: 1
1860+ifloat: 1
1861+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
1862+float: 1
1863+ifloat: 1
1864+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
1865+double: 1
1866+float: 1
1867+idouble: 1
1868+ifloat: 1
1869+Test "tan_downward (3) == -0.1425465430742778052956354105339134932261":
1870+double: 1
1871+idouble: 1
1872+Test "tan_downward (4) == 1.1578212823495775831373424182673239231198":
1873 float: 1
1874-idouble: 2
1875 ifloat: 1
1876 ildouble: 1
1877 ldouble: 1
1878-Test "tgamma (0.5) == sqrt (pi)":
1879+Test "tan_downward (5) == -3.3805150062465856369827058794473439087096":
1880+ildouble: 1
1881+ldouble: 1
1882+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
1883+double: 1
1884 float: 1
1885+idouble: 1
1886 ifloat: 1
1887-Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
1888+Test "tan_downward (7) == 0.8714479827243187364564508896003135663222":
1889+double: 1
1890+idouble: 1
1891+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
1892+float: 1
1893+ifloat: 1
1894+ildouble: 1
1895+ldouble: 1
1896+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
1897+float: 1
1898+ifloat: 1
1899+
1900+# tan_tonearest
1901+Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312":
1902+ildouble: 1
1903+ldouble: 1
1904+Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814":
1905+ildouble: 1
1906+ldouble: 1
1907+Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087":
1908+ildouble: 1
1909+ldouble: 1
1910+
1911+# tan_towardzero
1912+Test "tan_towardzero (1) == 1.5574077246549022305069748074583601730873":
1913 double: 1
1914 float: 1
1915 idouble: 1
1916 ifloat: 1
1917-Test "tgamma (4) == 6":
1918+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
1919+float: 1
1920+ifloat: 1
1921+Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320":
1922+ildouble: 1
1923+ldouble: 1
1924+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
1925+float: 1
1926+ifloat: 1
1927+ildouble: 1
1928+ldouble: 1
1929+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
1930+float: 1
1931+ifloat: 1
1932+ildouble: 1
1933+ldouble: 1
1934+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
1935+double: 1
1936+float: 1
1937+idouble: 1
1938+ifloat: 1
1939+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
1940+ildouble: 1
1941+ldouble: 1
1942+Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222":
1943+double: 1
1944+idouble: 1
1945+Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814":
1946+double: 1
1947+idouble: 1
1948+ildouble: 2
1949+ldouble: 2
1950+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
1951+double: 1
1952+idouble: 1
1953 ildouble: 1
1954 ldouble: 1
1955
1956-# y0
1957-Test "y0 (0.125) == -1.38968062514384052915582277745018693":
1958+# tan_upward
1959+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
1960 ildouble: 1
1961 ldouble: 1
1962-Test "y0 (0.75) == -0.137172769385772397522814379396581855":
1963+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
1964+double: 1
1965+idouble: 1
1966+ildouble: 1
1967+ldouble: 1
1968+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
1969+ildouble: 1
1970+ldouble: 1
1971+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
1972+float: 1
1973+ifloat: 1
1974+ildouble: 1
1975+ldouble: 1
1976+Test "tan_upward (4) == 1.1578212823495775831373424182673239231198":
1977+double: 1
1978+idouble: 1
1979+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
1980 double: 1
1981 float: 1
1982 idouble: 1
1983 ifloat: 1
1984-Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
1985+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
1986+ildouble: 1
1987+ldouble: 1
1988+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
1989+float: 1
1990+ifloat: 1
1991+ildouble: 1
1992+ldouble: 1
1993+Test "tan_upward (8) == -6.7997114552203786999252627596086333648814":
1994+double: 1
1995+idouble: 1
1996+ildouble: 2
1997+ldouble: 2
1998+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
1999+double: 1
2000+idouble: 1
2001+ildouble: 1
2002+ldouble: 1
2003+
2004+# tgamma
2005+Test "tgamma (-0.5) == -2 sqrt (pi)":
2006 double: 2
2007 float: 1
2008 idouble: 2
2009 ifloat: 1
2010 ildouble: 1
2011 ldouble: 1
2012-Test "y0 (1.5) == 0.382448923797758843955068554978089862":
2013+Test "tgamma (0.5) == sqrt (pi)":
2014+float: 1
2015+ifloat: 1
2016+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
2017 double: 1
2018 float: 1
2019 idouble: 1
2020 ifloat: 1
2021-Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
2022+
2023+# y0
2024+Test "y0 (0.125) == -1.38968062514384052915582277745018693":
2025+ildouble: 1
2026+ldouble: 1
2027+Test "y0 (0.75) == -0.137172769385772397522814379396581855":
2028 double: 1
2029 float: 1
2030 idouble: 1
2031 ifloat: 1
2032+Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
2033+ildouble: 1
2034+ldouble: 1
2035+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
2036+float: 1
2037+ifloat: 1
2038 ildouble: 1
2039 ldouble: 1
2040 Test "y0 (8.0) == 0.223521489387566220527323400498620359":
2041-double: 1
2042 float: 1
2043-idouble: 1
2044 ifloat: 1
2045 ildouble: 1
2046 ldouble: 1
2047@@ -766,9 +1211,6 @@ ldouble: 1
2048 Test "y1 (0.125) == -5.19993611253477499595928744876579921":
2049 ildouble: 1
2050 ldouble: 1
2051-Test "y1 (1.0) == -0.781212821300288716547150000047964821":
2052-double: 1
2053-idouble: 1
2054 Test "y1 (10.0) == 0.249015424206953883923283474663222803":
2055 double: 2
2056 float: 2
2057@@ -782,9 +1224,7 @@ ifloat: 2
2058 ildouble: 1
2059 ldouble: 1
2060 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
2061-double: 1
2062 float: 2
2063-idouble: 1
2064 ifloat: 2
2065 ildouble: 1
2066 ldouble: 1
2067@@ -799,37 +1239,21 @@ float: 1
2068 idouble: 1
2069 ifloat: 1
2070 Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
2071-double: 2
2072-float: 1
2073-idouble: 2
2074-ifloat: 1
2075 ildouble: 1
2076 ldouble: 1
2077-Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
2078-double: 1
2079-float: 1
2080-idouble: 1
2081-ifloat: 1
2082 Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
2083-double: 1
2084 float: 1
2085-idouble: 1
2086 ifloat: 1
2087 ildouble: 1
2088 ldouble: 1
2089 Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
2090-double: 1
2091 float: 1
2092-idouble: 1
2093 ifloat: 1
2094 ildouble: 1
2095 ldouble: 1
2096 Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
2097 ildouble: 1
2098 ldouble: 1
2099-Test "yn (1, 1.0) == -0.781212821300288716547150000047964821":
2100-double: 1
2101-idouble: 1
2102 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
2103 double: 2
2104 float: 2
2105@@ -843,17 +1267,13 @@ ifloat: 2
2106 ildouble: 1
2107 ldouble: 1
2108 Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
2109-double: 1
2110 float: 2
2111-idouble: 1
2112 ifloat: 2
2113 ildouble: 1
2114 ldouble: 1
2115 Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
2116 double: 1
2117-float: 1
2118 idouble: 1
2119-ifloat: 1
2120 ildouble: 2
2121 ldouble: 2
2122 Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
2123@@ -862,28 +1282,22 @@ ifloat: 1
2124 ildouble: 4
2125 ldouble: 4
2126 Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
2127-double: 1
2128 float: 2
2129-idouble: 1
2130 ifloat: 2
2131 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
2132 double: 1
2133-float: 3
2134+float: 1
2135 idouble: 1
2136-ifloat: 3
2137+ifloat: 1
2138 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
2139-double: 2
2140 float: 3
2141-idouble: 2
2142 ifloat: 3
2143 Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
2144 ildouble: 1
2145 ldouble: 1
2146 Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
2147 double: 1
2148-float: 1
2149 idouble: 1
2150-ifloat: 1
2151 ildouble: 2
2152 ldouble: 2
2153 Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
2154@@ -892,15 +1306,13 @@ float: 1
2155 idouble: 1
2156 ifloat: 1
2157 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
2158-double: 1
2159 float: 1
2160-idouble: 1
2161 ifloat: 1
2162
2163 # Maximal error of functions:
2164 Function: "acos":
2165-ildouble: 622
2166-ldouble: 622
2167+ildouble: 1
2168+ldouble: 1
2169
2170 Function: "asin":
2171 ildouble: 1
2172@@ -917,18 +1329,6 @@ ildouble: 2
2173 ldouble: 2
2174
2175 Function: Real part of "cacosh":
2176-double: 1
2177-float: 9
2178-idouble: 1
2179-ifloat: 9
2180-ildouble: 6
2181-ldouble: 6
2182-
2183-Function: Imaginary part of "cacosh":
2184-double: 1
2185-float: 4
2186-idouble: 1
2187-ifloat: 4
2188 ildouble: 1
2189 ldouble: 1
2190
2191@@ -1033,8 +1433,6 @@ double: 1
2192 float: 1
2193 idouble: 1
2194 ifloat: 1
2195-ildouble: 1
2196-ldouble: 1
2197
2198 Function: "cos":
2199 double: 2
2200@@ -1044,16 +1442,58 @@ ifloat: 1
2201 ildouble: 1
2202 ldouble: 1
2203
2204-Function: "cosh":
2205+Function: "cos_downward":
2206+double: 1
2207+float: 1
2208+idouble: 1
2209+ifloat: 1
2210+ildouble: 1
2211+ldouble: 1
2212+
2213+Function: "cos_tonearest":
2214 ildouble: 1
2215+ldouble: 1
2216+
2217+Function: "cos_towardzero":
2218+double: 1
2219+float: 1
2220+idouble: 1
2221+ifloat: 1
2222+ildouble: 1
2223+ldouble: 1
2224+
2225+Function: "cos_upward":
2226+double: 1
2227+float: 1
2228+idouble: 1
2229+ifloat: 1
2230+ildouble: 1
2231+ldouble: 1
2232+
2233+Function: "cosh_downward":
2234+double: 1
2235+float: 1
2236+ldouble: 2
2237+
2238+Function: "cosh_tonearest":
2239+ldouble: 1
2240+
2241+Function: "cosh_towardzero":
2242+double: 1
2243+float: 1
2244+ldouble: 2
2245+
2246+Function: "cosh_upward":
2247+double: 1
2248+ldouble: 1
2249
2250 Function: Real part of "cpow":
2251 double: 1
2252 float: 4
2253 idouble: 1
2254 ifloat: 4
2255-ildouble: 763
2256-ldouble: 763
2257+ildouble: 6
2258+ldouble: 6
2259
2260 Function: Imaginary part of "cpow":
2261 double: 2
2262@@ -1086,38 +1526,32 @@ double: 1
2263 float: 1
2264 idouble: 1
2265 ifloat: 1
2266-ildouble: 2
2267-ldouble: 2
2268
2269 Function: Real part of "ctan":
2270 double: 1
2271 idouble: 1
2272-ildouble: 439
2273-ldouble: 439
2274+ildouble: 1
2275+ldouble: 1
2276
2277 Function: Imaginary part of "ctan":
2278-double: 1
2279 float: 1
2280-idouble: 1
2281 ifloat: 1
2282 ildouble: 3
2283 ldouble: 3
2284
2285 Function: Real part of "ctanh":
2286-double: 1
2287 float: 1
2288-idouble: 1
2289 ifloat: 1
2290-ildouble: 5
2291-ldouble: 5
2292+ildouble: 3
2293+ldouble: 3
2294
2295 Function: Imaginary part of "ctanh":
2296 double: 1
2297 float: 1
2298 idouble: 1
2299 ifloat: 1
2300-ildouble: 25
2301-ldouble: 25
2302+ildouble: 1
2303+ldouble: 1
2304
2305 Function: "erf":
2306 double: 1
2307@@ -1125,19 +1559,36 @@ idouble: 1
2308
2309 Function: "erfc":
2310 double: 1
2311-float: 1
2312 idouble: 1
2313-ifloat: 1
2314 ildouble: 1
2315 ldouble: 1
2316
2317-Function: "exp":
2318-ildouble: 754
2319-
2320 Function: "exp10":
2321 ildouble: 8
2322 ldouble: 8
2323
2324+Function: "exp_downward":
2325+double: 1
2326+float: 1
2327+idouble: 1
2328+ifloat: 1
2329+ildouble: 2
2330+ldouble: 2
2331+
2332+Function: "exp_towardzero":
2333+double: 1
2334+float: 1
2335+idouble: 1
2336+ifloat: 1
2337+ildouble: 2
2338+ldouble: 2
2339+
2340+Function: "exp_upward":
2341+double: 1
2342+float: 1
2343+idouble: 1
2344+ifloat: 1
2345+
2346 Function: "expm1":
2347 ildouble: 1
2348
2349@@ -1151,10 +1602,10 @@ Function: "hypot":
2350 float: 1
2351
2352 Function: "j0":
2353-double: 3
2354-float: 2
2355-idouble: 3
2356-ifloat: 2
2357+double: 1
2358+float: 1
2359+idouble: 1
2360+ifloat: 1
2361 ildouble: 1
2362 ldouble: 1
2363
2364@@ -1167,10 +1618,10 @@ ildouble: 1
2365 ldouble: 1
2366
2367 Function: "jn":
2368-double: 5
2369-float: 2
2370-idouble: 5
2371-ifloat: 2
2372+double: 1
2373+float: 1
2374+idouble: 1
2375+ifloat: 1
2376 ildouble: 2
2377 ldouble: 2
2378
2379@@ -1192,6 +1643,58 @@ ifloat: 1
2380 ildouble: 1
2381 ldouble: 1
2382
2383+Function: "pow_downward":
2384+double: 1
2385+float: 1
2386+idouble: 1
2387+ifloat: 1
2388+ildouble: 1
2389+ldouble: 1
2390+
2391+Function: "pow_towardzero":
2392+double: 1
2393+float: 1
2394+idouble: 1
2395+ifloat: 1
2396+ildouble: 1
2397+ldouble: 1
2398+
2399+Function: "pow_upward":
2400+double: 1
2401+float: 1
2402+idouble: 1
2403+ifloat: 1
2404+ildouble: 1
2405+ldouble: 1
2406+
2407+Function: "sin_downward":
2408+double: 1
2409+float: 1
2410+idouble: 1
2411+ifloat: 1
2412+ildouble: 1
2413+ldouble: 1
2414+
2415+Function: "sin_tonearest":
2416+ildouble: 1
2417+ldouble: 1
2418+
2419+Function: "sin_towardzero":
2420+double: 1
2421+float: 1
2422+idouble: 1
2423+ifloat: 1
2424+ildouble: 1
2425+ldouble: 1
2426+
2427+Function: "sin_upward":
2428+double: 1
2429+float: 1
2430+idouble: 1
2431+ifloat: 1
2432+ildouble: 1
2433+ldouble: 1
2434+
2435 Function: "sincos":
2436 double: 1
2437 float: 1
2438@@ -1201,13 +1704,62 @@ ildouble: 1
2439 ldouble: 1
2440
2441 Function: "sinh":
2442-double: 1
2443 ildouble: 1
2444
2445+Function: "sinh_downward":
2446+double: 1
2447+float: 1
2448+idouble: 1
2449+ifloat: 1
2450+ldouble: 5
2451+
2452+Function: "sinh_tonearest":
2453+ldouble: 6
2454+
2455+Function: "sinh_towardzero":
2456+double: 1
2457+float: 1
2458+idouble: 1
2459+ifloat: 1
2460+ldouble: 5
2461+
2462+Function: "sinh_upward":
2463+double: 1
2464+idouble: 1
2465+ldouble: 27
2466+
2467 Function: "tan":
2468 double: 1
2469 idouble: 1
2470
2471+Function: "tan_downward":
2472+double: 1
2473+float: 1
2474+idouble: 1
2475+ifloat: 1
2476+ildouble: 1
2477+ldouble: 1
2478+
2479+Function: "tan_tonearest":
2480+ildouble: 1
2481+ldouble: 1
2482+
2483+Function: "tan_towardzero":
2484+double: 1
2485+float: 1
2486+idouble: 1
2487+ifloat: 1
2488+ildouble: 2
2489+ldouble: 2
2490+
2491+Function: "tan_upward":
2492+double: 1
2493+float: 1
2494+idouble: 1
2495+ifloat: 1
2496+ildouble: 2
2497+ldouble: 2
2498+
2499 Function: "tgamma":
2500 double: 2
2501 float: 1
2502@@ -1217,9 +1769,9 @@ ildouble: 1
2503 ldouble: 1
2504
2505 Function: "y0":
2506-double: 2
2507+double: 1
2508 float: 1
2509-idouble: 2
2510+idouble: 1
2511 ifloat: 1
2512 ildouble: 1
2513 ldouble: 1
2514diff -Nrup a/sysdeps/ieee754/dbl-64/e_exp.c b/sysdeps/ieee754/dbl-64/e_exp.c
2515--- a/sysdeps/ieee754/dbl-64/e_exp.c 2010-05-04 05:27:23.000000000 -0600
2516+++ b/sysdeps/ieee754/dbl-64/e_exp.c 2012-08-06 09:54:00.823929687 -0600
2517@@ -1,7 +1,7 @@
2518 /*
2519 * IBM Accurate Mathematical Library
2520 * written by International Business Machines Corp.
2521- * Copyright (C) 2001 Free Software Foundation
2522+ * Copyright (C) 2001-2012 Free Software Foundation
2523 *
2524 * This program is free software; you can redistribute it and/or modify
2525 * it under the terms of the GNU Lesser General Public License as published by
2526@@ -39,6 +39,7 @@
2527 #include "MathLib.h"
2528 #include "uexp.tbl"
2529 #include "math_private.h"
2530+#include <fenv.h>
2531
2532 double __slowexp(double);
2533
2534@@ -53,6 +54,10 @@ double __ieee754_exp(double x) {
2535 int4 k;
2536 #endif
2537 int4 i,j,m,n,ex;
2538+ fenv_t env;
2539+ double retval;
2540+
2541+ libc_feholdexcept_setround (&env, FE_TONEAREST);
2542
2543 junk1.x = x;
2544 m = junk1.i[HIGH_HALF];
2545@@ -85,18 +90,19 @@ double __ieee754_exp(double x) {
2546 rem=(bet + bet*eps)+al*eps;
2547 res = al + rem;
2548 cor = (al - res) + rem;
2549- if (res == (res+cor*err_0)) return res*binexp.x;
2550- else return __slowexp(x); /*if error is over bound */
2551+ if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; }
2552+ else { retval = __slowexp(x); goto ret; } /*if error is over bound */
2553 }
2554
2555- if (n <= smallint) return 1.0;
2556+ if (n <= smallint) { retval = 1.0; goto ret; }
2557
2558 if (n >= badint) {
2559- if (n > infint) return(x+x); /* x is NaN */
2560- if (n < infint) return ( (x>0) ? (hhuge*hhuge) : (tiny*tiny) );
2561+ if (n > infint) { retval = x+x; goto ret; } /* x is NaN */
2562+ if (n < infint) { retval = (x>0) ? (hhuge*hhuge) : (tiny*tiny); goto ret; }
2563 /* x is finite, cause either overflow or underflow */
2564- if (junk1.i[LOW_HALF] != 0) return (x+x); /* x is NaN */
2565- return ((x>0)?inf.x:zero ); /* |x| = inf; return either inf or 0 */
2566+ if (junk1.i[LOW_HALF] != 0) { retval = x+x; goto ret; } /* x is NaN */
2567+ retval = (x>0)?inf.x:zero; /* |x| = inf; return either inf or 0 */
2568+ goto ret;
2569 }
2570
2571 y = x*log2e.x + three51.x;
2572@@ -121,8 +127,8 @@ double __ieee754_exp(double x) {
2573 if (res < 1.0) {res+=res; cor+=cor; ex-=1;}
2574 if (ex >=-1022) {
2575 binexp.i[HIGH_HALF] = (1023+ex)<<20;
2576- if (res == (res+cor*err_0)) return res*binexp.x;
2577- else return __slowexp(x); /*if error is over bound */
2578+ if (res == (res+cor*err_0)) { retval = res*binexp.x; goto ret; }
2579+ else { retval = __slowexp(x); goto ret; } /*if error is over bound */
2580 }
2581 ex = -(1022+ex);
2582 binexp.i[HIGH_HALF] = (1023-ex)<<20;
2583@@ -135,15 +141,19 @@ double __ieee754_exp(double x) {
2584 cor = (t-res)+y;
2585 if (res == (res + eps*cor))
2586 { binexp.i[HIGH_HALF] = 0x00100000;
2587- return (res-1.0)*binexp.x;
2588+ retval = (res-1.0)*binexp.x;
2589+ goto ret;
2590 }
2591- else return __slowexp(x); /* if error is over bound */
2592+ else { retval = __slowexp(x); goto ret; } /* if error is over bound */
2593 }
2594 else {
2595 binexp.i[HIGH_HALF] =(junk1.i[LOW_HALF]+767)<<20;
2596- if (res == (res+cor*err_0)) return res*binexp.x*t256.x;
2597- else return __slowexp(x);
2598+ if (res == (res+cor*err_0)) { retval = res*binexp.x*t256.x; goto ret; }
2599+ else { retval = __slowexp(x); goto ret; }
2600 }
2601+ ret:
2602+ libc_feupdateenv (&env);
2603+ return retval;
2604 }
2605
2606 /************************************************************************/
2607diff -Nrup a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c
2608--- a/sysdeps/ieee754/dbl-64/e_exp2.c 2010-05-04 05:27:23.000000000 -0600
2609+++ b/sysdeps/ieee754/dbl-64/e_exp2.c 2012-08-06 09:54:00.824929683 -0600
2610@@ -24,9 +24,6 @@
2611 17 (1), March 1991, pp. 26-45.
2612 It has been slightly modified to compute 2^x instead of e^x.
2613 */
2614-#ifndef _GNU_SOURCE
2615-#define _GNU_SOURCE
2616-#endif
2617 #include <stdlib.h>
2618 #include <float.h>
2619 #include <ieee754.h>
2620@@ -37,13 +34,8 @@
2621
2622 #include "t_exp2.h"
2623
2624-/* XXX I know the assembler generates a warning about incorrect section
2625- attributes. But without the attribute here the compiler places the
2626- constants in the .data section. Ideally the constant is placed in
2627- .rodata.cst8 so that it can be merged, but gcc sucks, it ICEs when
2628- we try to force this section on it. --drepper */
2629-static const volatile double TWO1023 = 8.988465674311579539e+307;
2630-static const volatile double TWOM1000 = 9.3326361850321887899e-302;
2631+static const double TWO1023 = 8.988465674311579539e+307;
2632+static const double TWOM1000 = 9.3326361850321887899e-302;
2633
2634 double
2635 __ieee754_exp2 (double x)
2636@@ -60,11 +52,7 @@ __ieee754_exp2 (double x)
2637 union ieee754_double ex2_u, scale_u;
2638 fenv_t oldenv;
2639
2640- feholdexcept (&oldenv);
2641-#ifdef FE_TONEAREST
2642- /* If we don't have this, it's too bad. */
2643- fesetround (FE_TONEAREST);
2644-#endif
2645+ libc_feholdexcept_setround (&oldenv, FE_TONEAREST);
2646
2647 /* 1. Argument reduction.
2648 Choose integers ex, -256 <= t < 256, and some real
2649@@ -108,9 +96,10 @@ __ieee754_exp2 (double x)
2650 * x + .055504110254308625)
2651 * x + .240226506959100583)
2652 * x + .69314718055994495) * ex2_u.d;
2653+ math_opt_barrier (x22);
2654
2655 /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
2656- fesetenv (&oldenv);
2657+ libc_fesetenv (&oldenv);
2658
2659 result = x22 * x + ex2_u.d;
2660
2661diff -Nrup a/sysdeps/ieee754/dbl-64/e_pow.c b/sysdeps/ieee754/dbl-64/e_pow.c
2662--- a/sysdeps/ieee754/dbl-64/e_pow.c 2010-05-04 05:27:23.000000000 -0600
2663+++ b/sysdeps/ieee754/dbl-64/e_pow.c 2012-08-06 09:54:00.824929683 -0600
2664@@ -42,6 +42,7 @@
2665 #include "MathLib.h"
2666 #include "upow.tbl"
2667 #include "math_private.h"
2668+#include <fenv.h>
2669
2670
2671 double __exp1(double x, double xx, double error);
2672@@ -79,6 +80,11 @@ double __ieee754_pow(double x, double y)
2673 (u.i[HIGH_HALF]==0 && u.i[LOW_HALF]!=0)) &&
2674 /* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */
2675 (v.i[HIGH_HALF]&0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */
2676+ fenv_t env;
2677+ double retval;
2678+
2679+ libc_feholdexcept_setround (&env, FE_TONEAREST);
2680+
2681 z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */
2682 t = y*134217729.0;
2683 y1 = t - (t-y);
2684@@ -92,7 +98,10 @@ double __ieee754_pow(double x, double y)
2685 a2 = (a-a1)+aa;
2686 error = error*ABS(y);
2687 t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */
2688- return (t>0)?t:power1(x,y);
2689+ retval = (t>0)?t:power1(x,y);
2690+
2691+ libc_feupdateenv (&env);
2692+ return retval;
2693 }
2694
2695 if (x == 0) {
2696diff -Nrup a/sysdeps/ieee754/dbl-64/s_sin.c b/sysdeps/ieee754/dbl-64/s_sin.c
2697--- a/sysdeps/ieee754/dbl-64/s_sin.c 2010-05-04 05:27:23.000000000 -0600
2698+++ b/sysdeps/ieee754/dbl-64/s_sin.c 2012-08-06 09:54:00.827929671 -0600
2699@@ -55,6 +55,7 @@
2700 #include "MathLib.h"
2701 #include "sincos.tbl"
2702 #include "math_private.h"
2703+#include <fenv.h>
2704
2705 static const double
2706 sn3 = -1.66666666666664880952546298448555E-01,
2707@@ -97,12 +98,16 @@ double __sin(double x){
2708 #if 0
2709 int4 nn;
2710 #endif
2711+ fenv_t env;
2712+ double retval = 0;
2713+
2714+ libc_feholdexcept_setround (&env, FE_TONEAREST);
2715
2716 u.x = x;
2717 m = u.i[HIGH_HALF];
2718 k = 0x7fffffff&m; /* no sign */
2719 if (k < 0x3e500000) /* if x->0 =>sin(x)=x */
2720- return x;
2721+ { retval = x; goto ret; }
2722 /*---------------------------- 2^-26 < |x|< 0.25 ----------------------*/
2723 else if (k < 0x3fd00000){
2724 xx = x*x;
2725@@ -110,7 +115,8 @@ double __sin(double x){
2726 t = ((((s5.x*xx + s4.x)*xx + s3.x)*xx + s2.x)*xx + s1.x)*(xx*x);
2727 res = x+t;
2728 cor = (x-res)+t;
2729- return (res == res + 1.07*cor)? res : slow(x);
2730+ retval = (res == res + 1.07*cor)? res : slow(x);
2731+ goto ret;
2732 } /* else if (k < 0x3fd00000) */
2733 /*---------------------------- 0.25<|x|< 0.855469---------------------- */
2734 else if (k < 0x3feb6000) {
2735@@ -127,7 +133,8 @@ double __sin(double x){
2736 cor=(ssn+s*ccs-sn*c)+cs*s;
2737 res=sn+cor;
2738 cor=(sn-res)+cor;
2739- return (res==res+1.025*cor)? res : slow1(x);
2740+ retval = (res==res+1.096*cor)? res : slow1(x);
2741+ goto ret;
2742 } /* else if (k < 0x3feb6000) */
2743
2744 /*----------------------- 0.855469 <|x|<2.426265 ----------------------*/
2745@@ -153,7 +160,8 @@ double __sin(double x){
2746 cor=(ccs-s*ssn-cs*c)-sn*s;
2747 res=cs+cor;
2748 cor=(cs-res)+cor;
2749- return (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x);
2750+ retval = (res==res+1.020*cor)? ((m>0)?res:-res) : slow2(x);
2751+ goto ret;
2752 } /* else if (k < 0x400368fd) */
2753
2754 /*-------------------------- 2.426265<|x|< 105414350 ----------------------*/
2755@@ -179,7 +187,8 @@ double __sin(double x){
2756 res = a+t;
2757 cor = (a-res)+t;
2758 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2759- return (res == res + cor)? res : sloww(a,da,x);
2760+ retval = (res == res + cor)? res : sloww(a,da,x);
2761+ goto ret;
2762 }
2763 else {
2764 if (a>0)
2765@@ -200,7 +209,8 @@ double __sin(double x){
2766 res=sn+cor;
2767 cor=(sn-res)+cor;
2768 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2769- return (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x);
2770+ retval = (res==res+cor)? ((m)?res:-res) : sloww1(a,da,x);
2771+ goto ret;
2772 }
2773 break;
2774
2775@@ -222,7 +232,8 @@ double __sin(double x){
2776 res=cs+cor;
2777 cor=(cs-res)+cor;
2778 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2779- return (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n);
2780+ retval = (res==res+cor)? ((n&2)?-res:res) : sloww2(a,da,x,n);
2781+ goto ret;
2782
2783 break;
2784
2785@@ -258,7 +269,8 @@ double __sin(double x){
2786 res = a+t;
2787 cor = (a-res)+t;
2788 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2789- return (res == res + cor)? res : bsloww(a,da,x,n);
2790+ retval = (res == res + cor)? res : bsloww(a,da,x,n);
2791+ goto ret;
2792 }
2793 else {
2794 if (a>0) {m=1;t=a;db=da;}
2795@@ -277,7 +289,8 @@ double __sin(double x){
2796 res=sn+cor;
2797 cor=(sn-res)+cor;
2798 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2799- return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2800+ retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2801+ goto ret;
2802 }
2803 break;
2804
2805@@ -299,7 +312,8 @@ double __sin(double x){
2806 res=cs+cor;
2807 cor=(cs-res)+cor;
2808 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2809- return (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n);
2810+ retval = (res==res+cor)? ((n&2)?-res:res) : bsloww2(a,da,x,n);
2811+ goto ret;
2812
2813 break;
2814
2815@@ -313,17 +327,20 @@ double __sin(double x){
2816 n = __branred(x,&a,&da);
2817 switch (n) {
2818 case 0:
2819- if (a*a < 0.01588) return bsloww(a,da,x,n);
2820- else return bsloww1(a,da,x,n);
2821+ if (a*a < 0.01588) retval = bsloww(a,da,x,n);
2822+ else retval = bsloww1(a,da,x,n);
2823+ goto ret;
2824 break;
2825 case 2:
2826- if (a*a < 0.01588) return bsloww(-a,-da,x,n);
2827- else return bsloww1(-a,-da,x,n);
2828+ if (a*a < 0.01588) retval = bsloww(-a,-da,x,n);
2829+ else retval = bsloww1(-a,-da,x,n);
2830+ goto ret;
2831 break;
2832
2833 case 1:
2834 case 3:
2835- return bsloww2(a,da,x,n);
2836+ retval = bsloww2(a,da,x,n);
2837+ goto ret;
2838 break;
2839 }
2840
2841@@ -333,9 +350,13 @@ double __sin(double x){
2842 else {
2843 if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
2844 __set_errno (EDOM);
2845- return x / x;
2846+ retval = x / x;
2847+ goto ret;
2848 }
2849- return 0; /* unreachable */
2850+
2851+ ret:
2852+ libc_feupdateenv (&env);
2853+ return retval;
2854 }
2855
2856
2857@@ -350,11 +371,16 @@ double __cos(double x)
2858 mynumber u,v;
2859 int4 k,m,n;
2860
2861+ fenv_t env;
2862+ double retval = 0;
2863+
2864+ libc_feholdexcept_setround (&env, FE_TONEAREST);
2865+
2866 u.x = x;
2867 m = u.i[HIGH_HALF];
2868 k = 0x7fffffff&m;
2869
2870- if (k < 0x3e400000 ) return 1.0; /* |x|<2^-27 => cos(x)=1 */
2871+ if (k < 0x3e400000 ) { retval = 1.0; goto ret; } /* |x|<2^-27 => cos(x)=1 */
2872
2873 else if (k < 0x3feb6000 ) {/* 2^-27 < |x| < 0.855469 */
2874 y=ABS(x);
2875@@ -371,7 +397,8 @@ double __cos(double x)
2876 cor=(ccs-s*ssn-cs*c)-sn*s;
2877 res=cs+cor;
2878 cor=(cs-res)+cor;
2879- return (res==res+1.020*cor)? res : cslow2(x);
2880+ retval = (res==res+1.020*cor)? res : cslow2(x);
2881+ goto ret;
2882
2883 } /* else if (k < 0x3feb6000) */
2884
2885@@ -385,7 +412,8 @@ double __cos(double x)
2886 res = a+t;
2887 cor = (a-res)+t;
2888 cor = (cor>0)? 1.02*cor+1.0e-31 : 1.02*cor -1.0e-31;
2889- return (res == res + cor)? res : csloww(a,da,x);
2890+ retval = (res == res + cor)? res : csloww(a,da,x);
2891+ goto ret;
2892 }
2893 else {
2894 if (a>0) {m=1;t=a;db=da;}
2895@@ -404,7 +432,8 @@ double __cos(double x)
2896 res=sn+cor;
2897 cor=(sn-res)+cor;
2898 cor = (cor>0)? 1.035*cor+1.0e-31 : 1.035*cor-1.0e-31;
2899- return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2900+ retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2901+ goto ret;
2902 }
2903
2904 } /* else if (k < 0x400368fd) */
2905@@ -431,7 +460,8 @@ double __cos(double x)
2906 res = a+t;
2907 cor = (a-res)+t;
2908 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2909- return (res == res + cor)? res : csloww(a,da,x);
2910+ retval = (res == res + cor)? res : csloww(a,da,x);
2911+ goto ret;
2912 }
2913 else {
2914 if (a>0) {m=1;t=a;db=da;}
2915@@ -450,7 +480,8 @@ double __cos(double x)
2916 res=sn+cor;
2917 cor=(sn-res)+cor;
2918 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2919- return (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2920+ retval = (res==res+cor)? ((m)?res:-res) : csloww1(a,da,x);
2921+ goto ret;
2922 }
2923 break;
2924
2925@@ -471,7 +502,8 @@ double __cos(double x)
2926 res=cs+cor;
2927 cor=(cs-res)+cor;
2928 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2929- return (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n);
2930+ retval = (res==res+cor)? ((n)?-res:res) : csloww2(a,da,x,n);
2931+ goto ret;
2932
2933 break;
2934
2935@@ -506,7 +538,8 @@ double __cos(double x)
2936 res = a+t;
2937 cor = (a-res)+t;
2938 cor = (cor>0)? 1.02*cor+eps : 1.02*cor -eps;
2939- return (res == res + cor)? res : bsloww(a,da,x,n);
2940+ retval = (res == res + cor)? res : bsloww(a,da,x,n);
2941+ goto ret;
2942 }
2943 else {
2944 if (a>0) {m=1;t=a;db=da;}
2945@@ -525,7 +558,8 @@ double __cos(double x)
2946 res=sn+cor;
2947 cor=(sn-res)+cor;
2948 cor = (cor>0)? 1.035*cor+eps : 1.035*cor-eps;
2949- return (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2950+ retval = (res==res+cor)? ((m)?res:-res) : bsloww1(a,da,x,n);
2951+ goto ret;
2952 }
2953 break;
2954
2955@@ -546,7 +580,8 @@ double __cos(double x)
2956 res=cs+cor;
2957 cor=(cs-res)+cor;
2958 cor = (cor>0)? 1.025*cor+eps : 1.025*cor-eps;
2959- return (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n);
2960+ retval = (res==res+cor)? ((n)?-res:res) : bsloww2(a,da,x,n);
2961+ goto ret;
2962 break;
2963
2964 }
2965@@ -558,17 +593,20 @@ double __cos(double x)
2966 n = __branred(x,&a,&da);
2967 switch (n) {
2968 case 1:
2969- if (a*a < 0.01588) return bsloww(-a,-da,x,n);
2970- else return bsloww1(-a,-da,x,n);
2971+ if (a*a < 0.01588) retval = bsloww(-a,-da,x,n);
2972+ else retval = bsloww1(-a,-da,x,n);
2973+ goto ret;
2974 break;
2975 case 3:
2976- if (a*a < 0.01588) return bsloww(a,da,x,n);
2977- else return bsloww1(a,da,x,n);
2978+ if (a*a < 0.01588) retval = bsloww(a,da,x,n);
2979+ else retval = bsloww1(a,da,x,n);
2980+ goto ret;
2981 break;
2982
2983 case 0:
2984 case 2:
2985- return bsloww2(a,da,x,n);
2986+ retval = bsloww2(a,da,x,n);
2987+ goto ret;
2988 break;
2989 }
2990
2991@@ -580,10 +618,13 @@ double __cos(double x)
2992 else {
2993 if (k == 0x7ff00000 && u.i[LOW_HALF] == 0)
2994 __set_errno (EDOM);
2995- return x / x; /* |x| > 2^1024 */
2996+ retval = x / x; /* |x| > 2^1024 */
2997+ goto ret;
2998 }
2999- return 0;
3000
3001+ ret:
3002+ libc_feupdateenv (&env);
3003+ return retval;
3004 }
3005
3006 /************************************************************************/
3007diff -Nrup a/sysdeps/ieee754/dbl-64/s_tan.c b/sysdeps/ieee754/dbl-64/s_tan.c
3008--- a/sysdeps/ieee754/dbl-64/s_tan.c 2010-05-04 05:27:23.000000000 -0600
3009+++ b/sysdeps/ieee754/dbl-64/s_tan.c 2012-08-06 09:54:00.828929666 -0600
3010@@ -40,6 +40,8 @@
3011 #include "mpa.h"
3012 #include "MathLib.h"
3013 #include "math.h"
3014+#include "math_private.h"
3015+#include <fenv.h>
3016
3017 static double tanMp(double);
3018 void __mptan(double, mp_no *, int);
3019@@ -58,21 +60,27 @@ double tan(double x) {
3020 mp_no mpy;
3021 #endif
3022
3023+ fenv_t env;
3024+ double retval;
3025+
3026 int __branred(double, double *, double *);
3027 int __mpranred(double, mp_no *, int);
3028
3029+ libc_feholdexcept_setround (&env, FE_TONEAREST);
3030+
3031 /* x=+-INF, x=NaN */
3032 num.d = x; ux = num.i[HIGH_HALF];
3033 if ((ux&0x7ff00000)==0x7ff00000) {
3034 if ((ux&0x7fffffff)==0x7ff00000)
3035 __set_errno (EDOM);
3036- return x-x;
3037+ retval = x-x;
3038+ goto ret;
3039 }
3040
3041 w=(x<ZERO) ? -x : x;
3042
3043 /* (I) The case abs(x) <= 1.259e-8 */
3044- if (w<=g1.d) return x;
3045+ if (w<=g1.d) { retval = x; goto ret; }
3046
3047 /* (II) The case 1.259e-8 < abs(x) <= 0.0608 */
3048 if (w<=g2.d) {
3049@@ -80,7 +88,7 @@ double tan(double x) {
3050 /* First stage */
3051 x2 = x*x;
3052 t2 = x*x2*(d3.d+x2*(d5.d+x2*(d7.d+x2*(d9.d+x2*d11.d))));
3053- if ((y=x+(t2-u1.d*t2)) == x+(t2+u1.d*t2)) return y;
3054+ if ((y=x+(t2-u1.d*t2)) == x+(t2+u1.d*t2)) { retval = y; goto ret; }
3055
3056 /* Second stage */
3057 c1 = x2*(a15.d+x2*(a17.d+x2*(a19.d+x2*(a21.d+x2*(a23.d+x2*(a25.d+
3058@@ -100,8 +108,9 @@ double tan(double x) {
3059 MUL2(x2,xx2,c2,cc2,c1,cc1,t1,t2,t3,t4,t5,t6,t7,t8)
3060 MUL2(x ,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8)
3061 ADD2(x ,zero.d,c2,cc2,c1,cc1,t1,t2)
3062- if ((y=c1+(cc1-u2.d*c1)) == c1+(cc1+u2.d*c1)) return y;
3063- return tanMp(x);
3064+ if ((y=c1+(cc1-u2.d*c1)) == c1+(cc1+u2.d*c1)) { retval = y; goto ret; }
3065+ retval = tanMp(x);
3066+ goto ret;
3067 }
3068
3069 /* (III) The case 0.0608 < abs(x) <= 0.787 */
3070@@ -112,10 +121,10 @@ double tan(double x) {
3071 z = w-xfg[i][0].d; z2 = z*z; s = (x<ZERO) ? MONE : ONE;
3072 pz = z+z*z2*(e0.d+z2*e1.d);
3073 fi = xfg[i][1].d; gi = xfg[i][2].d; t2 = pz*(gi+fi)/(gi-pz);
3074- if ((y=fi+(t2-fi*u3.d))==fi+(t2+fi*u3.d)) return (s*y);
3075+ if ((y=fi+(t2-fi*u3.d))==fi+(t2+fi*u3.d)) { retval = (s*y); goto ret; }
3076 t3 = (t2<ZERO) ? -t2 : t2;
3077 t4 = fi*ua3.d+t3*ub3.d;
3078- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (s*y);
3079+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (s*y); goto ret; }
3080
3081 /* Second stage */
3082 ffi = xfg[i][3].d;
3083@@ -133,8 +142,9 @@ double tan(double x) {
3084 SUB2(one.d,zero.d,c3,cc3,c1,cc1,t1,t2)
3085 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3086
3087- if ((y=c3+(cc3-u4.d*c3))==c3+(cc3+u4.d*c3)) return (s*y);
3088- return tanMp(x);
3089+ if ((y=c3+(cc3-u4.d*c3))==c3+(cc3+u4.d*c3)) { retval = (s*y); goto ret; }
3090+ retval = tanMp(x);
3091+ goto ret;
3092 }
3093
3094 /* (---) The case 0.787 < abs(x) <= 25 */
3095@@ -152,7 +162,7 @@ double tan(double x) {
3096 else {ya= a; yya= da; sy= ONE;}
3097
3098 /* (IV),(V) The case 0.787 < abs(x) <= 25, abs(y) <= 1e-7 */
3099- if (ya<=gy1.d) return tanMp(x);
3100+ if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
3101
3102 /* (VI) The case 0.787 < abs(x) <= 25, 1e-7 < abs(y) <= 0.0608 */
3103 if (ya<=gy2.d) {
3104@@ -162,10 +172,10 @@ double tan(double x) {
3105 /* First stage -cot */
3106 EADD(a,t2,b,db)
3107 DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3108- if ((y=c+(dc-u6.d*c))==c+(dc+u6.d*c)) return (-y); }
3109+ if ((y=c+(dc-u6.d*c))==c+(dc+u6.d*c)) { retval = (-y); goto ret; } }
3110 else {
3111 /* First stage tan */
3112- if ((y=a+(t2-u5.d*a))==a+(t2+u5.d*a)) return y; }
3113+ if ((y=a+(t2-u5.d*a))==a+(t2+u5.d*a)) { retval = y; goto ret; } }
3114 /* Second stage */
3115 /* Range reduction by algorithm ii */
3116 t = (x*hpinv.d + toint.d);
3117@@ -203,11 +213,12 @@ double tan(double x) {
3118 if (n) {
3119 /* Second stage -cot */
3120 DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3121- if ((y=c2+(cc2-u8.d*c2)) == c2+(cc2+u8.d*c2)) return (-y); }
3122+ if ((y=c2+(cc2-u8.d*c2)) == c2+(cc2+u8.d*c2)) { retval = (-y); goto ret; } }
3123 else {
3124 /* Second stage tan */
3125- if ((y=c1+(cc1-u7.d*c1)) == c1+(cc1+u7.d*c1)) return y; }
3126- return tanMp(x);
3127+ if ((y=c1+(cc1-u7.d*c1)) == c1+(cc1+u7.d*c1)) { retval = y; goto ret; } }
3128+ retval = tanMp(x);
3129+ goto ret;
3130 }
3131
3132 /* (VII) The case 0.787 < abs(x) <= 25, 0.0608 < abs(y) <= 0.787 */
3133@@ -221,17 +232,17 @@ double tan(double x) {
3134 if (n) {
3135 /* -cot */
3136 t2 = pz*(fi+gi)/(fi+pz);
3137- if ((y=gi-(t2-gi*u10.d))==gi-(t2+gi*u10.d)) return (-sy*y);
3138+ if ((y=gi-(t2-gi*u10.d))==gi-(t2+gi*u10.d)) { retval = (-sy*y); goto ret; }
3139 t3 = (t2<ZERO) ? -t2 : t2;
3140 t4 = gi*ua10.d+t3*ub10.d;
3141- if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
3142+ if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
3143 else {
3144 /* tan */
3145 t2 = pz*(gi+fi)/(gi-pz);
3146- if ((y=fi+(t2-fi*u9.d))==fi+(t2+fi*u9.d)) return (sy*y);
3147+ if ((y=fi+(t2-fi*u9.d))==fi+(t2+fi*u9.d)) { retval = (sy*y); goto ret; }
3148 t3 = (t2<ZERO) ? -t2 : t2;
3149 t4 = fi*ua9.d+t3*ub9.d;
3150- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
3151+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
3152
3153 /* Second stage */
3154 ffi = xfg[i][3].d;
3155@@ -252,13 +263,14 @@ double tan(double x) {
3156 if (n) {
3157 /* -cot */
3158 DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3159- if ((y=c3+(cc3-u12.d*c3))==c3+(cc3+u12.d*c3)) return (-sy*y); }
3160+ if ((y=c3+(cc3-u12.d*c3))==c3+(cc3+u12.d*c3)) { retval = (-sy*y); goto ret; } }
3161 else {
3162 /* tan */
3163 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3164- if ((y=c3+(cc3-u11.d*c3))==c3+(cc3+u11.d*c3)) return (sy*y); }
3165+ if ((y=c3+(cc3-u11.d*c3))==c3+(cc3+u11.d*c3)) { retval = (sy*y); goto ret; } }
3166
3167- return tanMp(x);
3168+ retval = tanMp(x);
3169+ goto ret;
3170 }
3171
3172 /* (---) The case 25 < abs(x) <= 1e8 */
3173@@ -280,7 +292,7 @@ double tan(double x) {
3174 else {ya= a; yya= da; sy= ONE;}
3175
3176 /* (+++) The case 25 < abs(x) <= 1e8, abs(y) <= 1e-7 */
3177- if (ya<=gy1.d) return tanMp(x);
3178+ if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
3179
3180 /* (VIII) The case 25 < abs(x) <= 1e8, 1e-7 < abs(y) <= 0.0608 */
3181 if (ya<=gy2.d) {
3182@@ -290,10 +302,10 @@ double tan(double x) {
3183 /* First stage -cot */
3184 EADD(a,t2,b,db)
3185 DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3186- if ((y=c+(dc-u14.d*c))==c+(dc+u14.d*c)) return (-y); }
3187+ if ((y=c+(dc-u14.d*c))==c+(dc+u14.d*c)) { retval = (-y); goto ret; } }
3188 else {
3189 /* First stage tan */
3190- if ((y=a+(t2-u13.d*a))==a+(t2+u13.d*a)) return y; }
3191+ if ((y=a+(t2-u13.d*a))==a+(t2+u13.d*a)) { retval = y; goto ret; } }
3192
3193 /* Second stage */
3194 MUL2(a,da,a,da,x2,xx2,t1,t2,t3,t4,t5,t6,t7,t8)
3195@@ -317,11 +329,12 @@ double tan(double x) {
3196 if (n) {
3197 /* Second stage -cot */
3198 DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3199- if ((y=c2+(cc2-u16.d*c2)) == c2+(cc2+u16.d*c2)) return (-y); }
3200+ if ((y=c2+(cc2-u16.d*c2)) == c2+(cc2+u16.d*c2)) { retval = (-y); goto ret; } }
3201 else {
3202 /* Second stage tan */
3203- if ((y=c1+(cc1-u15.d*c1)) == c1+(cc1+u15.d*c1)) return (y); }
3204- return tanMp(x);
3205+ if ((y=c1+(cc1-u15.d*c1)) == c1+(cc1+u15.d*c1)) { retval = (y); goto ret; } }
3206+ retval = tanMp(x);
3207+ goto ret;
3208 }
3209
3210 /* (IX) The case 25 < abs(x) <= 1e8, 0.0608 < abs(y) <= 0.787 */
3211@@ -334,17 +347,17 @@ double tan(double x) {
3212 if (n) {
3213 /* -cot */
3214 t2 = pz*(fi+gi)/(fi+pz);
3215- if ((y=gi-(t2-gi*u18.d))==gi-(t2+gi*u18.d)) return (-sy*y);
3216+ if ((y=gi-(t2-gi*u18.d))==gi-(t2+gi*u18.d)) { retval = (-sy*y); goto ret; }
3217 t3 = (t2<ZERO) ? -t2 : t2;
3218 t4 = gi*ua18.d+t3*ub18.d;
3219- if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
3220+ if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
3221 else {
3222 /* tan */
3223 t2 = pz*(gi+fi)/(gi-pz);
3224- if ((y=fi+(t2-fi*u17.d))==fi+(t2+fi*u17.d)) return (sy*y);
3225+ if ((y=fi+(t2-fi*u17.d))==fi+(t2+fi*u17.d)) { retval = (sy*y); goto ret; }
3226 t3 = (t2<ZERO) ? -t2 : t2;
3227 t4 = fi*ua17.d+t3*ub17.d;
3228- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
3229+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
3230
3231 /* Second stage */
3232 ffi = xfg[i][3].d;
3233@@ -365,12 +378,13 @@ double tan(double x) {
3234 if (n) {
3235 /* -cot */
3236 DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3237- if ((y=c3+(cc3-u20.d*c3))==c3+(cc3+u20.d*c3)) return (-sy*y); }
3238+ if ((y=c3+(cc3-u20.d*c3))==c3+(cc3+u20.d*c3)) { retval = (-sy*y); goto ret; } }
3239 else {
3240 /* tan */
3241 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3242- if ((y=c3+(cc3-u19.d*c3))==c3+(cc3+u19.d*c3)) return (sy*y); }
3243- return tanMp(x);
3244+ if ((y=c3+(cc3-u19.d*c3))==c3+(cc3+u19.d*c3)) { retval = (sy*y); goto ret; } }
3245+ retval = tanMp(x);
3246+ goto ret;
3247 }
3248
3249 /* (---) The case 1e8 < abs(x) < 2**1024 */
3250@@ -381,7 +395,7 @@ double tan(double x) {
3251 else {ya= a; yya= da; sy= ONE;}
3252
3253 /* (+++) The case 1e8 < abs(x) < 2**1024, abs(y) <= 1e-7 */
3254- if (ya<=gy1.d) return tanMp(x);
3255+ if (ya<=gy1.d) { retval = tanMp(x); goto ret; }
3256
3257 /* (X) The case 1e8 < abs(x) < 2**1024, 1e-7 < abs(y) <= 0.0608 */
3258 if (ya<=gy2.d) {
3259@@ -391,10 +405,10 @@ double tan(double x) {
3260 /* First stage -cot */
3261 EADD(a,t2,b,db)
3262 DIV2(one.d,zero.d,b,db,c,dc,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3263- if ((y=c+(dc-u22.d*c))==c+(dc+u22.d*c)) return (-y); }
3264+ if ((y=c+(dc-u22.d*c))==c+(dc+u22.d*c)) { retval = (-y); goto ret; } }
3265 else {
3266 /* First stage tan */
3267- if ((y=a+(t2-u21.d*a))==a+(t2+u21.d*a)) return y; }
3268+ if ((y=a+(t2-u21.d*a))==a+(t2+u21.d*a)) { retval = y; goto ret; } }
3269
3270 /* Second stage */
3271 /* Reduction by algorithm iv */
3272@@ -423,11 +437,12 @@ double tan(double x) {
3273 if (n) {
3274 /* Second stage -cot */
3275 DIV2(one.d,zero.d,c1,cc1,c2,cc2,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3276- if ((y=c2+(cc2-u24.d*c2)) == c2+(cc2+u24.d*c2)) return (-y); }
3277+ if ((y=c2+(cc2-u24.d*c2)) == c2+(cc2+u24.d*c2)) { retval = (-y); goto ret; } }
3278 else {
3279 /* Second stage tan */
3280- if ((y=c1+(cc1-u23.d*c1)) == c1+(cc1+u23.d*c1)) return y; }
3281- return tanMp(x);
3282+ if ((y=c1+(cc1-u23.d*c1)) == c1+(cc1+u23.d*c1)) { retval = y; goto ret; } }
3283+ retval = tanMp(x);
3284+ goto ret;
3285 }
3286
3287 /* (XI) The case 1e8 < abs(x) < 2**1024, 0.0608 < abs(y) <= 0.787 */
3288@@ -440,17 +455,17 @@ double tan(double x) {
3289 if (n) {
3290 /* -cot */
3291 t2 = pz*(fi+gi)/(fi+pz);
3292- if ((y=gi-(t2-gi*u26.d))==gi-(t2+gi*u26.d)) return (-sy*y);
3293+ if ((y=gi-(t2-gi*u26.d))==gi-(t2+gi*u26.d)) { retval = (-sy*y); goto ret; }
3294 t3 = (t2<ZERO) ? -t2 : t2;
3295 t4 = gi*ua26.d+t3*ub26.d;
3296- if ((y=gi-(t2-t4))==gi-(t2+t4)) return (-sy*y); }
3297+ if ((y=gi-(t2-t4))==gi-(t2+t4)) { retval = (-sy*y); goto ret; } }
3298 else {
3299 /* tan */
3300 t2 = pz*(gi+fi)/(gi-pz);
3301- if ((y=fi+(t2-fi*u25.d))==fi+(t2+fi*u25.d)) return (sy*y);
3302+ if ((y=fi+(t2-fi*u25.d))==fi+(t2+fi*u25.d)) { retval = (sy*y); goto ret; }
3303 t3 = (t2<ZERO) ? -t2 : t2;
3304 t4 = fi*ua25.d+t3*ub25.d;
3305- if ((y=fi+(t2-t4))==fi+(t2+t4)) return (sy*y); }
3306+ if ((y=fi+(t2-t4))==fi+(t2+t4)) { retval = (sy*y); goto ret; } }
3307
3308 /* Second stage */
3309 ffi = xfg[i][3].d;
3310@@ -471,15 +486,19 @@ double tan(double x) {
3311 if (n) {
3312 /* -cot */
3313 DIV2(c1,cc1,c2,cc2,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3314- if ((y=c3+(cc3-u28.d*c3))==c3+(cc3+u28.d*c3)) return (-sy*y); }
3315+ if ((y=c3+(cc3-u28.d*c3))==c3+(cc3+u28.d*c3)) { retval = (-sy*y); goto ret; } }
3316 else {
3317 /* tan */
3318 DIV2(c2,cc2,c1,cc1,c3,cc3,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10)
3319- if ((y=c3+(cc3-u27.d*c3))==c3+(cc3+u27.d*c3)) return (sy*y); }
3320- return tanMp(x);
3321+ if ((y=c3+(cc3-u27.d*c3))==c3+(cc3+u27.d*c3)) { retval = (sy*y); goto ret; } }
3322+ retval = tanMp(x);
3323+ goto ret;
3324+
3325+ ret:
3326+ libc_feupdateenv (&env);
3327+ return retval;
3328 }
3329
3330-
3331 /* multiple precision stage */
3332 /* Convert x to multi precision number,compute tan(x) by mptan() routine */
3333 /* and converts result back to double */
3334diff -Nrup a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c
3335--- a/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c 2010-05-04 05:27:23.000000000 -0600
3336+++ b/sysdeps/ieee754/dbl-64/wordsize-64/s_nearbyint.c 2012-08-06 09:54:00.828929666 -0600
3337@@ -24,22 +24,14 @@
3338 #include "math.h"
3339 #include "math_private.h"
3340
3341-#ifdef __STDC__
3342 static const double
3343-#else
3344-static double
3345-#endif
3346 TWO52[2]={
3347 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
3348 -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
3349 };
3350
3351-#ifdef __STDC__
3352- double __nearbyint(double x)
3353-#else
3354- double __nearbyint(x)
3355- double x;
3356-#endif
3357+double
3358+__nearbyint(double x)
3359 {
3360 fenv_t env;
3361 int64_t i0,sx;
3362@@ -47,20 +39,19 @@ TWO52[2]={
3363 EXTRACT_WORDS64(i0,x);
3364 sx = (i0>>63)&1;
3365 j0 = ((i0>>52)&0x7ff)-0x3ff;
3366- if(j0<52) {
3367+ if(__builtin_expect(j0<52, 1)) {
3368 if(j0<0) {
3369 if((i0&UINT64_C(0x7fffffffffffffff))==0) return x;
3370 uint64_t i = i0 & UINT64_C(0xfffffffffffff);
3371 i0 &= UINT64_C(0xfffe000000000000);
3372 i0 |= (((i|-i) >> 12) & UINT64_C(0x8000000000000));
3373 INSERT_WORDS64(x,i0);
3374- feholdexcept (&env);
3375+ libc_feholdexcept (&env);
3376 double w = TWO52[sx]+x;
3377 double t = w-TWO52[sx];
3378- fesetenv (&env);
3379- EXTRACT_WORDS64(i0,t);
3380- INSERT_WORDS64(t,(i0&UINT64_C(0x7fffffffffffffff))|(sx<<63));
3381- return t;
3382+ math_opt_barrier(t);
3383+ libc_fesetenv (&env);
3384+ return copysign(t, x);
3385 } else {
3386 uint64_t i = UINT64_C(0x000fffffffffffff)>>j0;
3387 if((i0&i)==0) return x; /* x is integral */
3388@@ -73,10 +64,11 @@ TWO52[2]={
3389 else return x; /* x is integral */
3390 }
3391 INSERT_WORDS64(x,i0);
3392- feholdexcept (&env);
3393+ libc_feholdexcept (&env);
3394 double w = TWO52[sx]+x;
3395 double t = w-TWO52[sx];
3396- fesetenv (&env);
3397+ math_opt_barrier (t);
3398+ libc_fesetenv (&env);
3399 return t;
3400 }
3401 weak_alias (__nearbyint, nearbyint)
3402diff -Nrup a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c
3403--- a/sysdeps/ieee754/flt-32/e_exp2f.c 2010-05-04 05:27:23.000000000 -0600
3404+++ b/sysdeps/ieee754/flt-32/e_exp2f.c 2012-08-06 09:54:00.829929661 -0600
3405@@ -56,11 +56,7 @@ __ieee754_exp2f (float x)
3406 union ieee754_float ex2_u, scale_u;
3407 fenv_t oldenv;
3408
3409- feholdexcept (&oldenv);
3410-#ifdef FE_TONEAREST
3411- /* If we don't have this, it's too bad. */
3412- fesetround (FE_TONEAREST);
3413-#endif
3414+ libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST);
3415
3416 /* 1. Argument reduction.
3417 Choose integers ex, -128 <= t < 128, and some real
3418@@ -103,7 +99,7 @@ __ieee754_exp2f (float x)
3419 x22 = (.24022656679f * x + .69314736128f) * ex2_u.f;
3420
3421 /* 5. Return (2^x2-1) * 2^(t/512+e+ex) + 2^(t/512+e+ex). */
3422- fesetenv (&oldenv);
3423+ libc_fesetenv (&oldenv);
3424
3425 result = x22 * x + ex2_u.f;
3426
3427diff -Nrup a/sysdeps/ieee754/flt-32/e_expf.c b/sysdeps/ieee754/flt-32/e_expf.c
3428--- a/sysdeps/ieee754/flt-32/e_expf.c 2010-05-04 05:27:23.000000000 -0600
3429+++ b/sysdeps/ieee754/flt-32/e_expf.c 2012-08-06 09:54:00.829929661 -0600
3430@@ -47,9 +47,6 @@
3431 to perform an 'accurate table method' expf, because of the range reduction
3432 overhead (compare exp2f).
3433 */
3434-#ifndef _GNU_SOURCE
3435-#define _GNU_SOURCE
3436-#endif
3437 #include <float.h>
3438 #include <ieee754.h>
3439 #include <math.h>
3440@@ -60,8 +57,8 @@
3441 extern const float __exp_deltatable[178];
3442 extern const double __exp_atable[355] /* __attribute__((mode(DF))) */;
3443
3444-static const volatile float TWOM100 = 7.88860905e-31;
3445-static const volatile float TWO127 = 1.7014118346e+38;
3446+static const float TWOM100 = 7.88860905e-31;
3447+static const float TWO127 = 1.7014118346e+38;
3448
3449 float
3450 __ieee754_expf (float x)
3451@@ -86,10 +83,7 @@ __ieee754_expf (float x)
3452 union ieee754_double ex2_u;
3453 fenv_t oldenv;
3454
3455- feholdexcept (&oldenv);
3456-#ifdef FE_TONEAREST
3457- fesetround (FE_TONEAREST);
3458-#endif
3459+ libc_feholdexcept_setroundf (&oldenv, FE_TONEAREST);
3460
3461 /* Calculate n. */
3462 n = x * M_1_LN2 + THREEp22;
3463@@ -119,7 +113,7 @@ __ieee754_expf (float x)
3464 x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
3465
3466 /* Return result. */
3467- fesetenv (&oldenv);
3468+ libc_fesetenvf (&oldenv);
3469
3470 result = x22 * ex2_u.d + ex2_u.d;
3471 return (float) result;
3472diff -Nrup a/sysdeps/ieee754/flt-32/s_nearbyintf.c b/sysdeps/ieee754/flt-32/s_nearbyintf.c
3473--- a/sysdeps/ieee754/flt-32/s_nearbyintf.c 2010-05-04 05:27:23.000000000 -0600
3474+++ b/sysdeps/ieee754/flt-32/s_nearbyintf.c 2012-08-06 09:54:00.891929402 -0600
3475@@ -19,22 +19,14 @@
3476 #include "math.h"
3477 #include "math_private.h"
3478
3479-#ifdef __STDC__
3480 static const float
3481-#else
3482-static float
3483-#endif
3484 TWO23[2]={
3485 8.3886080000e+06, /* 0x4b000000 */
3486 -8.3886080000e+06, /* 0xcb000000 */
3487 };
3488
3489-#ifdef __STDC__
3490- float __nearbyintf(float x)
3491-#else
3492- float __nearbyintf(x)
3493- float x;
3494-#endif
3495+float
3496+__nearbyintf(float x)
3497 {
3498 fenv_t env;
3499 int32_t i0,j0,sx;
3500@@ -50,13 +42,13 @@ TWO23[2]={
3501 i0 &= 0xfff00000;
3502 i0 |= ((i1|-i1)>>9)&0x400000;
3503 SET_FLOAT_WORD(x,i0);
3504- feholdexcept (&env);
3505- w = TWO23[sx]+x;
3506- t = w-TWO23[sx];
3507- fesetenv (&env);
3508+ libc_feholdexceptf (&env);
3509+ w = TWO23[sx]+x;
3510+ t = w-TWO23[sx];
3511+ libc_fesetenvf (&env);
3512 GET_FLOAT_WORD(i0,t);
3513 SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31));
3514- return t;
3515+ return t;
3516 } else {
3517 i = (0x007fffff)>>j0;
3518 if((i0&i)==0) return x; /* x is integral */
3519@@ -64,14 +56,14 @@ TWO23[2]={
3520 if((i0&i)!=0) i0 = (i0&(~i))|((0x100000)>>j0);
3521 }
3522 } else {
3523- if(j0==0x80) return x+x; /* inf or NaN */
3524+ if(__builtin_expect(j0==0x80, 0)) return x+x; /* inf or NaN */
3525 else return x; /* x is integral */
3526 }
3527 SET_FLOAT_WORD(x,i0);
3528- feholdexcept (&env);
3529+ libc_feholdexceptf (&env);
3530 w = TWO23[sx]+x;
3531 t = w-TWO23[sx];
3532- fesetenv (&env);
3533+ libc_fesetenvf (&env);
3534 return t;
3535 }
3536 weak_alias (__nearbyintf, nearbyintf)
3537diff -Nrup a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps
3538--- a/sysdeps/powerpc/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
3539+++ b/sysdeps/powerpc/fpu/libm-test-ulps 2012-08-06 10:03:24.424569052 -0600
3540@@ -37,16 +37,9 @@ ildouble: 1
3541 ldouble: 1
3542
3543 # cacosh
3544-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
3545-double: 1
3546-float: 7
3547-idouble: 1
3548-ifloat: 7
3549 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
3550-double: 1
3551-float: 3
3552-idouble: 1
3553-ifloat: 3
3554+float: 1
3555+ifloat: 1
3556
3557 # casin
3558 Test "Real part of: casin (-2 - 3 i) == -0.57065278432109940071028387968566963 - 1.9833870299165354323470769028940395 i":
3559@@ -84,8 +77,6 @@ ifloat: 1
3560
3561 # catan
3562 Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
3563-float: 3
3564-ifloat: 3
3565 ildouble: 1
3566 ldouble: 1
3567 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
3568@@ -93,23 +84,14 @@ double: 1
3569 float: 1
3570 idouble: 1
3571 ifloat: 1
3572-Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
3573-float: 4
3574-ifloat: 4
3575
3576 # catanh
3577 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
3578 double: 4
3579 idouble: 4
3580-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
3581-float: 4
3582-ifloat: 4
3583 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
3584 double: 1
3585 idouble: 1
3586-Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
3587-float: 6
3588-ifloat: 6
3589
3590 # cbrt
3591 Test "cbrt (-27.0) == -3.0":
3592@@ -167,8 +149,6 @@ ldouble: 1
3593
3594 # clog
3595 Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
3596-float: 3
3597-ifloat: 3
3598 ildouble: 1
3599 ldouble: 1
3600 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
3601@@ -197,9 +177,7 @@ ildouble: 1
3602 ldouble: 1
3603 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
3604 double: 1
3605-float: 5
3606 idouble: 1
3607-ifloat: 5
3608 ildouble: 1
3609 ldouble: 1
3610 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
3611@@ -298,23 +276,165 @@ ldouble: 1
3612 # cos
3613 Test "cos (M_PI_6l * 2.0) == 0.5":
3614 double: 1
3615-float: 1
3616 idouble: 1
3617-ifloat: 1
3618 Test "cos (M_PI_6l * 4.0) == -0.5":
3619 double: 2
3620 float: 1
3621 idouble: 2
3622 ifloat: 1
3623-Test "cos (pi/2) == 0":
3624-double: 1
3625+
3626+# cos_downward
3627+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
3628+float: 1
3629+ifloat: 1
3630+ildouble: 4
3631+ldouble: 4
3632+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
3633+ildouble: 1
3634+ldouble: 1
3635+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
3636+float: 1
3637+ifloat: 1
3638+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
3639+float: 1
3640+ifloat: 1
3641+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
3642+float: 1
3643+ifloat: 1
3644+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
3645+float: 1
3646+ifloat: 1
3647+Test "cos_downward (6) == 0.9601702866503660205456522979229244054519":
3648+ildouble: 1
3649+ldouble: 1
3650+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
3651+float: 1
3652+ifloat: 1
3653+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
3654+float: 1
3655+ifloat: 1
3656+ildouble: 2
3657+ldouble: 2
3658+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
3659+ildouble: 1
3660+ldouble: 1
3661+
3662+# cos_tonearest
3663+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
3664+float: 1
3665+ifloat: 1
3666+
3667+# cos_towardzero
3668+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
3669+ildouble: 2
3670+ldouble: 2
3671+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
3672+ildouble: 1
3673+ldouble: 1
3674+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
3675+float: 1
3676+ifloat: 1
3677+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
3678+float: 1
3679+ifloat: 1
3680+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
3681+ildouble: 1
3682+ldouble: 1
3683+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
3684+float: 1
3685+ifloat: 1
3686+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
3687+float: 1
3688+ifloat: 1
3689+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
3690 float: 1
3691-idouble: 1
3692 ifloat: 1
3693-Test "cos (16.0) == -0.9576594803233846418996372326511034717803"
3694 ildouble: 2
3695 ldouble: 2
3696
3697+# cos_upward
3698+Test "cos_upward (1) == 0.5403023058681397174009366074429766037323":
3699+ildouble: 2
3700+ldouble: 2
3701+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
3702+float: 1
3703+ifloat: 1
3704+ildouble: 1
3705+ldouble: 1
3706+Test "cos_upward (4) == -0.6536436208636119146391681830977503814241":
3707+ildouble: 1
3708+ldouble: 1
3709+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
3710+ildouble: 1
3711+ldouble: 1
3712+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
3713+float: 1
3714+ifloat: 1
3715+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
3716+float: 1
3717+ifloat: 1
3718+ildouble: 1
3719+ldouble: 1
3720+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
3721+float: 2
3722+ifloat: 2
3723+
3724+# cosh_downward
3725+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
3726+float: 1
3727+ifloat: 1
3728+ildouble: 5269156250720
3729+ldouble: 5269156250720
3730+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
3731+float: 1
3732+ifloat: 1
3733+ildouble: 484603564240
3734+ldouble: 484603564240
3735+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
3736+float: 1
3737+ifloat: 1
3738+ildouble: 89137844202
3739+ldouble: 89137844202
3740+
3741+# cosh_tonearest
3742+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
3743+ildouble: 5269156250719
3744+ldouble: 5269156250719
3745+Test "cosh_tonearest (23) == 4872401723.124451300068625740569997090344":
3746+ildouble: 484603564240
3747+ldouble: 484603564240
3748+Test "cosh_tonearest (24) == 13244561064.92173614708845674912733665919":
3749+ildouble: 89137844202
3750+ldouble: 89137844202
3751+
3752+# cosh_towardzero
3753+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
3754+float: 1
3755+ifloat: 1
3756+ildouble: 5269156250720
3757+ldouble: 5269156250720
3758+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
3759+float: 1
3760+ifloat: 1
3761+ildouble: 484603564240
3762+ldouble: 484603564240
3763+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
3764+float: 1
3765+ifloat: 1
3766+ildouble: 89137844202
3767+ldouble: 89137844202
3768+
3769+# cosh_upward
3770+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997":
3771+ildouble: 5269156250719
3772+ldouble: 5269156250719
3773+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
3774+ildouble: 484603564240
3775+ldouble: 484603564240
3776+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
3777+ildouble: 89137844200
3778+ldouble: 89137844200
3779+
3780 # cpow
3781 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
3782 float: 1
3783@@ -386,12 +506,6 @@ float: 1
3784 ifloat: 1
3785
3786 # ctan
3787-Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
3788-double: 1
3789-idouble: 1
3790-Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
3791-ildouble: 1
3792-ldouble: 1
3793 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
3794 double: 1
3795 idouble: 1
3796@@ -463,6 +577,33 @@ Test "exp2 (10) == 1024":
3797 ildouble: 2
3798 ldouble: 2
3799
3800+# exp_downward
3801+Test "exp_downward (2) == e^2":
3802+float: 1
3803+ifloat: 1
3804+Test "exp_downward (3) == e^3":
3805+float: 1
3806+ifloat: 1
3807+ildouble: 1
3808+ldouble: 1
3809+
3810+# exp_towardzero
3811+Test "exp_towardzero (2) == e^2":
3812+float: 1
3813+ifloat: 1
3814+Test "exp_towardzero (3) == e^3":
3815+float: 1
3816+ifloat: 1
3817+ildouble: 1
3818+ldouble: 1
3819+
3820+# exp_upward
3821+Test "exp_upward (1) == e":
3822+float: 1
3823+ifloat: 1
3824+ildouble: 1
3825+ldouble: 1
3826+
3827 # expm1
3828 Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
3829 double: 1
3830@@ -505,40 +646,27 @@ ifloat: 1
3831 # j0
3832 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
3833 double: 1
3834-float: 2
3835+float: 1
3836 idouble: 1
3837-ifloat: 2
3838-ildouble: 1
3839-ldouble: 1
3840+ifloat: 1
3841 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
3842-double: 3
3843+double: 2
3844 float: 1
3845-idouble: 3
3846+idouble: 2
3847 ifloat: 1
3848-ildouble: 1
3849-ldouble: 1
3850-Test "j0 (2.0) == 0.223890779141235668051827454649948626":
3851-float: 2
3852-ifloat: 2
3853 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
3854 double: 1
3855-float: 2
3856+float: 1
3857 idouble: 1
3858-ifloat: 2
3859-ildouble: 1
3860-ldouble: 1
3861+ifloat: 1
3862 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
3863 float: 1
3864 ifloat: 1
3865-ildouble: 1
3866-ldouble: 1
3867
3868 # j1
3869 Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
3870 float: 2
3871 ifloat: 2
3872-ildouble: 1
3873-ldouble: 1
3874 Test "j1 (2.0) == 0.576724807756873387202448242269137087":
3875 double: 1
3876 idouble: 1
3877@@ -551,38 +679,25 @@ ldouble: 1
3878 # jn
3879 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
3880 double: 1
3881-float: 2
3882+float: 1
3883 idouble: 1
3884-ifloat: 2
3885-ildouble: 1
3886-ldouble: 1
3887+ifloat: 1
3888 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
3889-double: 3
3890+double: 2
3891 float: 1
3892-idouble: 3
3893+idouble: 2
3894 ifloat: 1
3895-ildouble: 1
3896-ldouble: 1
3897-Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
3898-float: 2
3899-ifloat: 2
3900 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
3901 double: 1
3902-float: 2
3903+float: 1
3904 idouble: 1
3905-ifloat: 2
3906-ildouble: 1
3907-ldouble: 1
3908+ifloat: 1
3909 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
3910 float: 1
3911 ifloat: 1
3912-ildouble: 1
3913-ldouble: 1
3914 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
3915 float: 2
3916 ifloat: 2
3917-ildouble: 1
3918-ldouble: 1
3919 Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
3920 double: 1
3921 idouble: 1
3922@@ -615,11 +730,8 @@ ifloat: 1
3923 ildouble: 4
3924 ldouble: 4
3925 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
3926-float: 4
3927-ifloat: 4
3928-Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083":
3929-ildouble: 1
3930-ldouble: 1
3931+float: 3
3932+ifloat: 3
3933 Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
3934 double: 1
3935 float: 1
3936@@ -628,21 +740,18 @@ ifloat: 1
3937 Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
3938 double: 1
3939 idouble: 1
3940-Test "jn (3, 1.0) == 0.0195633539826684059189053216217515083":
3941-ildouble: 1
3942-ldouble: 1
3943 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
3944 double: 3
3945-float: 2
3946+float: 1
3947 idouble: 3
3948-ifloat: 2
3949+ifloat: 1
3950 ildouble: 2
3951 ldouble: 2
3952 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
3953 double: 1
3954-float: 2
3955+float: 1
3956 idouble: 1
3957-ifloat: 2
3958+ifloat: 1
3959 ildouble: 2
3960 ldouble: 2
3961
3962@@ -675,115 +784,350 @@ Test "log1p (-0.25) == -0.28768207245178
3963 float: 1
3964 ifloat: 1
3965
3966-# log2
3967-Test "log2 (e) == M_LOG2El":
3968+# pow_downward
3969+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
3970 ildouble: 1
3971 ldouble: 1
3972-
3973-# sin
3974-Test "sin (16.0) == -0.2879033166650652947844562482186175296207"
3975-ildouble: 2
3976-ldouble: 2
3977-
3978-# sincos
3979-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
3980-double: 1
3981-float: 1
3982-idouble: 1
3983-ifloat: 1
3984-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
3985-double: 1
3986+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
3987 float: 1
3988-idouble: 1
3989 ifloat: 1
3990-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
3991-double: 1
3992+
3993+# pow_towardzero
3994+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
3995+ildouble: 1
3996+ldouble: 1
3997+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
3998 float: 1
3999-idouble: 1
4000 ifloat: 1
4001-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
4002+
4003+# pow_upward
4004+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
4005 float: 1
4006 ifloat: 1
4007-
4008-# sinh
4009-Test "sinh (0.75) == 0.822316731935829980703661634446913849":
4010+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
4011 ildouble: 1
4012 ldouble: 1
4013
4014-# tan
4015-Test "tan (pi/4) == 1":
4016-double: 1
4017-idouble: 1
4018+# sin_downward
4019+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
4020+ildouble: 4
4021+ldouble: 4
4022+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
4023+float: 1
4024+ifloat: 1
4025+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
4026 ildouble: 1
4027 ldouble: 1
4028-
4029-# tanh
4030-Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
4031+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
4032+float: 1
4033+ifloat: 1
4034+ildouble: 2
4035+ldouble: 2
4036+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
4037 ildouble: 1
4038 ldouble: 1
4039-Test "tanh (0.75) == 0.635148952387287319214434357312496495":
4040+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
4041+float: 1
4042+ifloat: 1
4043+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
4044+float: 1
4045+ifloat: 1
4046+ildouble: 2
4047+ldouble: 2
4048+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
4049 ildouble: 1
4050 ldouble: 1
4051
4052-# tgamma
4053-Test "tgamma (-0.5) == -2 sqrt (pi)":
4054-double: 1
4055+# sin_tonearest
4056+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
4057 float: 1
4058-idouble: 1
4059 ifloat: 1
4060-Test "tgamma (0.5) == sqrt (pi)":
4061+
4062+# sin_towardzero
4063+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
4064 float: 1
4065 ifloat: 1
4066-Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
4067-double: 1
4068+ildouble: 2
4069+ldouble: 2
4070+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
4071 float: 1
4072-idouble: 1
4073 ifloat: 1
4074-
4075-# y0
4076-Test "y0 (0.125) == -1.38968062514384052915582277745018693":
4077+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
4078 ildouble: 1
4079 ldouble: 1
4080-Test "y0 (0.75) == -0.137172769385772397522814379396581855":
4081+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
4082 ildouble: 1
4083 ldouble: 1
4084-Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
4085-double: 2
4086+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
4087+float: 1
4088+ifloat: 1
4089+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
4090 float: 1
4091-idouble: 2
4092 ifloat: 1
4093+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
4094 ildouble: 1
4095 ldouble: 1
4096-Test "y0 (1.5) == 0.382448923797758843955068554978089862":
4097-double: 2
4098+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
4099 float: 1
4100-idouble: 2
4101 ifloat: 1
4102-Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
4103+ildouble: 1
4104+ldouble: 1
4105+
4106+# sin_upward
4107+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
4108+float: 1
4109+ifloat: 1
4110+ildouble: 2
4111+ldouble: 2
4112+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
4113+float: 2
4114+ifloat: 2
4115+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
4116+ildouble: 1
4117+ldouble: 1
4118+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
4119+float: 1
4120+ifloat: 1
4121+ildouble: 1
4122+ldouble: 1
4123+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
4124+ildouble: 1
4125+ldouble: 1
4126+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
4127+float: 1
4128+ifloat: 1
4129+
4130+# sincos
4131+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
4132+double: 1
4133+idouble: 1
4134+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
4135 double: 1
4136 float: 1
4137 idouble: 1
4138 ifloat: 1
4139+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
4140+float: 1
4141+ifloat: 1
4142+
4143+# sinh
4144+Test "sinh (0.75) == 0.822316731935829980703661634446913849":
4145 ildouble: 1
4146 ldouble: 1
4147-Test "y0 (2.0) == 0.510375672649745119596606592727157873":
4148+
4149+# sinh_downward
4150+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
4151+float: 1
4152+ifloat: 1
4153+ildouble: 5269156250718
4154+ldouble: 5269156250718
4155+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
4156+float: 1
4157+ifloat: 1
4158+ildouble: 484603564240
4159+ldouble: 484603564240
4160+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
4161+float: 1
4162+ifloat: 1
4163+ildouble: 89137844201
4164+ldouble: 89137844201
4165+
4166+# sinh_tonearest
4167+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
4168+ildouble: 5269156250719
4169+ldouble: 5269156250719
4170+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
4171+ildouble: 484603564241
4172+ldouble: 484603564241
4173+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
4174+ildouble: 89137844201
4175+ldouble: 89137844201
4176+
4177+# sinh_towardzero
4178+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
4179+float: 1
4180+ifloat: 1
4181+ildouble: 5269156250718
4182+ldouble: 5269156250718
4183+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
4184+float: 1
4185+ifloat: 1
4186+ildouble: 484603564240
4187+ldouble: 484603564240
4188+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
4189+float: 1
4190+ifloat: 1
4191+ildouble: 89137844201
4192+ldouble: 89137844201
4193+
4194+# sinh_upward
4195+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
4196+ildouble: 5269156250719
4197+ldouble: 5269156250719
4198+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
4199+ildouble: 484603564241
4200+ldouble: 484603564241
4201+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
4202+ildouble: 89137844202
4203+ldouble: 89137844202
4204+
4205+# tan
4206+Test "tan (pi/4) == 1":
4207+ildouble: 1
4208+ldouble: 1
4209+
4210+# tan_downward
4211+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
4212+float: 1
4213+ifloat: 1
4214+ildouble: 2
4215+ldouble: 2
4216+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
4217+float: 1
4218+ifloat: 1
4219+ildouble: 2
4220+ldouble: 2
4221+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
4222+float: 1
4223+ifloat: 1
4224+ildouble: 1
4225+ldouble: 1
4226+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
4227+float: 1
4228+ifloat: 1
4229+ildouble: 1
4230+ldouble: 1
4231+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
4232+float: 1
4233+ifloat: 1
4234+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
4235+float: 1
4236+ifloat: 1
4237+ildouble: 1
4238+ldouble: 1
4239+
4240+# tan_tonearest
4241+Test "tan_tonearest (10) == 0.6483608274590866712591249330098086768169":
4242+ildouble: 1
4243+ldouble: 1
4244+Test "tan_tonearest (4) == 1.1578212823495775831373424182673239231198":
4245+ildouble: 1
4246+ldouble: 1
4247+Test "tan_tonearest (7) == 0.8714479827243187364564508896003135663222":
4248+ildouble: 1
4249+ldouble: 1
4250+
4251+# tan_towardzero
4252+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
4253+float: 1
4254+ifloat: 1
4255+ildouble: 2
4256+ldouble: 2
4257+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
4258+float: 1
4259+ifloat: 1
4260+ildouble: 3
4261+ldouble: 3
4262+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
4263+float: 1
4264+ifloat: 1
4265+ildouble: 1
4266+ldouble: 1
4267+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
4268+float: 1
4269+ifloat: 1
4270+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
4271+ildouble: 1
4272+ldouble: 1
4273+Test "tan_towardzero (7) == 0.8714479827243187364564508896003135663222":
4274+ildouble: 2
4275+ldouble: 2
4276+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
4277+float: 1
4278+ifloat: 1
4279+ildouble: 1
4280+ldouble: 1
4281+
4282+# tan_upward
4283+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
4284+ildouble: 1
4285+ldouble: 1
4286+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
4287+float: 1
4288+ifloat: 1
4289+ildouble: 3
4290+ldouble: 3
4291+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
4292+float: 1
4293+ifloat: 1
4294+ildouble: 1
4295+ldouble: 1
4296+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
4297+ildouble: 1
4298+ldouble: 1
4299+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
4300+ildouble: 1
4301+ldouble: 1
4302+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
4303+ildouble: 1
4304+ldouble: 1
4305+
4306+# tanh
4307+Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
4308+ildouble: 1
4309+ldouble: 1
4310+Test "tanh (0.75) == 0.635148952387287319214434357312496495":
4311+ildouble: 1
4312+ldouble: 1
4313+
4314+# tgamma
4315+Test "tgamma (-0.5) == -2 sqrt (pi)":
4316 double: 1
4317+float: 1
4318 idouble: 1
4319-Test "y0 (8.0) == 0.223521489387566220527323400498620359":
4320+ifloat: 1
4321+Test "tgamma (0.5) == sqrt (pi)":
4322+float: 1
4323+ifloat: 1
4324+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
4325 double: 1
4326 float: 1
4327 idouble: 1
4328 ifloat: 1
4329+
4330+# y0
4331+Test "y0 (0.125) == -1.38968062514384052915582277745018693":
4332 ildouble: 1
4333 ldouble: 1
4334-
4335-# y1
4336-Test "y1 (0.125) == -5.19993611253477499595928744876579921":
4337+Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
4338+double: 2
4339+float: 1
4340+idouble: 2
4341+ifloat: 1
4342+ildouble: 1
4343+ldouble: 1
4344+Test "y0 (1.5) == 0.382448923797758843955068554978089862":
4345+double: 2
4346+float: 1
4347+idouble: 2
4348+ifloat: 1
4349+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
4350+double: 1
4351+float: 1
4352+idouble: 1
4353+ifloat: 1
4354+Test "y0 (2.0) == 0.510375672649745119596606592727157873":
4355 double: 1
4356 idouble: 1
4357-Test "y1 (1.5) == -0.412308626973911295952829820633445323":
4358+Test "y0 (8.0) == 0.223521489387566220527323400498620359":
4359+double: 1
4360 float: 1
4361+idouble: 1
4362 ifloat: 1
4363+ildouble: 1
4364+ldouble: 1
4365+
4366+# y1
4367 Test "y1 (10.0) == 0.249015424206953883923283474663222803":
4368 double: 3
4369 float: 1
4370@@ -794,30 +1138,27 @@ ldouble: 2
4371 Test "y1 (2.0) == -0.107032431540937546888370772277476637":
4372 double: 1
4373 float: 1
4374-idouble: 2
4375-ifloat: 2
4376+idouble: 1
4377+ifloat: 1
4378 Test "y1 (8.0) == -0.158060461731247494255555266187483550":
4379 double: 1
4380 float: 2
4381 idouble: 1
4382 ifloat: 2
4383-ildouble: 2
4384-ldouble: 2
4385+ildouble: 1
4386+ldouble: 1
4387
4388 # yn
4389 Test "yn (0, 0.125) == -1.38968062514384052915582277745018693":
4390 ildouble: 1
4391 ldouble: 1
4392-Test "yn (0, 0.75) == -0.137172769385772397522814379396581855":
4393-ildouble: 1
4394-ldouble: 1
4395 Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
4396 double: 2
4397 float: 1
4398 idouble: 2
4399 ifloat: 1
4400-ildouble: 2
4401-ldouble: 2
4402+ildouble: 1
4403+ldouble: 1
4404 Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
4405 double: 2
4406 float: 1
4407@@ -828,8 +1169,6 @@ double: 1
4408 float: 1
4409 idouble: 1
4410 ifloat: 1
4411-ildouble: 2
4412-ldouble: 2
4413 Test "yn (0, 2.0) == 0.510375672649745119596606592727157873":
4414 double: 1
4415 idouble: 1
4416@@ -838,14 +1177,8 @@ double: 1
4417 float: 1
4418 idouble: 1
4419 ifloat: 1
4420-ildouble: 2
4421-ldouble: 2
4422-Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
4423-double: 1
4424-idouble: 1
4425-Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
4426-float: 2
4427-ifloat: 2
4428+ildouble: 1
4429+ldouble: 1
4430 Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
4431 double: 3
4432 float: 1
4433@@ -863,14 +1196,8 @@ double: 1
4434 float: 2
4435 idouble: 1
4436 ifloat: 2
4437-ildouble: 2
4438-ldouble: 2
4439-Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
4440-double: 1
4441-idouble: 1
4442-Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
4443-double: 1
4444-idouble: 1
4445+ildouble: 1
4446+ldouble: 1
4447 Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
4448 double: 1
4449 float: 2
4450@@ -881,21 +1208,14 @@ float: 2
4451 ifloat: 2
4452 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
4453 double: 2
4454-float: 2
4455 idouble: 2
4456-ifloat: 2
4457-ildouble: 2
4458-ldouble: 2
4459 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
4460 double: 3
4461 float: 1
4462 idouble: 3
4463 ifloat: 1
4464-ildouble: 2
4465-ldouble: 2
4466-Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
4467-double: 1
4468-idouble: 1
4469+ildouble: 1
4470+ldouble: 1
4471 Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
4472 float: 1
4473 ifloat: 1
4474@@ -904,8 +1224,8 @@ double: 1
4475 float: 1
4476 idouble: 1
4477 ifloat: 1
4478-ildouble: 2
4479-ldouble: 2
4480+ildouble: 1
4481+ldouble: 1
4482 Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
4483 double: 1
4484 idouble: 1
4485@@ -950,18 +1270,12 @@ ildouble: 1
4486 ldouble: 1
4487
4488 Function: Real part of "cacosh":
4489-double: 1
4490-float: 7
4491-idouble: 1
4492-ifloat: 7
4493 ildouble: 1
4494 ldouble: 1
4495
4496 Function: Imaginary part of "cacosh":
4497-double: 1
4498-float: 3
4499-idouble: 1
4500-ifloat: 3
4501+float: 1
4502+ifloat: 1
4503
4504 Function: Real part of "casin":
4505 double: 1
4506@@ -992,8 +1306,6 @@ ildouble: 1
4507 ldouble: 1
4508
4509 Function: Real part of "catan":
4510-float: 4
4511-ifloat: 4
4512 ildouble: 1
4513 ldouble: 1
4514
4515@@ -1009,10 +1321,6 @@ Function: Real part of "catanh":
4516 double: 4
4517 idouble: 4
4518
4519-Function: Imaginary part of "catanh":
4520-float: 6
4521-ifloat: 6
4522-
4523 Function: "cbrt":
4524 double: 1
4525 idouble: 1
4526@@ -1066,8 +1374,6 @@ ildouble: 2
4527 ldouble: 2
4528
4529 Function: Imaginary part of "clog":
4530-float: 3
4531-ifloat: 3
4532 ildouble: 1
4533 ldouble: 1
4534
4535@@ -1079,9 +1385,9 @@ ldouble: 3
4536
4537 Function: Imaginary part of "clog10":
4538 double: 1
4539-float: 5
4540+float: 1
4541 idouble: 1
4542-ifloat: 5
4543+ifloat: 1
4544 ildouble: 1
4545 ldouble: 1
4546
4547@@ -1093,10 +1399,54 @@ ifloat: 1
4548 ildouble: 1
4549 ldouble: 1
4550
4551+Function: "cos_downward":
4552+float: 1
4553+ifloat: 1
4554+ildouble: 4
4555+ldouble: 4
4556+
4557+Function: "cos_tonearest":
4558+float: 1
4559+ifloat: 1
4560+ildouble: 1
4561+ldouble: 1
4562+
4563+Function: "cos_towardzero":
4564+float: 1
4565+ifloat: 1
4566+ildouble: 2
4567+ldouble: 2
4568+
4569+Function: "cos_upward":
4570+float: 2
4571+ifloat: 2
4572+ildouble: 2
4573+ldouble: 2
4574+
4575 Function: "cosh":
4576 ildouble: 1
4577 ldouble: 1
4578
4579+Function: "cosh_downward":
4580+float: 1
4581+ifloat: 1
4582+ildouble: 5269156250720
4583+ldouble: 5269156250720
4584+
4585+Function: "cosh_tonearest":
4586+ildouble: 5269156250719
4587+ldouble: 5269156250719
4588+
4589+Function: "cosh_towardzero":
4590+float: 1
4591+ifloat: 1
4592+ildouble: 5269156250720
4593+ldouble: 5269156250720
4594+
4595+Function: "cosh_upward":
4596+ildouble: 5269156250719
4597+ldouble: 5269156250719
4598+
4599 Function: Real part of "cpow":
4600 double: 2
4601 float: 5
4602@@ -1113,10 +1463,6 @@ ifloat: 2
4603 ildouble: 2
4604 ldouble: 2
4605
4606-Function: Imaginary part of "cproj":
4607-ildouble: 1
4608-ldouble: 1
4609-
4610 Function: Real part of "csin":
4611 ildouble: 1
4612 ldouble: 1
4613@@ -1146,8 +1492,6 @@ ildouble: 1
4614 ldouble: 1
4615
4616 Function: Real part of "ctan":
4617-double: 1
4618-idouble: 1
4619 ildouble: 1
4620 ldouble: 1
4621
4622@@ -1201,6 +1545,28 @@ Function: "exp2":
4623 ildouble: 2
4624 ldouble: 2
4625
4626+Function: "exp_downward":
4627+float: 1
4628+ifloat: 1
4629+ildouble: 1
4630+ldouble: 1
4631+
4632+Function: "exp_tonearest":
4633+ildouble: 1
4634+ldouble: 1
4635+
4636+Function: "exp_towardzero":
4637+float: 1
4638+ifloat: 1
4639+ildouble: 1
4640+ldouble: 1
4641+
4642+Function: "exp_upward":
4643+float: 1
4644+ifloat: 1
4645+ildouble: 1
4646+ldouble: 1
4647+
4648 Function: "expm1":
4649 double: 1
4650 float: 1
4651@@ -1218,10 +1584,10 @@ ildouble: 1
4652 ldouble: 1
4653
4654 Function: "j0":
4655-double: 3
4656-float: 2
4657-idouble: 3
4658-ifloat: 2
4659+double: 2
4660+float: 1
4661+idouble: 2
4662+ifloat: 1
4663 ildouble: 1
4664 ldouble: 1
4665
4666@@ -1235,9 +1601,9 @@ ldouble: 1
4667
4668 Function: "jn":
4669 double: 3
4670-float: 4
4671+float: 3
4672 idouble: 3
4673-ifloat: 4
4674+ifloat: 3
4675 ildouble: 4
4676 ldouble: 4
4677
4678@@ -1264,8 +1630,6 @@ ldouble: 1
4679 Function: "log1p":
4680 float: 1
4681 ifloat: 1
4682-ildouble: 1
4683-ldouble: 1
4684
4685 Function: "log2":
4686 ildouble: 1
4687@@ -1275,10 +1639,52 @@ Function: "pow":
4688 ildouble: 1
4689 ldouble: 1
4690
4691+Function: "pow_downward":
4692+float: 1
4693+ifloat: 1
4694+ildouble: 1
4695+ldouble: 1
4696+
4697+Function: "pow_towardzero":
4698+float: 1
4699+ifloat: 1
4700+ildouble: 1
4701+ldouble: 1
4702+
4703+Function: "pow_upward":
4704+float: 1
4705+ifloat: 1
4706+ildouble: 1
4707+ldouble: 1
4708+
4709 Function: "sin":
4710 ildouble: 1
4711 ldouble: 1
4712
4713+Function: "sin_downward":
4714+float: 1
4715+ifloat: 1
4716+ildouble: 4
4717+ldouble: 4
4718+
4719+Function: "sin_tonearest":
4720+float: 1
4721+ifloat: 1
4722+ildouble: 1
4723+ldouble: 1
4724+
4725+Function: "sin_towardzero":
4726+float: 1
4727+ifloat: 1
4728+ildouble: 2
4729+ldouble: 2
4730+
4731+Function: "sin_upward":
4732+float: 2
4733+ifloat: 2
4734+ildouble: 2
4735+ldouble: 2
4736+
4737 Function: "sincos":
4738 double: 1
4739 float: 1
4740@@ -1291,12 +1697,54 @@ Function: "sinh":
4741 ildouble: 1
4742 ldouble: 1
4743
4744+Function: "sinh_downward":
4745+float: 1
4746+ifloat: 1
4747+ildouble: 5269156250718
4748+ldouble: 5269156250718
4749+
4750+Function: "sinh_tonearest":
4751+ildouble: 5269156250719
4752+ldouble: 5269156250719
4753+
4754+Function: "sinh_towardzero":
4755+float: 1
4756+ifloat: 1
4757+ildouble: 5269156250718
4758+ldouble: 5269156250718
4759+
4760+Function: "sinh_upward":
4761+ildouble: 5269156250719
4762+ldouble: 5269156250719
4763+
4764 Function: "tan":
4765 double: 1
4766 idouble: 1
4767 ildouble: 1
4768 ldouble: 1
4769
4770+Function: "tan_downward":
4771+float: 1
4772+ifloat: 1
4773+ildouble: 2
4774+ldouble: 2
4775+
4776+Function: "tan_tonearest":
4777+ildouble: 1
4778+ldouble: 1
4779+
4780+Function: "tan_towardzero":
4781+float: 1
4782+ifloat: 1
4783+ildouble: 3
4784+ldouble: 3
4785+
4786+Function: "tan_upward":
4787+float: 1
4788+ifloat: 1
4789+ildouble: 3
4790+ldouble: 3
4791+
4792 Function: "tanh":
4793 ildouble: 1
4794 ldouble: 1
4795diff -Nrup a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps
4796--- a/sysdeps/s390/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
4797+++ b/sysdeps/s390/fpu/libm-test-ulps 2012-08-06 09:54:38.324772546 -0600
4798@@ -31,16 +31,9 @@ ildouble: 1
4799 ldouble: 1
4800
4801 # cacosh
4802-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
4803-double: 1
4804-float: 7
4805-idouble: 1
4806-ifloat: 7
4807 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
4808-double: 1
4809-float: 3
4810-idouble: 1
4811-ifloat: 3
4812+float: 1
4813+ifloat: 1
4814 ildouble: 1
4815 ldouble: 1
4816
4817@@ -83,17 +76,11 @@ ildouble: 1
4818 ldouble: 1
4819
4820 # catan
4821-Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
4822-float: 3
4823-ifloat: 3
4824 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
4825 double: 1
4826 float: 1
4827 idouble: 1
4828 ifloat: 1
4829-Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
4830-float: 4
4831-ifloat: 4
4832 Test "Imaginary part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
4833 ildouble: 1
4834 ldouble: 1
4835@@ -102,17 +89,12 @@ ldouble: 1
4836 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
4837 double: 4
4838 idouble: 4
4839-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
4840-float: 4
4841-ifloat: 4
4842 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
4843 double: 1
4844 idouble: 1
4845 ildouble: 1
4846 ldouble: 1
4847 Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
4848-float: 6
4849-ifloat: 6
4850 ildouble: 1
4851 ldouble: 1
4852
4853@@ -185,9 +167,6 @@ ildouble: 1
4854 ldouble: 1
4855
4856 # clog
4857-Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
4858-float: 3
4859-ifloat: 3
4860 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
4861 float: 1
4862 ifloat: 1
4863@@ -210,9 +189,7 @@ ildouble: 1
4864 ldouble: 1
4865 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
4866 double: 1
4867-float: 5
4868 idouble: 1
4869-ifloat: 5
4870 ildouble: 1
4871 ldouble: 1
4872 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
4873@@ -288,9 +265,7 @@ ifloat: 1
4874 # cos
4875 Test "cos (M_PI_6l * 2.0) == 0.5":
4876 double: 1
4877-float: 1
4878 idouble: 1
4879-ifloat: 1
4880 ildouble: 1
4881 ldouble: 1
4882 Test "cos (M_PI_6l * 4.0) == -0.5":
4883@@ -300,11 +275,159 @@ idouble: 2
4884 ifloat: 1
4885 ildouble: 1
4886 ldouble: 1
4887-Test "cos (pi/2) == 0":
4888-double: 1
4889+
4890+# cos_downward
4891+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
4892+float: 1
4893+ifloat: 1
4894+ildouble: 1
4895+ldouble: 1
4896+Test "cos_downward (10) == -0.8390715290764524522588639478240648345199":
4897+ildouble: 1
4898+ldouble: 1
4899+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
4900+float: 1
4901+ifloat: 1
4902+ildouble: 1
4903+ldouble: 1
4904+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
4905+float: 1
4906+ifloat: 1
4907+ildouble: 1
4908+ldouble: 1
4909+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
4910+float: 1
4911+ifloat: 1
4912+ildouble: 1
4913+ldouble: 1
4914+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
4915+float: 1
4916+ifloat: 1
4917+ildouble: 1
4918+ldouble: 1
4919+Test "cos_downward (6) == 0.9601702866503660205456522979229244054519":
4920+ildouble: 1
4921+ldouble: 1
4922+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
4923+float: 1
4924+ifloat: 1
4925+ildouble: 1
4926+ldouble: 1
4927+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
4928+float: 1
4929+ifloat: 1
4930+ildouble: 2
4931+ldouble: 2
4932+
4933+# cos_tonearest
4934+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
4935+float: 1
4936+ifloat: 1
4937+
4938+# cos_towardzero
4939+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
4940+ildouble: 1
4941+ldouble: 1
4942+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
4943+ildouble: 1
4944+ldouble: 1
4945+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
4946+float: 1
4947+ifloat: 1
4948+ildouble: 1
4949+ldouble: 1
4950+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
4951+float: 1
4952+ifloat: 1
4953+ildouble: 1
4954+ldouble: 1
4955+Test "cos_towardzero (4) == -0.6536436208636119146391681830977503814241":
4956+ildouble: 1
4957+ldouble: 1
4958+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
4959+float: 1
4960+ifloat: 1
4961+ildouble: 1
4962+ldouble: 1
4963+Test "cos_towardzero (6) == 0.9601702866503660205456522979229244054519":
4964+ildouble: 1
4965+ldouble: 1
4966+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
4967+float: 1
4968+ifloat: 1
4969+ildouble: 1
4970+ldouble: 1
4971+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
4972+float: 1
4973+ifloat: 1
4974+ildouble: 2
4975+ldouble: 2
4976+
4977+# cos_upward
4978+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
4979+float: 1
4980+ifloat: 1
4981+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
4982+float: 1
4983+ifloat: 1
4984+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
4985+float: 1
4986+ifloat: 1
4987+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
4988+float: 2
4989+ifloat: 2
4990+ildouble: 1
4991+ldouble: 1
4992+
4993+# cosh_downward
4994+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
4995+float: 1
4996+ifloat: 1
4997+ildouble: 1
4998+ldouble: 1
4999+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
5000+float: 1
5001+ifloat: 1
5002+ildouble: 1
5003+ldouble: 1
5004+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
5005+float: 1
5006+ifloat: 1
5007+ildouble: 1
5008+ldouble: 1
5009+
5010+# cosh_tonearest
5011+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
5012+ildouble: 1
5013+ldouble: 1
5014+
5015+# cosh_towardzero
5016+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
5017+float: 1
5018+ifloat: 1
5019+ildouble: 1
5020+ldouble: 1
5021+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
5022+float: 1
5023+ifloat: 1
5024+ildouble: 1
5025+ldouble: 1
5026+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
5027 float: 1
5028-idouble: 1
5029 ifloat: 1
5030+ildouble: 1
5031+ldouble: 1
5032+
5033+# cosh_upward
5034+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997":
5035+ildouble: 1
5036+ldouble: 1
5037+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
5038+ildouble: 1
5039+ldouble: 1
5040+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
5041+ildouble: 1
5042+ldouble: 1
5043
5044 # cpow
5045 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
5046@@ -393,8 +516,6 @@ ldouble: 1
5047
5048 # ctan
5049 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
5050-double: 1
5051-idouble: 1
5052 ildouble: 1
5053 ldouble: 1
5054 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
5055@@ -467,6 +588,37 @@ Test "exp2 (10) == 1024":
5056 ildouble: 2
5057 ldouble: 2
5058
5059+# exp_downward
5060+Test "exp_downward (2) == e^2":
5061+float: 1
5062+ifloat: 1
5063+ildouble: 1
5064+ldouble: 1
5065+Test "exp_downward (3) == e^3":
5066+float: 1
5067+ifloat: 1
5068+ildouble: 1
5069+ldouble: 1
5070+
5071+# exp_towardzero
5072+Test "exp_towardzero (2) == e^2":
5073+float: 1
5074+ifloat: 1
5075+ildouble: 1
5076+ldouble: 1
5077+Test "exp_towardzero (3) == e^3":
5078+float: 1
5079+ifloat: 1
5080+ildouble: 1
5081+ldouble: 1
5082+
5083+# exp_upward
5084+Test "exp_upward (1) == e":
5085+float: 1
5086+ifloat: 1
5087+ildouble: 1
5088+ldouble: 1
5089+
5090 # expm1
5091 Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
5092 double: 1
5093@@ -513,29 +665,27 @@ ifloat: 1
5094 # j0
5095 Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
5096 double: 1
5097-float: 2
5098+float: 1
5099 idouble: 1
5100-ifloat: 2
5101+ifloat: 1
5102 Test "j0 (0.75) == 0.864242275166648623555731103820923211":
5103 float: 1
5104 ifloat: 1
5105 Test "j0 (10.0) == -0.245935764451348335197760862485328754":
5106-double: 3
5107+double: 2
5108 float: 1
5109-idouble: 3
5110+idouble: 2
5111 ifloat: 1
5112 ildouble: 2
5113 ldouble: 2
5114 Test "j0 (2.0) == 0.223890779141235668051827454649948626":
5115-float: 2
5116-ifloat: 2
5117 ildouble: 2
5118 ldouble: 2
5119 Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
5120 double: 1
5121-float: 2
5122+float: 1
5123 idouble: 1
5124-ifloat: 2
5125+ifloat: 1
5126 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
5127 float: 1
5128 ifloat: 1
5129@@ -569,29 +719,27 @@ ldouble: 4
5130 # jn
5131 Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
5132 double: 1
5133-float: 2
5134+float: 1
5135 idouble: 1
5136-ifloat: 2
5137+ifloat: 1
5138 Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
5139 float: 1
5140 ifloat: 1
5141 Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
5142-double: 3
5143+double: 2
5144 float: 1
5145-idouble: 3
5146+idouble: 2
5147 ifloat: 1
5148 ildouble: 2
5149 ldouble: 2
5150 Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
5151-float: 2
5152-ifloat: 2
5153 ildouble: 2
5154 ldouble: 2
5155 Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
5156 double: 1
5157-float: 2
5158+float: 1
5159 idouble: 1
5160-ifloat: 2
5161+ifloat: 1
5162 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
5163 float: 1
5164 ifloat: 1
5165@@ -640,15 +788,13 @@ Test "jn (10, 1.0) == 0.2630615123687453
5166 ildouble: 1
5167 ldouble: 1
5168 Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
5169-double: 4
5170-float: 3
5171-idouble: 4
5172-ifloat: 3
5173+float: 1
5174+ifloat: 1
5175 ildouble: 2
5176 ldouble: 2
5177 Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
5178-float: 4
5179-ifloat: 4
5180+float: 3
5181+ifloat: 3
5182 Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
5183 double: 1
5184 float: 1
5185@@ -661,16 +807,16 @@ idouble: 1
5186 ifloat: 1
5187 Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
5188 double: 3
5189-float: 2
5190+float: 1
5191 idouble: 3
5192-ifloat: 2
5193+ifloat: 1
5194 ildouble: 2
5195 ldouble: 2
5196 Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
5197 double: 1
5198-float: 2
5199+float: 1
5200 idouble: 1
5201-ifloat: 2
5202+ifloat: 1
5203
5204 # lgamma
5205 Test "lgamma (-0.5) == log(2*sqrt(pi))":
5206@@ -713,71 +859,315 @@ Test "log2 (0.75) == -.41503749927884381
5207 ildouble: 1
5208 ldouble: 1
5209
5210-# sincos
5211-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
5212-double: 1
5213+# pow_downward
5214+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
5215 float: 1
5216-idouble: 1
5217 ifloat: 1
5218-ildouble: 1
5219-ldouble: 1
5220-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
5221-double: 1
5222+
5223+# pow_towardzero
5224+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
5225+float: 1
5226+ifloat: 1
5227+
5228+# pow_upward
5229+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
5230 float: 1
5231-idouble: 1
5232 ifloat: 1
5233 ildouble: 1
5234 ldouble: 1
5235-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
5236-double: 1
5237+
5238+# sin_downward
5239+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
5240+ildouble: 1
5241+ldouble: 1
5242+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
5243 float: 1
5244-idouble: 1
5245 ifloat: 1
5246-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
5247+Test "sin_downward (2) == 0.9092974268256816953960198659117448427023":
5248+ildouble: 1
5249+ldouble: 1
5250+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
5251 float: 1
5252 ifloat: 1
5253-
5254-# sqrt
5255-Test "sqrt (2) == M_SQRT2l":
5256 ildouble: 1
5257 ldouble: 1
5258-
5259-# tan
5260-Test "tan (pi/4) == 1":
5261-double: 1
5262-idouble: 1
5263-
5264-# tanh
5265-Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
5266+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
5267 ildouble: 1
5268 ldouble: 1
5269-Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
5270+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
5271+float: 1
5272+ifloat: 1
5273 ildouble: 1
5274 ldouble: 1
5275-Test "tanh (0.75) == 0.635148952387287319214434357312496495":
5276+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
5277+float: 1
5278+ifloat: 1
5279 ildouble: 1
5280 ldouble: 1
5281-Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
5282+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
5283 ildouble: 1
5284 ldouble: 1
5285
5286-# tgamma
5287-Test "tgamma (-0.5) == -2 sqrt (pi)":
5288-double: 1
5289+# sin_tonearest
5290+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
5291 float: 1
5292-idouble: 1
5293 ifloat: 1
5294 ildouble: 1
5295 ldouble: 1
5296-Test "tgamma (0.5) == sqrt (pi)":
5297+Test "sin_tonearest (3) == 0.1411200080598672221007448028081102798469":
5298+ildouble: 1
5299+ldouble: 1
5300+Test "sin_tonearest (6) == -0.2794154981989258728115554466118947596280":
5301+ildouble: 1
5302+ldouble: 1
5303+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
5304+ildouble: 1
5305+ldouble: 1
5306+
5307+# sin_towardzero
5308+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
5309 float: 1
5310 ifloat: 1
5311-Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
5312-double: 1
5313+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
5314 float: 1
5315-idouble: 1
5316 ifloat: 1
5317-Test "tgamma (4) == 6":
5318+Test "sin_towardzero (2) == 0.9092974268256816953960198659117448427023":
5319+ildouble: 1
5320+ldouble: 1
5321+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
5322+ildouble: 1
5323+ldouble: 1
5324+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
5325+float: 1
5326+ifloat: 1
5327+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
5328+float: 1
5329+ifloat: 1
5330+ildouble: 1
5331+ldouble: 1
5332+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
5333+ildouble: 1
5334+ldouble: 1
5335+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
5336+ildouble: 1
5337+ldouble: 1
5338+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
5339+float: 1
5340+ifloat: 1
5341+ildouble: 2
5342+ldouble: 2
5343+
5344+# sin_upward
5345+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
5346+float: 1
5347+ifloat: 1
5348+ildouble: 1
5349+ldouble: 1
5350+Test "sin_upward (10) == -0.5440211108893698134047476618513772816836":
5351+ildouble: 1
5352+ldouble: 1
5353+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
5354+float: 2
5355+ifloat: 2
5356+Test "sin_upward (3) == 0.1411200080598672221007448028081102798469":
5357+ildouble: 1
5358+ldouble: 1
5359+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
5360+float: 1
5361+ifloat: 1
5362+ildouble: 1
5363+ldouble: 1
5364+Test "sin_upward (7) == 0.6569865987187890903969990915936351779369":
5365+ildouble: 1
5366+ldouble: 1
5367+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
5368+float: 1
5369+ifloat: 1
5370+ildouble: 1
5371+ldouble: 1
5372+
5373+# sincos
5374+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
5375+double: 1
5376+idouble: 1
5377+ildouble: 1
5378+ldouble: 1
5379+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
5380+double: 1
5381+float: 1
5382+idouble: 1
5383+ifloat: 1
5384+ildouble: 1
5385+ldouble: 1
5386+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
5387+float: 1
5388+ifloat: 1
5389+
5390+# sinh_downward
5391+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
5392+float: 1
5393+ifloat: 1
5394+ildouble: 1
5395+ldouble: 1
5396+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
5397+float: 1
5398+ifloat: 1
5399+ildouble: 2
5400+ldouble: 2
5401+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
5402+float: 1
5403+ifloat: 1
5404+ildouble: 1
5405+ldouble: 1
5406+
5407+# sinh_towardzero
5408+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
5409+float: 1
5410+ifloat: 1
5411+ildouble: 1
5412+ldouble: 1
5413+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
5414+float: 1
5415+ifloat: 1
5416+ildouble: 2
5417+ldouble: 2
5418+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
5419+float: 1
5420+ifloat: 1
5421+
5422+# sinh_upward
5423+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
5424+ildouble: 1
5425+ldouble: 1
5426+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
5427+ildouble: 1
5428+ldouble: 1
5429+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
5430+ildouble: 1
5431+ldouble: 1
5432+
5433+# sqrt
5434+Test "sqrt (2) == M_SQRT2l":
5435+ildouble: 1
5436+ldouble: 1
5437+
5438+# tan_downward
5439+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
5440+float: 1
5441+ifloat: 1
5442+ildouble: 1
5443+ldouble: 1
5444+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
5445+float: 1
5446+ifloat: 1
5447+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
5448+float: 1
5449+ifloat: 1
5450+ildouble: 1
5451+ldouble: 1
5452+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
5453+float: 1
5454+ifloat: 1
5455+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
5456+float: 1
5457+ifloat: 1
5458+ildouble: 1
5459+ldouble: 1
5460+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
5461+float: 1
5462+ifloat: 1
5463+
5464+# tan_towardzero
5465+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
5466+float: 1
5467+ifloat: 1
5468+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
5469+float: 1
5470+ifloat: 1
5471+ildouble: 1
5472+ldouble: 1
5473+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
5474+float: 1
5475+ifloat: 1
5476+ildouble: 1
5477+ldouble: 1
5478+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
5479+float: 1
5480+ifloat: 1
5481+ildouble: 1
5482+ldouble: 1
5483+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
5484+ildouble: 1
5485+ldouble: 1
5486+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
5487+float: 1
5488+ifloat: 1
5489+ildouble: 1
5490+ldouble: 1
5491+
5492+# tan_upward
5493+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
5494+float: 1
5495+ifloat: 1
5496+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
5497+float: 1
5498+ifloat: 1
5499+ildouble: 1
5500+ldouble: 1
5501+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
5502+ildouble: 1
5503+ldouble: 1
5504+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
5505+float: 1
5506+ifloat: 1
5507+ildouble: 1
5508+ldouble: 1
5509+Test "tan_upward (4) == 1.1578212823495775831373424182673239231198":
5510+ildouble: 1
5511+ldouble: 1
5512+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
5513+float: 1
5514+ifloat: 1
5515+ildouble: 1
5516+ldouble: 1
5517+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
5518+ildouble: 1
5519+ldouble: 1
5520+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
5521+ildouble: 1
5522+ldouble: 1
5523+
5524+# tanh
5525+Test "tanh (-0.75) == -0.635148952387287319214434357312496495":
5526+ildouble: 1
5527+ldouble: 1
5528+Test "tanh (-1.0) == -0.7615941559557648881194582826047935904":
5529+ildouble: 1
5530+ldouble: 1
5531+Test "tanh (0.75) == 0.635148952387287319214434357312496495":
5532+ildouble: 1
5533+ldouble: 1
5534+Test "tanh (1.0) == 0.7615941559557648881194582826047935904":
5535+ildouble: 1
5536+ldouble: 1
5537+
5538+# tgamma
5539+Test "tgamma (-0.5) == -2 sqrt (pi)":
5540+double: 1
5541+float: 1
5542+idouble: 1
5543+ifloat: 1
5544+ildouble: 1
5545+ldouble: 1
5546+Test "tgamma (0.5) == sqrt (pi)":
5547+float: 1
5548+ifloat: 1
5549+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
5550+double: 1
5551+float: 1
5552+idouble: 1
5553+ifloat: 1
5554+Test "tgamma (4) == 6":
5555 ildouble: 1
5556 ldouble: 1
5557
5558@@ -917,17 +1307,13 @@ ifloat: 2
5559 ildouble: 5
5560 ldouble: 5
5561 Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
5562-double: 1
5563 float: 2
5564-idouble: 1
5565 ifloat: 2
5566 ildouble: 1
5567 ldouble: 1
5568 Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
5569 double: 2
5570-float: 2
5571 idouble: 2
5572-ifloat: 2
5573 ildouble: 2
5574 ldouble: 2
5575 Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
5576@@ -941,9 +1327,7 @@ Test "yn (3, 0.125) == -2612.69757350066
5577 double: 1
5578 idouble: 1
5579 Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
5580-double: 1
5581 float: 1
5582-idouble: 1
5583 ifloat: 1
5584 ildouble: 2
5585 ldouble: 2
5586@@ -973,17 +1357,9 @@ Function: Imaginary part of "cacos":
5587 ildouble: 1
5588 ldouble: 1
5589
5590-Function: Real part of "cacosh":
5591-double: 1
5592-float: 7
5593-idouble: 1
5594-ifloat: 7
5595-
5596 Function: Imaginary part of "cacosh":
5597-double: 1
5598-float: 3
5599-idouble: 1
5600-ifloat: 3
5601+float: 1
5602+ifloat: 1
5603 ildouble: 1
5604 ldouble: 1
5605
5606@@ -1013,10 +1389,6 @@ ifloat: 6
5607 ildouble: 2
5608 ldouble: 2
5609
5610-Function: Real part of "catan":
5611-float: 4
5612-ifloat: 4
5613-
5614 Function: Imaginary part of "catan":
5615 double: 1
5616 float: 1
5617@@ -1032,8 +1404,6 @@ ildouble: 1
5618 ldouble: 1
5619
5620 Function: Imaginary part of "catanh":
5621-float: 6
5622-ifloat: 6
5623 ildouble: 1
5624 ldouble: 1
5625
5626@@ -1089,10 +1459,6 @@ ifloat: 1
5627 ildouble: 1
5628 ldouble: 1
5629
5630-Function: Imaginary part of "clog":
5631-float: 3
5632-ifloat: 3
5633-
5634 Function: Real part of "clog10":
5635 float: 1
5636 ifloat: 1
5637@@ -1101,9 +1467,9 @@ ldouble: 1
5638
5639 Function: Imaginary part of "clog10":
5640 double: 1
5641-float: 5
5642+float: 1
5643 idouble: 1
5644-ifloat: 5
5645+ifloat: 1
5646 ildouble: 1
5647 ldouble: 1
5648
5649@@ -1115,6 +1481,48 @@ ifloat: 1
5650 ildouble: 1
5651 ldouble: 1
5652
5653+Function: "cos_downward":
5654+float: 1
5655+ifloat: 1
5656+ildouble: 2
5657+ldouble: 2
5658+
5659+Function: "cos_tonearest":
5660+float: 1
5661+ifloat: 1
5662+
5663+Function: "cos_towardzero":
5664+float: 1
5665+ifloat: 1
5666+ildouble: 2
5667+ldouble: 2
5668+
5669+Function: "cos_upward":
5670+float: 2
5671+ifloat: 2
5672+ildouble: 1
5673+ldouble: 1
5674+
5675+Function: "cosh_downward":
5676+float: 1
5677+ifloat: 1
5678+ildouble: 1
5679+ldouble: 1
5680+
5681+Function: "cosh_tonearest":
5682+ildouble: 1
5683+ldouble: 1
5684+
5685+Function: "cosh_towardzero":
5686+float: 1
5687+ifloat: 1
5688+ildouble: 1
5689+ldouble: 1
5690+
5691+Function: "cosh_upward":
5692+ildouble: 1
5693+ldouble: 1
5694+
5695 Function: Real part of "cpow":
5696 double: 2
5697 float: 4
5698@@ -1162,8 +1570,6 @@ ildouble: 1
5699 ldouble: 1
5700
5701 Function: Real part of "ctan":
5702-double: 1
5703-idouble: 1
5704 ildouble: 1
5705 ldouble: 1
5706
5707@@ -1211,6 +1617,24 @@ Function: "exp2":
5708 ildouble: 2
5709 ldouble: 2
5710
5711+Function: "exp_downward":
5712+float: 1
5713+ifloat: 1
5714+ildouble: 1
5715+ldouble: 1
5716+
5717+Function: "exp_towardzero":
5718+float: 1
5719+ifloat: 1
5720+ildouble: 1
5721+ldouble: 1
5722+
5723+Function: "exp_upward":
5724+float: 1
5725+ifloat: 1
5726+ildouble: 1
5727+ldouble: 1
5728+
5729 Function: "expm1":
5730 double: 1
5731 float: 1
5732@@ -1228,10 +1652,10 @@ float: 1
5733 ifloat: 1
5734
5735 Function: "j0":
5736-double: 3
5737-float: 2
5738-idouble: 3
5739-ifloat: 2
5740+double: 2
5741+float: 1
5742+idouble: 2
5743+ifloat: 1
5744 ildouble: 2
5745 ldouble: 2
5746
5747@@ -1244,10 +1668,10 @@ ildouble: 4
5748 ldouble: 4
5749
5750 Function: "jn":
5751-double: 4
5752-float: 4
5753-idouble: 4
5754-ifloat: 4
5755+double: 3
5756+float: 3
5757+idouble: 3
5758+ifloat: 3
5759 ildouble: 4
5760 ldouble: 4
5761
5762@@ -1277,6 +1701,44 @@ Function: "log2":
5763 ildouble: 1
5764 ldouble: 1
5765
5766+Function: "pow_downward":
5767+float: 1
5768+ifloat: 1
5769+
5770+Function: "pow_towardzero":
5771+float: 1
5772+ifloat: 1
5773+
5774+Function: "pow_upward":
5775+float: 1
5776+ifloat: 1
5777+ildouble: 1
5778+ldouble: 1
5779+
5780+Function: "sin_downward":
5781+float: 1
5782+ifloat: 1
5783+ildouble: 1
5784+ldouble: 1
5785+
5786+Function: "sin_tonearest":
5787+float: 1
5788+ifloat: 1
5789+ildouble: 1
5790+ldouble: 1
5791+
5792+Function: "sin_towardzero":
5793+float: 1
5794+ifloat: 1
5795+ildouble: 2
5796+ldouble: 2
5797+
5798+Function: "sin_upward":
5799+float: 2
5800+ifloat: 2
5801+ildouble: 1
5802+ldouble: 1
5803+
5804 Function: "sincos":
5805 double: 1
5806 float: 1
5807@@ -1285,6 +1747,22 @@ ifloat: 1
5808 ildouble: 1
5809 ldouble: 1
5810
5811+Function: "sinh_downward":
5812+float: 1
5813+ifloat: 1
5814+ildouble: 2
5815+ldouble: 2
5816+
5817+Function: "sinh_towardzero":
5818+float: 1
5819+ifloat: 1
5820+ildouble: 2
5821+ldouble: 2
5822+
5823+Function: "sinh_upward":
5824+ildouble: 1
5825+ldouble: 1
5826+
5827 Function: "sqrt":
5828 ildouble: 1
5829 ldouble: 1
5830@@ -1293,6 +1771,24 @@ Function: "tan":
5831 double: 1
5832 idouble: 1
5833
5834+Function: "tan_downward":
5835+float: 1
5836+ifloat: 1
5837+ildouble: 1
5838+ldouble: 1
5839+
5840+Function: "tan_towardzero":
5841+float: 1
5842+ifloat: 1
5843+ildouble: 1
5844+ldouble: 1
5845+
5846+Function: "tan_upward":
5847+float: 1
5848+ifloat: 1
5849+ildouble: 1
5850+ldouble: 1
5851+
5852 Function: "tanh":
5853 ildouble: 1
5854 ldouble: 1
5855diff -Nrup a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps
5856--- a/sysdeps/x86_64/fpu/libm-test-ulps 2010-05-04 05:27:23.000000000 -0600
5857+++ b/sysdeps/x86_64/fpu/libm-test-ulps 2012-08-06 11:02:14.602759422 -0600
5858@@ -42,26 +42,13 @@ ldouble: 1
5859
5860 # cacos
5861 Test "Imaginary part of: cacos (0.75 + 1.25 i) == 1.11752014915610270578240049553777969 - 1.13239363160530819522266333696834467 i":
5862-float: 1
5863-ifloat: 1
5864 ildouble: 2
5865 ldouble: 2
5866
5867 # cacosh
5868-Test "Real part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
5869-double: 1
5870-float: 7
5871-idouble: 1
5872-ifloat: 7
5873-ildouble: 6
5874-ldouble: 6
5875 Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
5876-double: 1
5877-float: 3
5878-idouble: 1
5879-ifloat: 3
5880-ildouble: 1
5881-ldouble: 1
5882+float: 1
5883+ifloat: 1
5884 Test "Real part of: cacosh (0.75 + 1.25 i) == 1.13239363160530819522266333696834467 + 1.11752014915610270578240049553777969 i":
5885 ildouble: 1
5886 ldouble: 1
5887@@ -75,8 +62,6 @@ ifloat: 1
5888 ildouble: 2
5889 ldouble: 2
5890 Test "Imaginary part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
5891-float: 1
5892-ifloat: 1
5893 ildouble: 2
5894 ldouble: 2
5895
5896@@ -103,21 +88,15 @@ double: 1
5897 float: 1
5898 idouble: 1
5899 ifloat: 1
5900-ldouble: 1
5901 ildouble: 1
5902+ldouble: 1
5903
5904 # catan
5905-Test "Real part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
5906-float: 3
5907-ifloat: 3
5908 Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
5909 double: 1
5910 float: 1
5911 idouble: 1
5912 ifloat: 1
5913-Test "Real part of: catan (0.75 + 1.25 i) == 1.10714871779409050301706546017853704 + 0.549306144334054845697622618461262852 i":
5914-float: 4
5915-ifloat: 4
5916
5917 # catanh
5918 Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
5919@@ -125,15 +104,9 @@ double: 4
5920 idouble: 4
5921 ildouble: 1
5922 ldouble: 1
5923-Test "Imaginary part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
5924-float: 4
5925-ifloat: 4
5926 Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
5927 double: 1
5928 idouble: 1
5929-Test "Imaginary part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
5930-float: 6
5931-ifloat: 6
5932
5933 # cbrt
5934 Test "cbrt (-0.001) == -0.1":
5935@@ -152,14 +125,9 @@ ildouble: 1
5936 ldouble: 1
5937
5938 # ccos
5939-Test "Real part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
5940-double: 1
5941-idouble: 1
5942 Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
5943 float: 1
5944 ifloat: 1
5945-ildouble: 1
5946-ldouble: 1
5947 Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
5948 double: 1
5949 float: 1
5950@@ -168,19 +136,17 @@ ifloat: 1
5951 ildouble: 1
5952 ldouble: 1
5953 Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
5954-ildouble: 1
5955-ldouble: 1
5956 float: 1
5957 ifloat: 1
5958+ildouble: 1
5959+ldouble: 1
5960
5961 # ccosh
5962 Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
5963 float: 1
5964 ifloat: 1
5965 Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
5966-double: 1
5967 float: 1
5968-idouble: 1
5969 ifloat: 1
5970 ildouble: 1
5971 ldouble: 1
5972@@ -205,9 +171,6 @@ ildouble: 1
5973 ldouble: 1
5974
5975 # clog
5976-Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
5977-float: 3
5978-ifloat: 3
5979 Test "Real part of: clog (0.75 + 1.25 i) == 0.376885901188190075998919126749298416 + 1.03037682652431246378774332703115153 i":
5980 float: 1
5981 ifloat: 1
5982@@ -227,11 +190,7 @@ idouble: 1
5983 ifloat: 1
5984 Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
5985 double: 1
5986-float: 5
5987 idouble: 1
5988-ifloat: 5
5989-ildouble: 1
5990-ldouble: 1
5991 Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
5992 double: 1
5993 float: 1
5994@@ -276,9 +235,7 @@ float: 1
5995 idouble: 1
5996 ifloat: 1
5997 Test "Real part of: clog10 (0.75 + 1.25 i) == 0.163679467193165171449476605077428975 + 0.447486970040493067069984724340855636 i":
5998-double: 1
5999 float: 1
6000-idouble: 1
6001 ifloat: 1
6002 ildouble: 1
6003 ldouble: 1
6004@@ -306,33 +263,164 @@ ifloat: 1
6005 # cos
6006 Test "cos (M_PI_6l * 2.0) == 0.5":
6007 double: 1
6008-float: 1
6009 idouble: 1
6010-ifloat: 1
6011 Test "cos (M_PI_6l * 4.0) == -0.5":
6012 double: 2
6013 float: 1
6014 idouble: 2
6015 ifloat: 1
6016+
6017+# cos_downward
6018+Test "cos_downward (1) == 0.5403023058681397174009366074429766037323":
6019+float: 1
6020+ifloat: 1
6021 ildouble: 1
6022 ldouble: 1
6023-Test "cos (pi/2) == 0":
6024-double: 1
6025+Test "cos_downward (2) == -0.4161468365471423869975682295007621897660":
6026+float: 1
6027+ifloat: 1
6028+Test "cos_downward (3) == -0.9899924966004454572715727947312613023937":
6029+float: 1
6030+ifloat: 1
6031+Test "cos_downward (4) == -0.6536436208636119146391681830977503814241":
6032 float: 1
6033-idouble: 1
6034 ifloat: 1
6035 ildouble: 1
6036 ldouble: 1
6037-Test "cos (0.80190127184058835) == 0.69534156199418473":
6038-double: 1
6039-idouble: 1
6040+Test "cos_downward (5) == 0.2836621854632262644666391715135573083344":
6041+float: 1
6042+ifloat: 1
6043+Test "cos_downward (7) == 0.7539022543433046381411975217191820122183":
6044+float: 1
6045+ifloat: 1
6046+ildouble: 1
6047+ldouble: 1
6048+Test "cos_downward (8) == -0.1455000338086135258688413818311946826093":
6049+float: 1
6050+ifloat: 1
6051+ildouble: 1
6052+ldouble: 1
6053+Test "cos_downward (9) == -0.9111302618846769883682947111811653112463":
6054+ildouble: 1
6055+ldouble: 1
6056+
6057+# cos_tonearest
6058+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
6059+float: 1
6060+ifloat: 1
6061+Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093":
6062+ildouble: 1
6063+ldouble: 1
6064+Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463":
6065+ildouble: 1
6066+ldouble: 1
6067+
6068+# cos_towardzero
6069+Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
6070+ildouble: 1
6071+ldouble: 1
6072+Test "cos_towardzero (10) == -0.8390715290764524522588639478240648345199":
6073+ildouble: 1
6074+ldouble: 1
6075+Test "cos_towardzero (2) == -0.4161468365471423869975682295007621897660":
6076+float: 1
6077+ifloat: 1
6078+ildouble: 1
6079+ldouble: 1
6080+Test "cos_towardzero (3) == -0.9899924966004454572715727947312613023937":
6081+float: 1
6082+ifloat: 1
6083+ildouble: 1
6084+ldouble: 1
6085+Test "cos_towardzero (5) == 0.2836621854632262644666391715135573083344":
6086+float: 1
6087+ifloat: 1
6088+Test "cos_towardzero (7) == 0.7539022543433046381411975217191820122183":
6089+float: 1
6090+ifloat: 1
6091+ildouble: 1
6092+ldouble: 1
6093+Test "cos_towardzero (8) == -0.1455000338086135258688413818311946826093":
6094+float: 1
6095+ifloat: 1
6096+
6097+# cos_upward
6098+Test "cos_upward (10) == -0.8390715290764524522588639478240648345199":
6099+float: 1
6100+ifloat: 1
6101+ildouble: 1
6102+ldouble: 1
6103+Test "cos_upward (2) == -0.4161468365471423869975682295007621897660":
6104+ildouble: 1
6105+ldouble: 1
6106+Test "cos_upward (3) == -0.9899924966004454572715727947312613023937":
6107+ildouble: 1
6108+ldouble: 1
6109+Test "cos_upward (5) == 0.2836621854632262644666391715135573083344":
6110+ildouble: 1
6111+ldouble: 1
6112+Test "cos_upward (6) == 0.9601702866503660205456522979229244054519":
6113+float: 1
6114+ifloat: 1
6115+ildouble: 1
6116+ldouble: 1
6117+Test "cos_upward (7) == 0.7539022543433046381411975217191820122183":
6118+float: 1
6119+ifloat: 1
6120+Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
6121+float: 2
6122+ifloat: 2
6123+
6124+# cosh_downward
6125+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
6126+float: 1
6127+ifloat: 1
6128+ildouble: 2
6129+ldouble: 2
6130+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
6131+float: 1
6132+ifloat: 1
6133+ildouble: 1
6134+ldouble: 1
6135+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
6136+float: 1
6137+ifloat: 1
6138+ildouble: 1
6139+ldouble: 1
6140+
6141+# cosh_tonearest
6142+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
6143+ildouble: 1
6144+ldouble: 1
6145+
6146+# cosh_towardzero
6147+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
6148+float: 1
6149+ifloat: 1
6150+ildouble: 2
6151+ldouble: 2
6152+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
6153+float: 1
6154+ifloat: 1
6155+ildouble: 1
6156+ldouble: 1
6157+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
6158+float: 1
6159+ifloat: 1
6160+ildouble: 1
6161+ldouble: 1
6162+
6163+# cosh_upward
6164+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
6165+ildouble: 1
6166+ldouble: 1
6167
6168 # cpow
6169 Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
6170 float: 1
6171 ifloat: 1
6172-ldouble: 1
6173 ildouble: 1
6174+ldouble: 1
6175 Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
6176 float: 1
6177 ifloat: 1
6178@@ -363,9 +451,9 @@ ildouble: 1
6179 ldouble: 1
6180 Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
6181 double: 1
6182-float: 5
6183+float: 4
6184 idouble: 1
6185-ifloat: 5
6186+ifloat: 4
6187 Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
6188 float: 2
6189 ifloat: 2
6190@@ -383,22 +471,11 @@ ldouble: 1
6191 Test "Real part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
6192 ildouble: 1
6193 ldouble: 1
6194-Test "Imaginary part of: csin (0.75 + 1.25 i) == 1.28722291002649188575873510790565441 + 1.17210635989270256101081285116138863 i":
6195-float: 1
6196-ifloat: 1
6197-Test "Imaginary part of: csin (-2 - 3 i) == -9.15449914691142957346729954460983256 + 4.16890695996656435075481305885375484 i":
6198-double: 1
6199-idouble: 1
6200
6201 # csinh
6202-Test "Real part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
6203-double: 1
6204-idouble: 1
6205 Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
6206 double: 1
6207 idouble: 1
6208-ildouble: 2
6209-ldouble: 2
6210 Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
6211 float: 1
6212 ifloat: 1
6213@@ -418,37 +495,31 @@ ifloat: 1
6214
6215 # ctan
6216 Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
6217-double: 1
6218-idouble: 1
6219-ildouble: 439
6220-ldouble: 439
6221+ildouble: 1
6222+ldouble: 1
6223 Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
6224-float: 1
6225-ifloat: 1
6226-ildouble: 2
6227-ldouble: 2
6228+ildouble: 1
6229+ldouble: 1
6230 Test "Real part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
6231 ildouble: 1
6232 ldouble: 1
6233 Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
6234 double: 1
6235-float: 1
6236 idouble: 1
6237-ifloat: 1
6238 ildouble: 3
6239 ldouble: 3
6240
6241 # ctanh
6242 Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
6243-float: 2
6244-ifloat: 2
6245-ildouble: 5
6246-ldouble: 5
6247 double: 1
6248+float: 2
6249 idouble: 1
6250+ifloat: 2
6251+ildouble: 3
6252+ldouble: 3
6253 Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
6254-ildouble: 25
6255-ldouble: 25
6256+ildouble: 1
6257+ldouble: 1
6258 Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
6259 float: 1
6260 ifloat: 1
6261@@ -456,10 +527,10 @@ Test "Real part of: ctanh (0.75 + 1.25 i
6262 double: 1
6263 idouble: 1
6264 Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
6265-ildouble: 1
6266-ldouble: 1
6267 double: 1
6268 idouble: 1
6269+ildouble: 1
6270+ldouble: 1
6271
6272 # erf
6273 Test "erf (1.25) == 0.922900128256458230136523481197281140":
6274@@ -481,26 +552,61 @@ ldouble: 1
6275
6276 # exp10
6277 Test "exp10 (-1) == 0.1":
6278-ildouble: 1
6279-ldouble: 1
6280-float: 1
6281-ifloat: 1
6282 double: 2
6283-idouble: 2
6284-Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
6285-ildouble: 2
6286-ldouble: 2
6287 float: 1
6288+idouble: 2
6289 ifloat: 1
6290+ildouble: 1
6291+ldouble: 1
6292+Test "exp10 (0.75) == 5.62341325190349080394951039776481231":
6293 double: 1
6294+float: 1
6295 idouble: 1
6296+ifloat: 1
6297+ildouble: 1
6298+ldouble: 1
6299 Test "exp10 (3) == 1000":
6300-ildouble: 8
6301-ldouble: 8
6302-float: 2
6303-ifloat: 2
6304 double: 6
6305+float: 2
6306 idouble: 6
6307+ifloat: 2
6308+ildouble: 3
6309+ldouble: 3
6310+
6311+# exp_downward
6312+Test "exp_downward (1) == e":
6313+ildouble: 1
6314+ldouble: 1
6315+Test "exp_downward (2) == e^2":
6316+float: 1
6317+ifloat: 1
6318+ildouble: 2
6319+ldouble: 2
6320+Test "exp_downward (3) == e^3":
6321+float: 1
6322+ifloat: 1
6323+ildouble: 1
6324+ldouble: 1
6325+
6326+# exp_towardzero
6327+Test "exp_towardzero (1) == e":
6328+ildouble: 1
6329+ldouble: 1
6330+Test "exp_towardzero (2) == e^2":
6331+float: 1
6332+ifloat: 1
6333+ildouble: 2
6334+ldouble: 2
6335+Test "exp_towardzero (3) == e^3":
6336+float: 1
6337+ifloat: 1
6338+ildouble: 1
6339+ldouble: 1
6340+
6341+# exp_upward
6342+Test "exp_upward (1) == e":
6343+float: 1
6344+ifloat: 1
6345
6346 # expm1
6347 Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
6348@@ -570,9 +676,7 @@ ifloat: 1
6349 ildouble: 1
6350 ldouble: 1
6351 Test "j0 (8.0) == 0.171650807137553906090869407851972001":
6352-double: 2
6353 float: 1
6354-idouble: 2
6355 ifloat: 1
6356
6357 # j1
6358@@ -617,9 +721,7 @@ ifloat: 1
6359 ildouble: 1
6360 ldouble: 1
6361 Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
6362-double: 2
6363 float: 1
6364-idouble: 2
6365 ifloat: 1
6366 Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
6367 float: 2
6368@@ -714,12 +816,12 @@ ldouble: 1
6369
6370 # log10
6371 Test "log10 (0.75) == -0.124938736608299953132449886193870744":
6372-ildouble: 1
6373-ldouble: 1
6374-float: 2
6375-ifloat: 2
6376 double: 1
6377+float: 2
6378 idouble: 1
6379+ifloat: 2
6380+ildouble: 1
6381+ldouble: 1
6382 Test "log10 (e) == log10(e)":
6383 float: 1
6384 ifloat: 1
6385@@ -731,37 +833,309 @@ Test "log1p (-0.25) == -0.28768207245178
6386 float: 1
6387 ifloat: 1
6388
6389-# sincos
6390-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
6391-double: 1
6392-float: 1
6393-idouble: 1
6394-ifloat: 1
6395-Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
6396-double: 1
6397-float: 1
6398-idouble: 1
6399-ifloat: 1
6400+# pow_downward
6401+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
6402 ildouble: 1
6403 ldouble: 1
6404-Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
6405-double: 1
6406+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
6407 float: 1
6408-idouble: 1
6409 ifloat: 1
6410 ildouble: 1
6411 ldouble: 1
6412-Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
6413+
6414+# pow_towardzero
6415+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
6416+ildouble: 1
6417+ldouble: 1
6418+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
6419+float: 1
6420+ifloat: 1
6421+ildouble: 1
6422+ldouble: 1
6423+
6424+# pow_upward
6425+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
6426+float: 1
6427+ifloat: 1
6428+ildouble: 1
6429+ldouble: 1
6430+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
6431+ildouble: 1
6432+ldouble: 1
6433+
6434+# sin_downward
6435+Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
6436+ildouble: 1
6437+ldouble: 1
6438+Test "sin_downward (10) == -0.5440211108893698134047476618513772816836":
6439+float: 1
6440+ifloat: 1
6441+ildouble: 1
6442+ldouble: 1
6443+Test "sin_downward (3) == 0.1411200080598672221007448028081102798469":
6444+float: 1
6445+ifloat: 1
6446+ildouble: 1
6447+ldouble: 1
6448+Test "sin_downward (4) == -0.7568024953079282513726390945118290941359":
6449+ildouble: 1
6450+ldouble: 1
6451+Test "sin_downward (5) == -0.9589242746631384688931544061559939733525":
6452+float: 1
6453+ifloat: 1
6454+ildouble: 1
6455+ldouble: 1
6456+Test "sin_downward (6) == -0.2794154981989258728115554466118947596280":
6457+float: 1
6458+ifloat: 1
6459+Test "sin_downward (7) == 0.6569865987187890903969990915936351779369":
6460+ildouble: 1
6461+ldouble: 1
6462+Test "sin_downward (8) == 0.9893582466233817778081235982452886721164":
6463+ildouble: 1
6464+ldouble: 1
6465+Test "sin_downward (9) == 0.4121184852417565697562725663524351793439":
6466+ildouble: 1
6467+ldouble: 1
6468+
6469+# sin_tonearest
6470+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
6471+float: 1
6472+ifloat: 1
6473+Test "sin_tonearest (10) == -0.5440211108893698134047476618513772816836":
6474+ildouble: 1
6475+ldouble: 1
6476+Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359":
6477+ildouble: 1
6478+ldouble: 1
6479+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
6480+ildouble: 1
6481+ldouble: 1
6482+
6483+# sin_towardzero
6484+Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
6485 float: 1
6486 ifloat: 1
6487-Test "sincos (0.80190127184058835, &sin_res, &cos_res) puts 0.69534156199418473 in cos_res":
6488+ildouble: 1
6489+ldouble: 1
6490+Test "sin_towardzero (10) == -0.5440211108893698134047476618513772816836":
6491+float: 1
6492+ifloat: 1
6493+Test "sin_towardzero (3) == 0.1411200080598672221007448028081102798469":
6494+ildouble: 1
6495+ldouble: 1
6496+Test "sin_towardzero (4) == -0.7568024953079282513726390945118290941359":
6497+float: 1
6498+ifloat: 1
6499+Test "sin_towardzero (5) == -0.9589242746631384688931544061559939733525":
6500+float: 1
6501+ifloat: 1
6502+Test "sin_towardzero (6) == -0.2794154981989258728115554466118947596280":
6503+ildouble: 1
6504+ldouble: 1
6505+Test "sin_towardzero (7) == 0.6569865987187890903969990915936351779369":
6506+ildouble: 1
6507+ldouble: 1
6508+Test "sin_towardzero (8) == 0.9893582466233817778081235982452886721164":
6509+ildouble: 1
6510+ldouble: 1
6511+Test "sin_towardzero (9) == 0.4121184852417565697562725663524351793439":
6512+float: 1
6513+ifloat: 1
6514+ildouble: 1
6515+ldouble: 1
6516+
6517+# sin_upward
6518+Test "sin_upward (1) == 0.8414709848078965066525023216302989996226":
6519+float: 1
6520+ifloat: 1
6521+Test "sin_upward (2) == 0.9092974268256816953960198659117448427023":
6522+float: 2
6523+ifloat: 2
6524+ildouble: 1
6525+ldouble: 1
6526+Test "sin_upward (4) == -0.7568024953079282513726390945118290941359":
6527+float: 1
6528+ifloat: 1
6529+Test "sin_upward (6) == -0.2794154981989258728115554466118947596280":
6530+ildouble: 1
6531+ldouble: 1
6532+Test "sin_upward (9) == 0.4121184852417565697562725663524351793439":
6533+float: 1
6534+ifloat: 1
6535+
6536+# sincos
6537+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
6538 double: 1
6539 idouble: 1
6540-
6541-# tan
6542-Test "tan (pi/4) == 1":
6543+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
6544 double: 1
6545+float: 1
6546 idouble: 1
6547+ifloat: 1
6548+ildouble: 1
6549+ldouble: 1
6550+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
6551+float: 1
6552+ifloat: 1
6553+
6554+# sinh_downward
6555+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
6556+float: 1
6557+ifloat: 1
6558+ildouble: 4
6559+ldouble: 4
6560+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
6561+float: 1
6562+ifloat: 1
6563+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
6564+float: 1
6565+ifloat: 1
6566+ildouble: 5
6567+ldouble: 5
6568+
6569+# sinh_tonearest
6570+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
6571+ildouble: 3
6572+ldouble: 3
6573+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
6574+ildouble: 1
6575+ldouble: 1
6576+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
6577+ildouble: 6
6578+ldouble: 6
6579+
6580+# sinh_towardzero
6581+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
6582+float: 1
6583+ifloat: 1
6584+ildouble: 4
6585+ldouble: 4
6586+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
6587+float: 1
6588+ifloat: 1
6589+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
6590+float: 1
6591+ifloat: 1
6592+ildouble: 5
6593+ldouble: 5
6594+
6595+# sinh_upward
6596+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
6597+ildouble: 16
6598+ldouble: 16
6599+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
6600+ildouble: 27
6601+ldouble: 27
6602+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
6603+ildouble: 7
6604+ldouble: 7
6605+
6606+# tan_downward
6607+Test "tan_downward (1) == 1.5574077246549022305069748074583601730873":
6608+float: 1
6609+ifloat: 1
6610+Test "tan_downward (10) == 0.6483608274590866712591249330098086768169":
6611+float: 1
6612+ifloat: 1
6613+Test "tan_downward (2) == -2.1850398632615189916433061023136825434320":
6614+float: 1
6615+ifloat: 1
6616+Test "tan_downward (4) == 1.1578212823495775831373424182673239231198":
6617+ildouble: 1
6618+ldouble: 1
6619+Test "tan_downward (5) == -3.3805150062465856369827058794473439087096":
6620+ildouble: 1
6621+ldouble: 1
6622+Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
6623+float: 1
6624+ifloat: 1
6625+Test "tan_downward (8) == -6.7997114552203786999252627596086333648814":
6626+float: 1
6627+ifloat: 1
6628+ildouble: 1
6629+ldouble: 1
6630+Test "tan_downward (9) == -0.4523156594418098405903708757987855343087":
6631+float: 1
6632+ifloat: 1
6633+
6634+# tan_tonearest
6635+Test "tan_tonearest (6) == -0.2910061913847491570536995888681755428312":
6636+ildouble: 1
6637+ldouble: 1
6638+Test "tan_tonearest (8) == -6.7997114552203786999252627596086333648814":
6639+ildouble: 1
6640+ldouble: 1
6641+Test "tan_tonearest (9) == -0.4523156594418098405903708757987855343087":
6642+ildouble: 1
6643+ldouble: 1
6644+
6645+# tan_towardzero
6646+Test "tan_towardzero (10) == 0.6483608274590866712591249330098086768169":
6647+float: 1
6648+ifloat: 1
6649+Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320":
6650+ildouble: 1
6651+ldouble: 1
6652+Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
6653+float: 1
6654+ifloat: 1
6655+ildouble: 1
6656+ldouble: 1
6657+Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
6658+float: 1
6659+ifloat: 1
6660+ildouble: 1
6661+ldouble: 1
6662+Test "tan_towardzero (5) == -3.3805150062465856369827058794473439087096":
6663+float: 1
6664+ifloat: 1
6665+Test "tan_towardzero (6) == -0.2910061913847491570536995888681755428312":
6666+ildouble: 1
6667+ldouble: 1
6668+Test "tan_towardzero (8) == -6.7997114552203786999252627596086333648814":
6669+ildouble: 2
6670+ldouble: 2
6671+Test "tan_towardzero (9) == -0.4523156594418098405903708757987855343087":
6672+float: 1
6673+ifloat: 1
6674+ildouble: 1
6675+ldouble: 1
6676+
6677+# tan_upward
6678+Test "tan_upward (1) == 1.5574077246549022305069748074583601730873":
6679+float: 1
6680+ifloat: 1
6681+ildouble: 1
6682+ldouble: 1
6683+Test "tan_upward (10) == 0.6483608274590866712591249330098086768169":
6684+float: 1
6685+ifloat: 1
6686+ildouble: 1
6687+ldouble: 1
6688+Test "tan_upward (2) == -2.1850398632615189916433061023136825434320":
6689+ildouble: 1
6690+ldouble: 1
6691+Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
6692+float: 1
6693+ifloat: 1
6694+ildouble: 1
6695+ldouble: 1
6696+Test "tan_upward (5) == -3.3805150062465856369827058794473439087096":
6697+float: 1
6698+ifloat: 1
6699+Test "tan_upward (6) == -0.2910061913847491570536995888681755428312":
6700+ildouble: 1
6701+ldouble: 1
6702+Test "tan_upward (7) == 0.8714479827243187364564508896003135663222":
6703+ildouble: 1
6704+ldouble: 1
6705+Test "tan_upward (8) == -6.7997114552203786999252627596086333648814":
6706+ildouble: 2
6707+ldouble: 2
6708+Test "tan_upward (9) == -0.4523156594418098405903708757987855343087":
6709+ildouble: 1
6710+ldouble: 1
6711
6712 # tgamma
6713 Test "tgamma (-0.5) == -2 sqrt (pi)":
6714@@ -779,9 +1153,6 @@ double: 1
6715 float: 1
6716 idouble: 1
6717 ifloat: 1
6718-Test "tgamma (4) == 6":
6719-ildouble: 1
6720-ldouble: 1
6721
6722 # y0
6723 Test "y0 (0.125) == -1.38968062514384052915582277745018693":
6724@@ -960,27 +1331,17 @@ ildouble: 1
6725 ldouble: 1
6726
6727 Function: Imaginary part of "cacos":
6728-float: 1
6729-ifloat: 1
6730 ildouble: 2
6731 ldouble: 2
6732
6733 Function: Real part of "cacosh":
6734-double: 1
6735-float: 7
6736-idouble: 1
6737-ifloat: 7
6738-ildouble: 6
6739-ldouble: 6
6740-
6741-Function: Imaginary part of "cacosh":
6742-double: 1
6743-float: 3
6744-idouble: 1
6745-ifloat: 3
6746 ildouble: 1
6747 ldouble: 1
6748
6749+Function: Imaginary part of "cacosh":
6750+float: 1
6751+ifloat: 1
6752+
6753 Function: Real part of "casin":
6754 double: 1
6755 float: 1
6756@@ -990,8 +1351,6 @@ ildouble: 2
6757 ldouble: 2
6758
6759 Function: Imaginary part of "casin":
6760-float: 1
6761-ifloat: 1
6762 ildouble: 2
6763 ldouble: 2
6764
6765@@ -1011,10 +1370,6 @@ ifloat: 6
6766 ildouble: 5
6767 ldouble: 5
6768
6769-Function: Real part of "catan":
6770-float: 4
6771-ifloat: 4
6772-
6773 Function: Imaginary part of "catan":
6774 double: 1
6775 float: 1
6776@@ -1027,10 +1382,6 @@ idouble: 4
6777 ildouble: 1
6778 ldouble: 1
6779
6780-Function: Imaginary part of "catanh":
6781-float: 6
6782-ifloat: 6
6783-
6784 Function: "cbrt":
6785 double: 1
6786 idouble: 1
6787@@ -1058,9 +1409,7 @@ idouble: 1
6788 ifloat: 1
6789
6790 Function: Imaginary part of "ccosh":
6791-double: 1
6792 float: 1
6793-idouble: 1
6794 ifloat: 1
6795 ildouble: 1
6796 ldouble: 1
6797@@ -1081,25 +1430,17 @@ ifloat: 1
6798 ildouble: 1
6799 ldouble: 1
6800
6801-Function: Imaginary part of "clog":
6802-float: 3
6803-ifloat: 3
6804-
6805 Function: Real part of "clog10":
6806-double: 1
6807 float: 1
6808-idouble: 1
6809 ifloat: 1
6810 ildouble: 1
6811 ldouble: 1
6812
6813 Function: Imaginary part of "clog10":
6814 double: 1
6815-float: 5
6816+float: 1
6817 idouble: 1
6818-ifloat: 5
6819-ildouble: 1
6820-ldouble: 1
6821+ifloat: 1
6822
6823 Function: "cos":
6824 double: 2
6825@@ -1109,11 +1450,55 @@ ifloat: 1
6826 ildouble: 1
6827 ldouble: 1
6828
6829+Function: "cos_downward":
6830+float: 1
6831+ifloat: 1
6832+ildouble: 1
6833+ldouble: 1
6834+
6835+Function: "cos_tonearest":
6836+float: 1
6837+ifloat: 1
6838+ildouble: 1
6839+ldouble: 1
6840+
6841+Function: "cos_towardzero":
6842+float: 1
6843+ifloat: 1
6844+ildouble: 1
6845+ldouble: 1
6846+
6847+Function: "cos_upward":
6848+float: 2
6849+ifloat: 2
6850+ildouble: 1
6851+ldouble: 1
6852+
6853+Function: "cosh_downward":
6854+float: 1
6855+ifloat: 1
6856+ildouble: 2
6857+ldouble: 2
6858+
6859+Function: "cosh_tonearest":
6860+ildouble: 1
6861+ldouble: 1
6862+
6863+Function: "cosh_towardzero":
6864+float: 1
6865+ifloat: 1
6866+ildouble: 2
6867+ldouble: 2
6868+
6869+Function: "cosh_upward":
6870+ildouble: 1
6871+ldouble: 1
6872+
6873 Function: Real part of "cpow":
6874 double: 2
6875-float: 5
6876+float: 4
6877 idouble: 2
6878-ifloat: 5
6879+ifloat: 4
6880 ildouble: 5
6881 ldouble: 5
6882
6883@@ -1129,16 +1514,8 @@ Function: Real part of "csin":
6884 ildouble: 1
6885 ldouble: 1
6886
6887-Function: Imaginary part of "csin":
6888-double: 1
6889-float: 1
6890-idouble: 1
6891-ifloat: 1
6892-
6893 Function: Real part of "csinh":
6894-double: 1
6895 float: 1
6896-idouble: 1
6897 ifloat: 1
6898 ildouble: 1
6899 ldouble: 1
6900@@ -1148,24 +1525,18 @@ double: 1
6901 float: 1
6902 idouble: 1
6903 ifloat: 1
6904-ildouble: 2
6905-ldouble: 2
6906
6907 Function: Real part of "csqrt":
6908 float: 1
6909 ifloat: 1
6910
6911 Function: Real part of "ctan":
6912-double: 1
6913-idouble: 1
6914-ildouble: 439
6915-ldouble: 439
6916+ildouble: 1
6917+ldouble: 1
6918
6919 Function: Imaginary part of "ctan":
6920 double: 1
6921-float: 1
6922 idouble: 1
6923-ifloat: 1
6924 ildouble: 3
6925 ldouble: 3
6926
6927@@ -1174,16 +1545,16 @@ double: 1
6928 float: 2
6929 idouble: 1
6930 ifloat: 2
6931-ildouble: 5
6932-ldouble: 5
6933+ildouble: 3
6934+ldouble: 3
6935
6936 Function: Imaginary part of "ctanh":
6937-float: 1
6938-ifloat: 1
6939-ildouble: 25
6940-ldouble: 25
6941 double: 1
6942+float: 1
6943 idouble: 1
6944+ifloat: 1
6945+ildouble: 1
6946+ldouble: 1
6947
6948 Function: "erf":
6949 double: 1
6950@@ -1196,12 +1567,28 @@ ildouble: 1
6951 ldouble: 1
6952
6953 Function: "exp10":
6954-ildouble: 8
6955-ldouble: 8
6956-float: 2
6957-ifloat: 2
6958 double: 6
6959+float: 2
6960 idouble: 6
6961+ifloat: 2
6962+ildouble: 3
6963+ldouble: 3
6964+
6965+Function: "exp_downward":
6966+float: 1
6967+ifloat: 1
6968+ildouble: 2
6969+ldouble: 2
6970+
6971+Function: "exp_towardzero":
6972+float: 1
6973+ifloat: 1
6974+ildouble: 2
6975+ldouble: 2
6976+
6977+Function: "exp_upward":
6978+float: 1
6979+ifloat: 1
6980
6981 Function: "expm1":
6982 double: 1
6983@@ -1250,17 +1637,59 @@ ildouble: 1
6984 ldouble: 1
6985
6986 Function: "log10":
6987+double: 1
6988 float: 2
6989+idouble: 1
6990 ifloat: 2
6991 ildouble: 1
6992 ldouble: 1
6993-double: 1
6994-idouble: 1
6995
6996 Function: "log1p":
6997 float: 1
6998 ifloat: 1
6999
7000+Function: "pow_downward":
7001+float: 1
7002+ifloat: 1
7003+ildouble: 1
7004+ldouble: 1
7005+
7006+Function: "pow_towardzero":
7007+float: 1
7008+ifloat: 1
7009+ildouble: 1
7010+ldouble: 1
7011+
7012+Function: "pow_upward":
7013+float: 1
7014+ifloat: 1
7015+ildouble: 1
7016+ldouble: 1
7017+
7018+Function: "sin_downward":
7019+float: 1
7020+ifloat: 1
7021+ildouble: 1
7022+ldouble: 1
7023+
7024+Function: "sin_tonearest":
7025+float: 1
7026+ifloat: 1
7027+ildouble: 1
7028+ldouble: 1
7029+
7030+Function: "sin_towardzero":
7031+float: 1
7032+ifloat: 1
7033+ildouble: 1
7034+ldouble: 1
7035+
7036+Function: "sin_upward":
7037+float: 2
7038+ifloat: 2
7039+ildouble: 1
7040+ldouble: 1
7041+
7042 Function: "sincos":
7043 double: 1
7044 float: 1
7045@@ -1269,10 +1698,52 @@ ifloat: 1
7046 ildouble: 1
7047 ldouble: 1
7048
7049+Function: "sinh_downward":
7050+float: 1
7051+ifloat: 1
7052+ildouble: 5
7053+ldouble: 5
7054+
7055+Function: "sinh_tonearest":
7056+ildouble: 6
7057+ldouble: 6
7058+
7059+Function: "sinh_towardzero":
7060+float: 1
7061+ifloat: 1
7062+ildouble: 5
7063+ldouble: 5
7064+
7065+Function: "sinh_upward":
7066+ildouble: 27
7067+ldouble: 27
7068+
7069 Function: "tan":
7070 double: 1
7071 idouble: 1
7072
7073+Function: "tan_downward":
7074+float: 1
7075+ifloat: 1
7076+ildouble: 1
7077+ldouble: 1
7078+
7079+Function: "tan_tonearest":
7080+ildouble: 1
7081+ldouble: 1
7082+
7083+Function: "tan_towardzero":
7084+float: 1
7085+ifloat: 1
7086+ildouble: 2
7087+ldouble: 2
7088+
7089+Function: "tan_upward":
7090+float: 1
7091+ifloat: 1
7092+ildouble: 2
7093+ldouble: 2
7094+
7095 Function: "tgamma":
7096 double: 1
7097 float: 1
7098diff -Nrup a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h
7099--- a/sysdeps/x86_64/fpu/math_private.h 2010-05-04 05:27:23.000000000 -0600
7100+++ b/sysdeps/x86_64/fpu/math_private.h 2012-08-06 09:54:00.893929393 -0600
7101@@ -56,3 +56,82 @@ do { \
7102 } while (0)
7103
7104 #endif
7105+
7106+
7107+/* Specialized variants of the <fenv.h> interfaces which only handle
7108+ either the FPU or the SSE unit. */
7109+#undef libc_fegetround
7110+#define libc_fegetround() \
7111+ ({ \
7112+ unsigned int mxcsr; \
7113+ asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \
7114+ (mxcsr & 0x6000) >> 3; \
7115+ })
7116+#undef libc_fegetroundf
7117+#define libc_fegetroundf() libc_fegetround ()
7118+// #define libc_fegetroundl() fegetround ()
7119+
7120+#undef libc_fesetround
7121+#define libc_fesetround(r) \
7122+ do { \
7123+ unsigned int mxcsr; \
7124+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
7125+ mxcsr = (mxcsr & ~0x6000) | ((r) << 3); \
7126+ asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \
7127+ } while (0)
7128+#undef libc_fesetroundf
7129+#define libc_fesetroundf(r) libc_fesetround (r)
7130+// #define libc_fesetroundl(r) (void) fesetround (r)
7131+
7132+#undef libc_feholdexcept
7133+#define libc_feholdexcept(e) \
7134+ do { \
7135+ unsigned int mxcsr; \
7136+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
7137+ (e)->__mxcsr = mxcsr; \
7138+ mxcsr = (mxcsr | 0x1f80) & ~0x3f; \
7139+ asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \
7140+ } while (0)
7141+#undef libc_feholdexceptf
7142+#define libc_feholdexceptf(e) libc_feholdexcept (e)
7143+// #define libc_feholdexceptl(e) (void) feholdexcept (e)
7144+
7145+#undef libc_feholdexcept_setround
7146+#define libc_feholdexcept_setround(e, r) \
7147+ do { \
7148+ unsigned int mxcsr; \
7149+ asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
7150+ (e)->__mxcsr = mxcsr; \
7151+ mxcsr = ((mxcsr | 0x1f80) & ~0x603f) | ((r) << 3); \
7152+ asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \
7153+ } while (0)
7154+#undef libc_feholdexcept_setroundf
7155+#define libc_feholdexcept_setroundf(e, r) libc_feholdexcept_setround (e, r)
7156+// #define libc_feholdexcept_setroundl(e, r) ...
7157+
7158+#undef libc_fetestexcept
7159+#define libc_fetestexcept(e) \
7160+ ({ unsigned int mxcsr; asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \
7161+ mxcsr & (e) & FE_ALL_EXCEPT; })
7162+#undef libc_fetestexceptf
7163+#define libc_fetestexceptf(e) libc_fetestexcept (e)
7164+// #define libc_fetestexceptl(e) fetestexcept (e)
7165+
7166+#undef libc_fesetenv
7167+#define libc_fesetenv(e) \
7168+ asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr))
7169+#undef libc_fesetenvf
7170+#define libc_fesetenvf(e) libc_fesetenv (e)
7171+// #define libc_fesetenvl(e) (void) fesetenv (e)
7172+
7173+#undef libc_feupdateenv
7174+#define libc_feupdateenv(e) \
7175+ do { \
7176+ unsigned int mxcsr; \
7177+ asm volatile ("stmxcsr %0" : "=m" (*&mxcsr)); \
7178+ asm volatile ("ldmxcsr %0" : : "m" ((e)->__mxcsr)); \
7179+ feraiseexcept (mxcsr & FE_ALL_EXCEPT); \
7180+ } while (0)
7181+#undef libc_feupdateenvf
7182+#define libc_feupdateenvf(e) libc_feupdateenv (e)
7183+// #define libc_feupdateenvl(e) (void) feupdateenv (e)