Lines Matching refs:status

31 static floatx80 propagateFloatx80NaNOneArg(floatx80 a, float_status *status)  in propagateFloatx80NaNOneArg()  argument
33 if (floatx80_is_signaling_nan(a, status)) { in propagateFloatx80NaNOneArg()
34 float_raise(float_flag_invalid, status); in propagateFloatx80NaNOneArg()
35 a = floatx80_silence_nan(a, status); in propagateFloatx80NaNOneArg()
38 if (status->default_nan_mode) { in propagateFloatx80NaNOneArg()
39 return floatx80_default_nan(status); in propagateFloatx80NaNOneArg()
50 floatx80 floatx80_getman(floatx80 a, float_status *status) in floatx80_getman() argument
62 return propagateFloatx80NaNOneArg(a , status); in floatx80_getman()
64 float_raise(float_flag_invalid , status); in floatx80_getman()
65 return floatx80_default_nan(status); in floatx80_getman()
75 return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, in floatx80_getman()
76 0x3FFF, aSig, 0, status); in floatx80_getman()
84 floatx80 floatx80_getexp(floatx80 a, float_status *status) in floatx80_getexp() argument
96 return propagateFloatx80NaNOneArg(a , status); in floatx80_getexp()
98 float_raise(float_flag_invalid , status); in floatx80_getexp()
99 return floatx80_default_nan(status); in floatx80_getexp()
109 return int32_to_floatx80(aExp - 0x3FFF, status); in floatx80_getexp()
120 floatx80 floatx80_scale(floatx80 a, floatx80 b, float_status *status) in floatx80_scale() argument
136 return propagateFloatx80NaN(a, b, status); in floatx80_scale()
138 float_raise(float_flag_invalid , status); in floatx80_scale()
139 return floatx80_default_nan(status); in floatx80_scale()
143 return propagateFloatx80NaN(a, b, status); in floatx80_scale()
164 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_scale()
165 aSign, aExp, aSig, 0, status); in floatx80_scale()
172 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_scale()
173 aSign, aExp, aSig, 0, status); in floatx80_scale()
176 floatx80 floatx80_move(floatx80 a, float_status *status) in floatx80_move() argument
188 return propagateFloatx80NaNOneArg(a, status); in floatx80_move()
196 normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_move()
197 aSign, aExp, aSig, 0, status); in floatx80_move()
199 return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, in floatx80_move()
200 aExp, aSig, 0, status); in floatx80_move()
224 floatx80 floatx80_lognp1(floatx80 a, float_status *status) in floatx80_lognp1() argument
242 propagateFloatx80NaNOneArg(a, status); in floatx80_lognp1()
245 float_raise(float_flag_invalid, status); in floatx80_lognp1()
246 return floatx80_default_nan(status); in floatx80_lognp1()
257 float_raise(float_flag_divbyzero, status); in floatx80_lognp1()
261 float_raise(float_flag_invalid, status); in floatx80_lognp1()
262 return floatx80_default_nan(status); in floatx80_lognp1()
267 float_raise(float_flag_inexact, status); in floatx80_lognp1()
268 return floatx80_move(a, status); in floatx80_lognp1()
271 user_rnd_mode = status->float_rounding_mode; in floatx80_lognp1()
272 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_lognp1()
273 status->float_rounding_mode = float_round_nearest_even; in floatx80_lognp1()
274 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_lognp1()
282 status), status); /* X = (1+Z) */ in floatx80_lognp1()
292 fp1 = int32_to_floatx80(k, status); in floatx80_lognp1()
300 fp0 = floatx80_sub(fp0, f, status); /* Y-F */ in floatx80_lognp1()
304 fp0 = floatx80_mul(fp0, log_tbl[j], status); /* FP0 IS U = (Y-F)/F */ in floatx80_lognp1()
306 klog2 = floatx80_mul(fp1, logof2, status); /* FP1 IS K*LOG2 */ in floatx80_lognp1()
307 fp2 = floatx80_mul(fp0, fp0, status); /* FP2 IS V=U*U */ in floatx80_lognp1()
313 make_float64(0x3FC2499AB5E4040B), status), in floatx80_lognp1()
314 status); /* V*A6 */ in floatx80_lognp1()
316 make_float64(0xBFC555B5848CB7DB), status), in floatx80_lognp1()
317 status); /* V*A5 */ in floatx80_lognp1()
319 make_float64(0x3FC99999987D8730), status), in floatx80_lognp1()
320 status); /* A4+V*A6 */ in floatx80_lognp1()
322 make_float64(0xBFCFFFFFFF6F7E97), status), in floatx80_lognp1()
323 status); /* A3+V*A5 */ in floatx80_lognp1()
324 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A4+V*A6) */ in floatx80_lognp1()
325 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A3+V*A5) */ in floatx80_lognp1()
327 make_float64(0x3FD55555555555A4), status), in floatx80_lognp1()
328 status); /* A2+V*(A4+V*A6) */ in floatx80_lognp1()
330 make_float64(0xBFE0000000000008), status), in floatx80_lognp1()
331 status); /* A1+V*(A3+V*A5) */ in floatx80_lognp1()
332 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A2+V*(A4+V*A6)) */ in floatx80_lognp1()
333 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A1+V*(A3+V*A5)) */ in floatx80_lognp1()
334 fp1 = floatx80_mul(fp1, fp0, status); /* U*V*(A2+V*(A4+V*A6)) */ in floatx80_lognp1()
335 fp0 = floatx80_add(fp0, fp2, status); /* U+V*(A1+V*(A3+V*A5)) */ in floatx80_lognp1()
338 status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */ in floatx80_lognp1()
339 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */ in floatx80_lognp1()
341 status->float_rounding_mode = user_rnd_mode; in floatx80_lognp1()
342 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_lognp1()
344 a = floatx80_add(fp0, klog2, status); in floatx80_lognp1()
346 float_raise(float_flag_inexact, status); in floatx80_lognp1()
359 status), f, status); /* 1-F */ in floatx80_lognp1()
360 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS Y-F = (1-F)+Z */ in floatx80_lognp1()
365 status), f, status); /* 2-F */ in floatx80_lognp1()
366 fp1 = floatx80_add(fp1, fp1, status); /* 2Z */ in floatx80_lognp1()
367 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS Y-F = (2-F)+2Z */ in floatx80_lognp1()
373 fp1 = floatx80_add(fp1, fp1, status); /* FP1 IS 2Z */ in floatx80_lognp1()
375 status), status); /* FP0 IS 1+X */ in floatx80_lognp1()
378 fp1 = floatx80_div(fp1, fp0, status); /* U */ in floatx80_lognp1()
380 fp0 = floatx80_mul(fp1, fp1, status); /* FP0 IS V = U*U */ in floatx80_lognp1()
381 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS W = V*V */ in floatx80_lognp1()
384 status); /* B5 */ in floatx80_lognp1()
386 status); /* B4 */ in floatx80_lognp1()
387 fp3 = floatx80_mul(fp3, fp1, status); /* W*B5 */ in floatx80_lognp1()
388 fp2 = floatx80_mul(fp2, fp1, status); /* W*B4 */ in floatx80_lognp1()
390 make_float64(0x3F624924928BCCFF), status), in floatx80_lognp1()
391 status); /* B3+W*B5 */ in floatx80_lognp1()
393 make_float64(0x3F899999999995EC), status), in floatx80_lognp1()
394 status); /* B2+W*B4 */ in floatx80_lognp1()
395 fp1 = floatx80_mul(fp1, fp3, status); /* W*(B3+W*B5) */ in floatx80_lognp1()
396 fp2 = floatx80_mul(fp2, fp0, status); /* V*(B2+W*B4) */ in floatx80_lognp1()
398 make_float64(0x3FB5555555555555), status), in floatx80_lognp1()
399 status); /* B1+W*(B3+W*B5) */ in floatx80_lognp1()
401 fp0 = floatx80_mul(fp0, saveu, status); /* FP0 IS U*V */ in floatx80_lognp1()
403 status); /* B1+W*(B3+W*B5) + V*(B2+W*B4) */ in floatx80_lognp1()
405 status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */ in floatx80_lognp1()
407 status->float_rounding_mode = user_rnd_mode; in floatx80_lognp1()
408 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_lognp1()
410 a = floatx80_add(fp0, saveu, status); in floatx80_lognp1()
413 float_raise(float_flag_inexact, status); in floatx80_lognp1()
424 floatx80 floatx80_logn(floatx80 a, float_status *status) in floatx80_logn() argument
442 propagateFloatx80NaNOneArg(a, status); in floatx80_logn()
454 float_raise(float_flag_divbyzero, status); in floatx80_logn()
467 float_raise(float_flag_invalid, status); in floatx80_logn()
468 return floatx80_default_nan(status); in floatx80_logn()
471 user_rnd_mode = status->float_rounding_mode; in floatx80_logn()
472 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_logn()
473 status->float_rounding_mode = float_round_nearest_even; in floatx80_logn()
474 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_logn()
482 fp1 = int32_to_floatx80(k, status); in floatx80_logn()
490 fp0 = floatx80_sub(fp0, f, status); /* Y-F */ in floatx80_logn()
493 fp0 = floatx80_mul(fp0, log_tbl[j], status); /* FP0 IS U = (Y-F)/F */ in floatx80_logn()
495 klog2 = floatx80_mul(fp1, logof2, status); /* FP1 IS K*LOG2 */ in floatx80_logn()
496 fp2 = floatx80_mul(fp0, fp0, status); /* FP2 IS V=U*U */ in floatx80_logn()
502 make_float64(0x3FC2499AB5E4040B), status), in floatx80_logn()
503 status); /* V*A6 */ in floatx80_logn()
505 make_float64(0xBFC555B5848CB7DB), status), in floatx80_logn()
506 status); /* V*A5 */ in floatx80_logn()
508 make_float64(0x3FC99999987D8730), status), in floatx80_logn()
509 status); /* A4+V*A6 */ in floatx80_logn()
511 make_float64(0xBFCFFFFFFF6F7E97), status), in floatx80_logn()
512 status); /* A3+V*A5 */ in floatx80_logn()
513 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A4+V*A6) */ in floatx80_logn()
514 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A3+V*A5) */ in floatx80_logn()
516 make_float64(0x3FD55555555555A4), status), in floatx80_logn()
517 status); /* A2+V*(A4+V*A6) */ in floatx80_logn()
519 make_float64(0xBFE0000000000008), status), in floatx80_logn()
520 status); /* A1+V*(A3+V*A5) */ in floatx80_logn()
521 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A2+V*(A4+V*A6)) */ in floatx80_logn()
522 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A1+V*(A3+V*A5)) */ in floatx80_logn()
523 fp1 = floatx80_mul(fp1, fp0, status); /* U*V*(A2+V*(A4+V*A6)) */ in floatx80_logn()
524 fp0 = floatx80_add(fp0, fp2, status); /* U+V*(A1+V*(A3+V*A5)) */ in floatx80_logn()
527 status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */ in floatx80_logn()
528 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */ in floatx80_logn()
530 status->float_rounding_mode = user_rnd_mode; in floatx80_logn()
531 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_logn()
533 a = floatx80_add(fp0, klog2, status); in floatx80_logn()
535 float_raise(float_flag_inexact, status); in floatx80_logn()
542 status), status); /* FP1 IS X-1 */ in floatx80_logn()
544 status), status); /* FP0 IS X+1 */ in floatx80_logn()
545 fp1 = floatx80_add(fp1, fp1, status); /* FP1 IS 2(X-1) */ in floatx80_logn()
548 fp1 = floatx80_div(fp1, fp0, status); /* U */ in floatx80_logn()
550 fp0 = floatx80_mul(fp1, fp1, status); /* FP0 IS V = U*U */ in floatx80_logn()
551 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS W = V*V */ in floatx80_logn()
554 status); /* B5 */ in floatx80_logn()
556 status); /* B4 */ in floatx80_logn()
557 fp3 = floatx80_mul(fp3, fp1, status); /* W*B5 */ in floatx80_logn()
558 fp2 = floatx80_mul(fp2, fp1, status); /* W*B4 */ in floatx80_logn()
560 make_float64(0x3F624924928BCCFF), status), in floatx80_logn()
561 status); /* B3+W*B5 */ in floatx80_logn()
563 make_float64(0x3F899999999995EC), status), in floatx80_logn()
564 status); /* B2+W*B4 */ in floatx80_logn()
565 fp1 = floatx80_mul(fp1, fp3, status); /* W*(B3+W*B5) */ in floatx80_logn()
566 fp2 = floatx80_mul(fp2, fp0, status); /* V*(B2+W*B4) */ in floatx80_logn()
568 make_float64(0x3FB5555555555555), status), in floatx80_logn()
569 status); /* B1+W*(B3+W*B5) */ in floatx80_logn()
571 fp0 = floatx80_mul(fp0, saveu, status); /* FP0 IS U*V */ in floatx80_logn()
572 fp1 = floatx80_add(fp1, fp2, status); /* B1+W*(B3+W*B5) + V*(B2+W*B4) */ in floatx80_logn()
574 status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */ in floatx80_logn()
576 status->float_rounding_mode = user_rnd_mode; in floatx80_logn()
577 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_logn()
579 a = floatx80_add(fp0, saveu, status); in floatx80_logn()
582 float_raise(float_flag_inexact, status); in floatx80_logn()
593 floatx80 floatx80_log10(floatx80 a, float_status *status) in floatx80_log10() argument
610 propagateFloatx80NaNOneArg(a, status); in floatx80_log10()
619 float_raise(float_flag_divbyzero, status); in floatx80_log10()
625 float_raise(float_flag_invalid, status); in floatx80_log10()
626 return floatx80_default_nan(status); in floatx80_log10()
629 user_rnd_mode = status->float_rounding_mode; in floatx80_log10()
630 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_log10()
631 status->float_rounding_mode = float_round_nearest_even; in floatx80_log10()
632 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_log10()
634 fp0 = floatx80_logn(a, status); in floatx80_log10()
637 status->float_rounding_mode = user_rnd_mode; in floatx80_log10()
638 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_log10()
640 a = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L10 */ in floatx80_log10()
642 float_raise(float_flag_inexact, status); in floatx80_log10()
651 floatx80 floatx80_log2(floatx80 a, float_status *status) in floatx80_log2() argument
668 propagateFloatx80NaNOneArg(a, status); in floatx80_log2()
678 float_raise(float_flag_divbyzero, status); in floatx80_log2()
686 float_raise(float_flag_invalid, status); in floatx80_log2()
687 return floatx80_default_nan(status); in floatx80_log2()
690 user_rnd_mode = status->float_rounding_mode; in floatx80_log2()
691 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_log2()
692 status->float_rounding_mode = float_round_nearest_even; in floatx80_log2()
693 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_log2()
696 status->float_rounding_mode = user_rnd_mode; in floatx80_log2()
697 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_log2()
699 a = int32_to_floatx80(aExp - 0x3FFF, status); in floatx80_log2()
701 fp0 = floatx80_logn(a, status); in floatx80_log2()
704 status->float_rounding_mode = user_rnd_mode; in floatx80_log2()
705 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_log2()
707 a = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L2 */ in floatx80_log2()
710 float_raise(float_flag_inexact, status); in floatx80_log2()
719 floatx80 floatx80_etox(floatx80 a, float_status *status) in floatx80_etox() argument
738 return propagateFloatx80NaNOneArg(a, status); in floatx80_etox()
751 user_rnd_mode = status->float_rounding_mode; in floatx80_etox()
752 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_etox()
753 status->float_rounding_mode = float_round_nearest_even; in floatx80_etox()
754 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_etox()
765 make_float32(0x42B8AA3B), status), in floatx80_etox()
766 status); /* 64/log2 * X */ in floatx80_etox()
768 n = floatx80_to_int32(fp0, status); /* int(64/log2*X) */ in floatx80_etox()
769 fp0 = int32_to_floatx80(n, status); in floatx80_etox()
785 make_float32(0xBC317218), status), in floatx80_etox()
786 status); /* N * L1, L1 = lead(-log2/64) */ in floatx80_etox()
788 fp2 = floatx80_mul(fp2, l2, status); /* N * L2, L1+L2 = -log2/64 */ in floatx80_etox()
789 fp0 = floatx80_add(fp0, fp1, status); /* X + N*L1 */ in floatx80_etox()
790 fp0 = floatx80_add(fp0, fp2, status); /* R */ in floatx80_etox()
792 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_etox()
794 status); /* A5 */ in floatx80_etox()
795 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 is S*A5 */ in floatx80_etox()
797 status), fp1, in floatx80_etox()
798 status); /* fp3 is S*A4 */ in floatx80_etox()
800 0x3FA5555555554431), status), in floatx80_etox()
801 status); /* fp2 is A3+S*A5 */ in floatx80_etox()
803 0x3FC5555555554018), status), in floatx80_etox()
804 status); /* fp3 is A2+S*A4 */ in floatx80_etox()
805 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 is S*(A3+S*A5) */ in floatx80_etox()
806 fp3 = floatx80_mul(fp3, fp1, status); /* fp3 is S*(A2+S*A4) */ in floatx80_etox()
808 make_float32(0x3F000000), status), in floatx80_etox()
809 status); /* fp2 is A1+S*(A3+S*A5) */ in floatx80_etox()
810 fp3 = floatx80_mul(fp3, fp0, status); /* fp3 IS R*S*(A2+S*A4) */ in floatx80_etox()
812 status); /* fp2 IS S*(A1+S*(A3+S*A5)) */ in floatx80_etox()
813 fp0 = floatx80_add(fp0, fp3, status); /* fp0 IS R+R*S*(A2+S*A4) */ in floatx80_etox()
814 fp0 = floatx80_add(fp0, fp2, status); /* fp0 IS EXP(R) - 1 */ in floatx80_etox()
817 fp0 = floatx80_mul(fp0, fp1, status); /* 2^(J/64)*(Exp(R)-1) */ in floatx80_etox()
818 fp0 = floatx80_add(fp0, float32_to_floatx80(exp_tbl2[j], status), in floatx80_etox()
819 status); /* accurate 2^(J/64) */ in floatx80_etox()
821 status); /* 2^(J/64) + 2^(J/64)*(Exp(R)-1) */ in floatx80_etox()
826 fp0 = floatx80_mul(fp0, adjscale, status); in floatx80_etox()
829 status->float_rounding_mode = user_rnd_mode; in floatx80_etox()
830 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etox()
832 a = floatx80_mul(fp0, scale, status); in floatx80_etox()
834 float_raise(float_flag_inexact, status); in floatx80_etox()
839 status->float_rounding_mode = user_rnd_mode; in floatx80_etox()
840 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etox()
843 status->floatx80_rounding_precision, in floatx80_etox()
844 0, -0x1000, aSig, 0, status); in floatx80_etox()
847 status->floatx80_rounding_precision, in floatx80_etox()
848 0, 0x8000, aSig, 0, status); in floatx80_etox()
850 float_raise(float_flag_inexact, status); in floatx80_etox()
857 make_float32(0x42B8AA3B), status), in floatx80_etox()
858 status); /* 64/log2 * X */ in floatx80_etox()
860 n = floatx80_to_int32(fp0, status); /* int(64/log2*X) */ in floatx80_etox()
861 fp0 = int32_to_floatx80(n, status); in floatx80_etox()
888 status->float_rounding_mode = user_rnd_mode; in floatx80_etox()
889 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etox()
892 status), status); /* 1 + X */ in floatx80_etox()
894 float_raise(float_flag_inexact, status); in floatx80_etox()
904 floatx80 floatx80_twotox(floatx80 a, float_status *status) in floatx80_twotox() argument
922 return propagateFloatx80NaNOneArg(a, status); in floatx80_twotox()
935 user_rnd_mode = status->float_rounding_mode; in floatx80_twotox()
936 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_twotox()
937 status->float_rounding_mode = float_round_nearest_even; in floatx80_twotox()
938 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_twotox()
947 status->float_rounding_mode = user_rnd_mode; in floatx80_twotox()
948 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_twotox()
951 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_twotox()
952 0, -0x1000, aSig, 0, status); in floatx80_twotox()
954 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_twotox()
955 0, 0x8000, aSig, 0, status); in floatx80_twotox()
958 status->float_rounding_mode = user_rnd_mode; in floatx80_twotox()
959 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_twotox()
962 make_float32(0x3F800000), status), in floatx80_twotox()
963 status); /* 1 + X */ in floatx80_twotox()
965 float_raise(float_flag_inexact, status); in floatx80_twotox()
972 make_float32(0x42800000), status), in floatx80_twotox()
973 status); /* X * 64 */ in floatx80_twotox()
974 n = floatx80_to_int32(fp1, status); in floatx80_twotox()
975 fp1 = int32_to_floatx80(n, status); in floatx80_twotox()
1005 make_float32(0x3C800000), status), in floatx80_twotox()
1006 status); /* (1/64)*N */ in floatx80_twotox()
1007 fp0 = floatx80_sub(fp0, fp1, status); /* X - (1/64)*INT(64 X) */ in floatx80_twotox()
1009 fp0 = floatx80_mul(fp0, fp2, status); /* R */ in floatx80_twotox()
1012 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_twotox()
1014 status); /* A5 */ in floatx80_twotox()
1016 status); /* A4 */ in floatx80_twotox()
1017 fp2 = floatx80_mul(fp2, fp1, status); /* S*A5 */ in floatx80_twotox()
1018 fp3 = floatx80_mul(fp3, fp1, status); /* S*A4 */ in floatx80_twotox()
1020 make_float64(0x3FA5555555554CC1), status), in floatx80_twotox()
1021 status); /* A3+S*A5 */ in floatx80_twotox()
1023 make_float64(0x3FC5555555554A54), status), in floatx80_twotox()
1024 status); /* A2+S*A4 */ in floatx80_twotox()
1025 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A3+S*A5) */ in floatx80_twotox()
1026 fp3 = floatx80_mul(fp3, fp1, status); /* S*(A2+S*A4) */ in floatx80_twotox()
1028 make_float64(0x3FE0000000000000), status), in floatx80_twotox()
1029 status); /* A1+S*(A3+S*A5) */ in floatx80_twotox()
1030 fp3 = floatx80_mul(fp3, fp0, status); /* R*S*(A2+S*A4) */ in floatx80_twotox()
1032 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A1+S*(A3+S*A5)) */ in floatx80_twotox()
1033 fp0 = floatx80_add(fp0, fp3, status); /* R+R*S*(A2+S*A4) */ in floatx80_twotox()
1034 fp0 = floatx80_add(fp0, fp2, status); /* EXP(R) - 1 */ in floatx80_twotox()
1036 fp0 = floatx80_mul(fp0, fact1, status); in floatx80_twotox()
1037 fp0 = floatx80_add(fp0, fact2, status); in floatx80_twotox()
1038 fp0 = floatx80_add(fp0, fact1, status); in floatx80_twotox()
1040 status->float_rounding_mode = user_rnd_mode; in floatx80_twotox()
1041 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_twotox()
1043 a = floatx80_mul(fp0, adjfact, status); in floatx80_twotox()
1045 float_raise(float_flag_inexact, status); in floatx80_twotox()
1055 floatx80 floatx80_tentox(floatx80 a, float_status *status) in floatx80_tentox() argument
1073 return propagateFloatx80NaNOneArg(a, status); in floatx80_tentox()
1086 user_rnd_mode = status->float_rounding_mode; in floatx80_tentox()
1087 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_tentox()
1088 status->float_rounding_mode = float_round_nearest_even; in floatx80_tentox()
1089 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_tentox()
1098 status->float_rounding_mode = user_rnd_mode; in floatx80_tentox()
1099 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tentox()
1102 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_tentox()
1103 0, -0x1000, aSig, 0, status); in floatx80_tentox()
1105 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_tentox()
1106 0, 0x8000, aSig, 0, status); in floatx80_tentox()
1109 status->float_rounding_mode = user_rnd_mode; in floatx80_tentox()
1110 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tentox()
1113 make_float32(0x3F800000), status), in floatx80_tentox()
1114 status); /* 1 + X */ in floatx80_tentox()
1116 float_raise(float_flag_inexact, status); in floatx80_tentox()
1124 status), status); /* X*64*LOG10/LOG2 */ in floatx80_tentox()
1125 n = floatx80_to_int32(fp1, status); /* N=INT(X*64*LOG10/LOG2) */ in floatx80_tentox()
1126 fp1 = int32_to_floatx80(n, status); in floatx80_tentox()
1158 make_float64(0x3F734413509F8000), status), in floatx80_tentox()
1159 status); /* N*(LOG2/64LOG10)_LEAD */ in floatx80_tentox()
1161 fp2 = floatx80_mul(fp2, fp3, status); /* N*(LOG2/64LOG10)_TRAIL */ in floatx80_tentox()
1162 fp0 = floatx80_sub(fp0, fp1, status); /* X - N L_LEAD */ in floatx80_tentox()
1163 fp0 = floatx80_sub(fp0, fp2, status); /* X - N L_TRAIL */ in floatx80_tentox()
1165 fp0 = floatx80_mul(fp0, fp2, status); /* R */ in floatx80_tentox()
1168 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_tentox()
1170 status); /* A5 */ in floatx80_tentox()
1172 status); /* A4 */ in floatx80_tentox()
1173 fp2 = floatx80_mul(fp2, fp1, status); /* S*A5 */ in floatx80_tentox()
1174 fp3 = floatx80_mul(fp3, fp1, status); /* S*A4 */ in floatx80_tentox()
1176 make_float64(0x3FA5555555554CC1), status), in floatx80_tentox()
1177 status); /* A3+S*A5 */ in floatx80_tentox()
1179 make_float64(0x3FC5555555554A54), status), in floatx80_tentox()
1180 status); /* A2+S*A4 */ in floatx80_tentox()
1181 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A3+S*A5) */ in floatx80_tentox()
1182 fp3 = floatx80_mul(fp3, fp1, status); /* S*(A2+S*A4) */ in floatx80_tentox()
1184 make_float64(0x3FE0000000000000), status), in floatx80_tentox()
1185 status); /* A1+S*(A3+S*A5) */ in floatx80_tentox()
1186 fp3 = floatx80_mul(fp3, fp0, status); /* R*S*(A2+S*A4) */ in floatx80_tentox()
1188 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A1+S*(A3+S*A5)) */ in floatx80_tentox()
1189 fp0 = floatx80_add(fp0, fp3, status); /* R+R*S*(A2+S*A4) */ in floatx80_tentox()
1190 fp0 = floatx80_add(fp0, fp2, status); /* EXP(R) - 1 */ in floatx80_tentox()
1192 fp0 = floatx80_mul(fp0, fact1, status); in floatx80_tentox()
1193 fp0 = floatx80_add(fp0, fact2, status); in floatx80_tentox()
1194 fp0 = floatx80_add(fp0, fact1, status); in floatx80_tentox()
1196 status->float_rounding_mode = user_rnd_mode; in floatx80_tentox()
1197 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tentox()
1199 a = floatx80_mul(fp0, adjfact, status); in floatx80_tentox()
1201 float_raise(float_flag_inexact, status); in floatx80_tentox()
1211 floatx80 floatx80_tan(floatx80 a, float_status *status) in floatx80_tan() argument
1231 return propagateFloatx80NaNOneArg(a, status); in floatx80_tan()
1233 float_raise(float_flag_invalid, status); in floatx80_tan()
1234 return floatx80_default_nan(status); in floatx80_tan()
1241 user_rnd_mode = status->float_rounding_mode; in floatx80_tan()
1242 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_tan()
1243 status->float_rounding_mode = float_round_nearest_even; in floatx80_tan()
1244 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_tan()
1260 fp0 = floatx80_add(fp0, twopi1, status); in floatx80_tan()
1262 fp0 = floatx80_add(fp0, twopi2, status); in floatx80_tan()
1263 fp1 = floatx80_sub(fp1, fp0, status); in floatx80_tan()
1264 fp1 = floatx80_add(fp1, twopi2, status); in floatx80_tan()
1285 fp2 = floatx80_mul(fp0, invtwopi, status); in floatx80_tan()
1286 fp2 = floatx80_add(fp2, float32_to_floatx80(twoto63, status), in floatx80_tan()
1287 status); /* THE FRACT PART OF FP2 IS ROUNDED */ in floatx80_tan()
1288 fp2 = floatx80_sub(fp2, float32_to_floatx80(twoto63, status), in floatx80_tan()
1289 status); /* FP2 is N */ in floatx80_tan()
1290 fp4 = floatx80_mul(twopi1, fp2, status); /* W = N*P1 */ in floatx80_tan()
1291 fp5 = floatx80_mul(twopi2, fp2, status); /* w = N*P2 */ in floatx80_tan()
1292 fp3 = floatx80_add(fp4, fp5, status); /* FP3 is P */ in floatx80_tan()
1293 fp4 = floatx80_sub(fp4, fp3, status); /* W-P */ in floatx80_tan()
1294 fp0 = floatx80_sub(fp0, fp3, status); /* FP0 is A := R - P */ in floatx80_tan()
1295 fp4 = floatx80_add(fp4, fp5, status); /* FP4 is p = (W-P)+w */ in floatx80_tan()
1297 fp1 = floatx80_sub(fp1, fp4, status); /* FP1 is a := r - p */ in floatx80_tan()
1298 fp0 = floatx80_add(fp0, fp1, status); /* FP0 is R := A+a */ in floatx80_tan()
1301 n = floatx80_to_int32(fp2, status); in floatx80_tan()
1304 fp3 = floatx80_sub(fp3, fp0, status); /* A-R */ in floatx80_tan()
1305 fp1 = floatx80_add(fp1, fp3, status); /* FP1 is r := (A-R)+a */ in floatx80_tan()
1308 status->float_rounding_mode = user_rnd_mode; in floatx80_tan()
1309 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tan()
1311 a = floatx80_move(a, status); in floatx80_tan()
1313 float_raise(float_flag_inexact, status); in floatx80_tan()
1319 make_float64(0x3FE45F306DC9C883), status), in floatx80_tan()
1320 status); /* X*2/PI */ in floatx80_tan()
1322 n = floatx80_to_int32(fp1, status); in floatx80_tan()
1325 fp0 = floatx80_sub(fp0, pi_tbl[j], status); /* X-Y1 */ in floatx80_tan()
1326 fp0 = floatx80_sub(fp0, float32_to_floatx80(pi_tbl2[j], status), in floatx80_tan()
1327 status); /* FP0 IS R = (X-Y1)-Y2 */ in floatx80_tan()
1333 fp0 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_tan()
1335 status); /* Q4 */ in floatx80_tan()
1337 status); /* P3 */ in floatx80_tan()
1338 fp3 = floatx80_mul(fp3, fp0, status); /* SQ4 */ in floatx80_tan()
1339 fp2 = floatx80_mul(fp2, fp0, status); /* SP3 */ in floatx80_tan()
1341 make_float64(0xBF346F59B39BA65F), status), in floatx80_tan()
1342 status); /* Q3+SQ4 */ in floatx80_tan()
1344 fp2 = floatx80_add(fp2, fp4, status); /* P2+SP3 */ in floatx80_tan()
1345 fp3 = floatx80_mul(fp3, fp0, status); /* S(Q3+SQ4) */ in floatx80_tan()
1346 fp2 = floatx80_mul(fp2, fp0, status); /* S(P2+SP3) */ in floatx80_tan()
1348 fp3 = floatx80_add(fp3, fp4, status); /* Q2+S(Q3+SQ4) */ in floatx80_tan()
1350 fp2 = floatx80_add(fp2, fp4, status); /* P1+S(P2+SP3) */ in floatx80_tan()
1351 fp3 = floatx80_mul(fp3, fp0, status); /* S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1352 fp2 = floatx80_mul(fp2, fp0, status); /* S(P1+S(P2+SP3)) */ in floatx80_tan()
1354 fp3 = floatx80_add(fp3, fp4, status); /* Q1+S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1355 fp2 = floatx80_mul(fp2, fp1, status); /* RS(P1+S(P2+SP3)) */ in floatx80_tan()
1356 fp0 = floatx80_mul(fp0, fp3, status); /* S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1357 fp1 = floatx80_add(fp1, fp2, status); /* R+RS(P1+S(P2+SP3)) */ in floatx80_tan()
1359 make_float32(0x3F800000), status), in floatx80_tan()
1360 status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1368 status->float_rounding_mode = user_rnd_mode; in floatx80_tan()
1369 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tan()
1371 a = floatx80_div(fp0, fp1, status); in floatx80_tan()
1373 float_raise(float_flag_inexact, status); in floatx80_tan()
1377 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_tan()
1379 status); /* Q4 */ in floatx80_tan()
1381 status); /* P3 */ in floatx80_tan()
1382 fp3 = floatx80_mul(fp3, fp1, status); /* SQ4 */ in floatx80_tan()
1383 fp2 = floatx80_mul(fp2, fp1, status); /* SP3 */ in floatx80_tan()
1385 make_float64(0xBF346F59B39BA65F), status), in floatx80_tan()
1386 status); /* Q3+SQ4 */ in floatx80_tan()
1388 fp2 = floatx80_add(fp2, fp4, status); /* P2+SP3 */ in floatx80_tan()
1389 fp3 = floatx80_mul(fp3, fp1, status); /* S(Q3+SQ4) */ in floatx80_tan()
1390 fp2 = floatx80_mul(fp2, fp1, status); /* S(P2+SP3) */ in floatx80_tan()
1392 fp3 = floatx80_add(fp3, fp4, status); /* Q2+S(Q3+SQ4) */ in floatx80_tan()
1394 fp2 = floatx80_add(fp2, fp4, status); /* P1+S(P2+SP3) */ in floatx80_tan()
1395 fp3 = floatx80_mul(fp3, fp1, status); /* S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1396 fp2 = floatx80_mul(fp2, fp1, status); /* S(P1+S(P2+SP3)) */ in floatx80_tan()
1398 fp3 = floatx80_add(fp3, fp4, status); /* Q1+S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1399 fp2 = floatx80_mul(fp2, fp0, status); /* RS(P1+S(P2+SP3)) */ in floatx80_tan()
1400 fp1 = floatx80_mul(fp1, fp3, status); /* S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1401 fp0 = floatx80_add(fp0, fp2, status); /* R+RS(P1+S(P2+SP3)) */ in floatx80_tan()
1403 make_float32(0x3F800000), status), in floatx80_tan()
1404 status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1406 status->float_rounding_mode = user_rnd_mode; in floatx80_tan()
1407 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tan()
1409 a = floatx80_div(fp0, fp1, status); in floatx80_tan()
1411 float_raise(float_flag_inexact, status); in floatx80_tan()
1422 floatx80 floatx80_sin(floatx80 a, float_status *status) in floatx80_sin() argument
1442 return propagateFloatx80NaNOneArg(a, status); in floatx80_sin()
1444 float_raise(float_flag_invalid, status); in floatx80_sin()
1445 return floatx80_default_nan(status); in floatx80_sin()
1452 user_rnd_mode = status->float_rounding_mode; in floatx80_sin()
1453 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_sin()
1454 status->float_rounding_mode = float_round_nearest_even; in floatx80_sin()
1455 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_sin()
1471 fp0 = floatx80_add(fp0, twopi1, status); in floatx80_sin()
1473 fp0 = floatx80_add(fp0, twopi2, status); in floatx80_sin()
1474 fp1 = floatx80_sub(fp1, fp0, status); in floatx80_sin()
1475 fp1 = floatx80_add(fp1, twopi2, status); in floatx80_sin()
1496 fp2 = floatx80_mul(fp0, invtwopi, status); in floatx80_sin()
1497 fp2 = floatx80_add(fp2, float32_to_floatx80(twoto63, status), in floatx80_sin()
1498 status); /* THE FRACT PART OF FP2 IS ROUNDED */ in floatx80_sin()
1499 fp2 = floatx80_sub(fp2, float32_to_floatx80(twoto63, status), in floatx80_sin()
1500 status); /* FP2 is N */ in floatx80_sin()
1501 fp4 = floatx80_mul(twopi1, fp2, status); /* W = N*P1 */ in floatx80_sin()
1502 fp5 = floatx80_mul(twopi2, fp2, status); /* w = N*P2 */ in floatx80_sin()
1503 fp3 = floatx80_add(fp4, fp5, status); /* FP3 is P */ in floatx80_sin()
1504 fp4 = floatx80_sub(fp4, fp3, status); /* W-P */ in floatx80_sin()
1505 fp0 = floatx80_sub(fp0, fp3, status); /* FP0 is A := R - P */ in floatx80_sin()
1506 fp4 = floatx80_add(fp4, fp5, status); /* FP4 is p = (W-P)+w */ in floatx80_sin()
1508 fp1 = floatx80_sub(fp1, fp4, status); /* FP1 is a := r - p */ in floatx80_sin()
1509 fp0 = floatx80_add(fp0, fp1, status); /* FP0 is R := A+a */ in floatx80_sin()
1512 n = floatx80_to_int32(fp2, status); in floatx80_sin()
1515 fp3 = floatx80_sub(fp3, fp0, status); /* A-R */ in floatx80_sin()
1516 fp1 = floatx80_add(fp1, fp3, status); /* FP1 is r := (A-R)+a */ in floatx80_sin()
1521 status); /* 1 */ in floatx80_sin()
1523 status->float_rounding_mode = user_rnd_mode; in floatx80_sin()
1524 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sin()
1527 a = floatx80_move(a, status); in floatx80_sin()
1528 float_raise(float_flag_inexact, status); in floatx80_sin()
1534 make_float64(0x3FE45F306DC9C883), status), in floatx80_sin()
1535 status); /* X*2/PI */ in floatx80_sin()
1537 n = floatx80_to_int32(fp1, status); in floatx80_sin()
1540 fp0 = floatx80_sub(fp0, pi_tbl[j], status); /* X-Y1 */ in floatx80_sin()
1541 fp0 = floatx80_sub(fp0, float32_to_floatx80(pi_tbl2[j], status), in floatx80_sin()
1542 status); /* FP0 IS R = (X-Y1)-Y2 */ in floatx80_sin()
1547 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_sin()
1548 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_sin()
1550 status); /* B8 */ in floatx80_sin()
1552 status); /* B7 */ in floatx80_sin()
1566 fp2 = floatx80_mul(fp2, fp1, status); /* TB8 */ in floatx80_sin()
1567 fp3 = floatx80_mul(fp3, fp1, status); /* TB7 */ in floatx80_sin()
1569 make_float64(0x3E21EED90612C972), status), in floatx80_sin()
1570 status); /* B6+TB8 */ in floatx80_sin()
1572 make_float64(0xBE927E4FB79D9FCF), status), in floatx80_sin()
1573 status); /* B5+TB7 */ in floatx80_sin()
1574 fp2 = floatx80_mul(fp2, fp1, status); /* T(B6+TB8) */ in floatx80_sin()
1575 fp3 = floatx80_mul(fp3, fp1, status); /* T(B5+TB7) */ in floatx80_sin()
1577 make_float64(0x3EFA01A01A01D423), status), in floatx80_sin()
1578 status); /* B4+T(B6+TB8) */ in floatx80_sin()
1580 fp3 = floatx80_add(fp3, fp4, status); /* B3+T(B5+TB7) */ in floatx80_sin()
1581 fp2 = floatx80_mul(fp2, fp1, status); /* T(B4+T(B6+TB8)) */ in floatx80_sin()
1582 fp1 = floatx80_mul(fp1, fp3, status); /* T(B3+T(B5+TB7)) */ in floatx80_sin()
1584 fp2 = floatx80_add(fp2, fp4, status); /* B2+T(B4+T(B6+TB8)) */ in floatx80_sin()
1586 make_float32(0xBF000000), status), in floatx80_sin()
1587 status); /* B1+T(B3+T(B5+TB7)) */ in floatx80_sin()
1588 fp0 = floatx80_mul(fp0, fp2, status); /* S(B2+T(B4+T(B6+TB8))) */ in floatx80_sin()
1589 fp0 = floatx80_add(fp0, fp1, status); /* [B1+T(B3+T(B5+TB7))]+ in floatx80_sin()
1594 fp0 = floatx80_mul(fp0, x, status); in floatx80_sin()
1596 status->float_rounding_mode = user_rnd_mode; in floatx80_sin()
1597 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sin()
1599 a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status); in floatx80_sin()
1601 float_raise(float_flag_inexact, status); in floatx80_sin()
1612 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_sin()
1613 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_sin()
1615 status); /* A7 */ in floatx80_sin()
1617 status); /* A6 */ in floatx80_sin()
1618 fp3 = floatx80_mul(fp3, fp1, status); /* T*A7 */ in floatx80_sin()
1619 fp2 = floatx80_mul(fp2, fp1, status); /* T*A6 */ in floatx80_sin()
1621 make_float64(0xBE5AE6452A118AE4), status), in floatx80_sin()
1622 status); /* A5+T*A7 */ in floatx80_sin()
1624 make_float64(0x3EC71DE3A5341531), status), in floatx80_sin()
1625 status); /* A4+T*A6 */ in floatx80_sin()
1626 fp3 = floatx80_mul(fp3, fp1, status); /* T(A5+TA7) */ in floatx80_sin()
1627 fp2 = floatx80_mul(fp2, fp1, status); /* T(A4+TA6) */ in floatx80_sin()
1629 make_float64(0xBF2A01A01A018B59), status), in floatx80_sin()
1630 status); /* A3+T(A5+TA7) */ in floatx80_sin()
1632 fp2 = floatx80_add(fp2, fp4, status); /* A2+T(A4+TA6) */ in floatx80_sin()
1633 fp1 = floatx80_mul(fp1, fp3, status); /* T(A3+T(A5+TA7)) */ in floatx80_sin()
1634 fp2 = floatx80_mul(fp2, fp0, status); /* S(A2+T(A4+TA6)) */ in floatx80_sin()
1636 fp1 = floatx80_add(fp1, fp4, status); /* A1+T(A3+T(A5+TA7)) */ in floatx80_sin()
1638 status); /* [A1+T(A3+T(A5+TA7))]+ in floatx80_sin()
1643 fp0 = floatx80_mul(fp0, x, status); /* R'*S */ in floatx80_sin()
1644 fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ in floatx80_sin()
1646 status->float_rounding_mode = user_rnd_mode; in floatx80_sin()
1647 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sin()
1649 a = floatx80_add(fp0, x, status); in floatx80_sin()
1651 float_raise(float_flag_inexact, status); in floatx80_sin()
1662 floatx80 floatx80_cos(floatx80 a, float_status *status) in floatx80_cos() argument
1682 return propagateFloatx80NaNOneArg(a, status); in floatx80_cos()
1684 float_raise(float_flag_invalid, status); in floatx80_cos()
1685 return floatx80_default_nan(status); in floatx80_cos()
1692 user_rnd_mode = status->float_rounding_mode; in floatx80_cos()
1693 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_cos()
1694 status->float_rounding_mode = float_round_nearest_even; in floatx80_cos()
1695 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_cos()
1711 fp0 = floatx80_add(fp0, twopi1, status); in floatx80_cos()
1713 fp0 = floatx80_add(fp0, twopi2, status); in floatx80_cos()
1714 fp1 = floatx80_sub(fp1, fp0, status); in floatx80_cos()
1715 fp1 = floatx80_add(fp1, twopi2, status); in floatx80_cos()
1736 fp2 = floatx80_mul(fp0, invtwopi, status); in floatx80_cos()
1737 fp2 = floatx80_add(fp2, float32_to_floatx80(twoto63, status), in floatx80_cos()
1738 status); /* THE FRACT PART OF FP2 IS ROUNDED */ in floatx80_cos()
1739 fp2 = floatx80_sub(fp2, float32_to_floatx80(twoto63, status), in floatx80_cos()
1740 status); /* FP2 is N */ in floatx80_cos()
1741 fp4 = floatx80_mul(twopi1, fp2, status); /* W = N*P1 */ in floatx80_cos()
1742 fp5 = floatx80_mul(twopi2, fp2, status); /* w = N*P2 */ in floatx80_cos()
1743 fp3 = floatx80_add(fp4, fp5, status); /* FP3 is P */ in floatx80_cos()
1744 fp4 = floatx80_sub(fp4, fp3, status); /* W-P */ in floatx80_cos()
1745 fp0 = floatx80_sub(fp0, fp3, status); /* FP0 is A := R - P */ in floatx80_cos()
1746 fp4 = floatx80_add(fp4, fp5, status); /* FP4 is p = (W-P)+w */ in floatx80_cos()
1748 fp1 = floatx80_sub(fp1, fp4, status); /* FP1 is a := r - p */ in floatx80_cos()
1749 fp0 = floatx80_add(fp0, fp1, status); /* FP0 is R := A+a */ in floatx80_cos()
1752 n = floatx80_to_int32(fp2, status); in floatx80_cos()
1755 fp3 = floatx80_sub(fp3, fp0, status); /* A-R */ in floatx80_cos()
1756 fp1 = floatx80_add(fp1, fp3, status); /* FP1 is r := (A-R)+a */ in floatx80_cos()
1760 fp0 = float32_to_floatx80(make_float32(0x3F800000), status); /* 1 */ in floatx80_cos()
1762 status->float_rounding_mode = user_rnd_mode; in floatx80_cos()
1763 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cos()
1767 make_float32(0x00800000), status), in floatx80_cos()
1768 status); in floatx80_cos()
1769 float_raise(float_flag_inexact, status); in floatx80_cos()
1775 make_float64(0x3FE45F306DC9C883), status), in floatx80_cos()
1776 status); /* X*2/PI */ in floatx80_cos()
1778 n = floatx80_to_int32(fp1, status); in floatx80_cos()
1781 fp0 = floatx80_sub(fp0, pi_tbl[j], status); /* X-Y1 */ in floatx80_cos()
1782 fp0 = floatx80_sub(fp0, float32_to_floatx80(pi_tbl2[j], status), in floatx80_cos()
1783 status); /* FP0 IS R = (X-Y1)-Y2 */ in floatx80_cos()
1788 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_cos()
1789 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_cos()
1791 status); /* B8 */ in floatx80_cos()
1793 status); /* B7 */ in floatx80_cos()
1807 fp2 = floatx80_mul(fp2, fp1, status); /* TB8 */ in floatx80_cos()
1808 fp3 = floatx80_mul(fp3, fp1, status); /* TB7 */ in floatx80_cos()
1810 make_float64(0x3E21EED90612C972), status), in floatx80_cos()
1811 status); /* B6+TB8 */ in floatx80_cos()
1813 make_float64(0xBE927E4FB79D9FCF), status), in floatx80_cos()
1814 status); /* B5+TB7 */ in floatx80_cos()
1815 fp2 = floatx80_mul(fp2, fp1, status); /* T(B6+TB8) */ in floatx80_cos()
1816 fp3 = floatx80_mul(fp3, fp1, status); /* T(B5+TB7) */ in floatx80_cos()
1818 make_float64(0x3EFA01A01A01D423), status), in floatx80_cos()
1819 status); /* B4+T(B6+TB8) */ in floatx80_cos()
1821 fp3 = floatx80_add(fp3, fp4, status); /* B3+T(B5+TB7) */ in floatx80_cos()
1822 fp2 = floatx80_mul(fp2, fp1, status); /* T(B4+T(B6+TB8)) */ in floatx80_cos()
1823 fp1 = floatx80_mul(fp1, fp3, status); /* T(B3+T(B5+TB7)) */ in floatx80_cos()
1825 fp2 = floatx80_add(fp2, fp4, status); /* B2+T(B4+T(B6+TB8)) */ in floatx80_cos()
1827 make_float32(0xBF000000), status), in floatx80_cos()
1828 status); /* B1+T(B3+T(B5+TB7)) */ in floatx80_cos()
1829 fp0 = floatx80_mul(fp0, fp2, status); /* S(B2+T(B4+T(B6+TB8))) */ in floatx80_cos()
1830 fp0 = floatx80_add(fp0, fp1, status); in floatx80_cos()
1834 fp0 = floatx80_mul(fp0, x, status); in floatx80_cos()
1836 status->float_rounding_mode = user_rnd_mode; in floatx80_cos()
1837 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cos()
1839 a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status); in floatx80_cos()
1841 float_raise(float_flag_inexact, status); in floatx80_cos()
1852 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_cos()
1853 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_cos()
1855 status); /* A7 */ in floatx80_cos()
1857 status); /* A6 */ in floatx80_cos()
1858 fp3 = floatx80_mul(fp3, fp1, status); /* T*A7 */ in floatx80_cos()
1859 fp2 = floatx80_mul(fp2, fp1, status); /* T*A6 */ in floatx80_cos()
1861 make_float64(0xBE5AE6452A118AE4), status), in floatx80_cos()
1862 status); /* A5+T*A7 */ in floatx80_cos()
1864 make_float64(0x3EC71DE3A5341531), status), in floatx80_cos()
1865 status); /* A4+T*A6 */ in floatx80_cos()
1866 fp3 = floatx80_mul(fp3, fp1, status); /* T(A5+TA7) */ in floatx80_cos()
1867 fp2 = floatx80_mul(fp2, fp1, status); /* T(A4+TA6) */ in floatx80_cos()
1869 make_float64(0xBF2A01A01A018B59), status), in floatx80_cos()
1870 status); /* A3+T(A5+TA7) */ in floatx80_cos()
1872 fp2 = floatx80_add(fp2, fp4, status); /* A2+T(A4+TA6) */ in floatx80_cos()
1873 fp1 = floatx80_mul(fp1, fp3, status); /* T(A3+T(A5+TA7)) */ in floatx80_cos()
1874 fp2 = floatx80_mul(fp2, fp0, status); /* S(A2+T(A4+TA6)) */ in floatx80_cos()
1876 fp1 = floatx80_add(fp1, fp4, status); /* A1+T(A3+T(A5+TA7)) */ in floatx80_cos()
1877 fp1 = floatx80_add(fp1, fp2, status); in floatx80_cos()
1881 fp0 = floatx80_mul(fp0, x, status); /* R'*S */ in floatx80_cos()
1882 fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ in floatx80_cos()
1884 status->float_rounding_mode = user_rnd_mode; in floatx80_cos()
1885 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cos()
1887 a = floatx80_add(fp0, x, status); in floatx80_cos()
1889 float_raise(float_flag_inexact, status); in floatx80_cos()
1900 floatx80 floatx80_atan(floatx80 a, float_status *status) in floatx80_atan() argument
1918 return propagateFloatx80NaNOneArg(a, status); in floatx80_atan()
1921 float_raise(float_flag_inexact, status); in floatx80_atan()
1922 return floatx80_move(a, status); in floatx80_atan()
1931 user_rnd_mode = status->float_rounding_mode; in floatx80_atan()
1932 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_atan()
1933 status->float_rounding_mode = float_round_nearest_even; in floatx80_atan()
1934 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_atan()
1943 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
1944 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
1946 a = floatx80_sub(fp0, fp1, status); in floatx80_atan()
1948 float_raise(float_flag_inexact, status); in floatx80_atan()
1954 fp1 = floatx80_div(fp1, fp0, status); /* X' = -1/X */ in floatx80_atan()
1956 fp0 = floatx80_mul(fp1, fp1, status); /* Y = X'*X' */ in floatx80_atan()
1957 fp1 = floatx80_mul(fp0, fp0, status); /* Z = Y*Y */ in floatx80_atan()
1959 status); /* C5 */ in floatx80_atan()
1961 status); /* C4 */ in floatx80_atan()
1962 fp3 = floatx80_mul(fp3, fp1, status); /* Z*C5 */ in floatx80_atan()
1963 fp2 = floatx80_mul(fp2, fp1, status); /* Z*C4 */ in floatx80_atan()
1965 make_float64(0xBFC24924827107B8), status), in floatx80_atan()
1966 status); /* C3+Z*C5 */ in floatx80_atan()
1968 make_float64(0x3FC999999996263E), status), in floatx80_atan()
1969 status); /* C2+Z*C4 */ in floatx80_atan()
1970 fp1 = floatx80_mul(fp1, fp3, status); /* Z*(C3+Z*C5) */ in floatx80_atan()
1971 fp2 = floatx80_mul(fp2, fp0, status); /* Y*(C2+Z*C4) */ in floatx80_atan()
1973 make_float64(0xBFD5555555555536), status), in floatx80_atan()
1974 status); /* C1+Z*(C3+Z*C5) */ in floatx80_atan()
1975 fp0 = floatx80_mul(fp0, xsave, status); /* X'*Y */ in floatx80_atan()
1977 fp1 = floatx80_add(fp1, fp2, status); in floatx80_atan()
1979 fp0 = floatx80_mul(fp0, fp1, status); in floatx80_atan()
1980 fp0 = floatx80_add(fp0, xsave, status); in floatx80_atan()
1983 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
1984 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
1986 a = floatx80_add(fp0, fp1, status); in floatx80_atan()
1988 float_raise(float_flag_inexact, status); in floatx80_atan()
1994 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
1995 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
1997 a = floatx80_move(a, status); in floatx80_atan()
1999 float_raise(float_flag_inexact, status); in floatx80_atan()
2005 fp0 = floatx80_mul(fp0, fp0, status); /* Y = X*X */ in floatx80_atan()
2006 fp1 = floatx80_mul(fp0, fp0, status); /* Z = Y*Y */ in floatx80_atan()
2008 status); /* B6 */ in floatx80_atan()
2010 status); /* B5 */ in floatx80_atan()
2011 fp2 = floatx80_mul(fp2, fp1, status); /* Z*B6 */ in floatx80_atan()
2012 fp3 = floatx80_mul(fp3, fp1, status); /* Z*B5 */ in floatx80_atan()
2014 make_float64(0x3FBC71C646940220), status), in floatx80_atan()
2015 status); /* B4+Z*B6 */ in floatx80_atan()
2018 status), status); /* B3+Z*B5 */ in floatx80_atan()
2019 fp2 = floatx80_mul(fp2, fp1, status); /* Z*(B4+Z*B6) */ in floatx80_atan()
2020 fp1 = floatx80_mul(fp1, fp3, status); /* Z*(B3+Z*B5) */ in floatx80_atan()
2022 make_float64(0x3FC9999999998FA9), status), in floatx80_atan()
2023 status); /* B2+Z*(B4+Z*B6) */ in floatx80_atan()
2025 make_float64(0xBFD5555555555555), status), in floatx80_atan()
2026 status); /* B1+Z*(B3+Z*B5) */ in floatx80_atan()
2027 fp2 = floatx80_mul(fp2, fp0, status); /* Y*(B2+Z*(B4+Z*B6)) */ in floatx80_atan()
2028 fp0 = floatx80_mul(fp0, xsave, status); /* X*Y */ in floatx80_atan()
2030 fp1 = floatx80_add(fp1, fp2, status); in floatx80_atan()
2032 fp0 = floatx80_mul(fp0, fp1, status); in floatx80_atan()
2034 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
2035 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
2037 a = floatx80_add(fp0, xsave, status); in floatx80_atan()
2039 float_raise(float_flag_inexact, status); in floatx80_atan()
2051 fp1 = floatx80_mul(fp1, xsave, status); /* X*F */ in floatx80_atan()
2052 fp0 = floatx80_sub(fp0, xsave, status); /* X-F */ in floatx80_atan()
2053 fp1 = floatx80_add(fp1, fp2, status); /* 1 + X*F */ in floatx80_atan()
2054 fp0 = floatx80_div(fp0, fp1, status); /* U = (X-F)/(1+X*F) */ in floatx80_atan()
2068 fp1 = floatx80_mul(fp0, fp0, status); /* V = U*U */ in floatx80_atan()
2070 status); /* A3 */ in floatx80_atan()
2071 fp2 = floatx80_add(fp2, fp1, status); /* A3+V */ in floatx80_atan()
2072 fp2 = floatx80_mul(fp2, fp1, status); /* V*(A3+V) */ in floatx80_atan()
2073 fp1 = floatx80_mul(fp1, fp0, status); /* U*V */ in floatx80_atan()
2075 make_float64(0x4002AC6934A26DB3), status), in floatx80_atan()
2076 status); /* A2+V*(A3+V) */ in floatx80_atan()
2078 make_float64(0xBFC2476F4E1DA28E), status), in floatx80_atan()
2079 status); /* A1+U*V */ in floatx80_atan()
2080 fp1 = floatx80_mul(fp1, fp2, status); /* A1*U*V*(A2+V*(A3+V)) */ in floatx80_atan()
2081 fp0 = floatx80_add(fp0, fp1, status); /* ATAN(U) */ in floatx80_atan()
2083 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
2084 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
2086 a = floatx80_add(fp0, fp3, status); /* ATAN(X) */ in floatx80_atan()
2088 float_raise(float_flag_inexact, status); in floatx80_atan()
2098 floatx80 floatx80_asin(floatx80 a, float_status *status) in floatx80_asin() argument
2115 return propagateFloatx80NaNOneArg(a, status); in floatx80_asin()
2126 float_raise(float_flag_inexact, status); in floatx80_asin()
2128 return floatx80_move(a, status); in floatx80_asin()
2130 float_raise(float_flag_invalid, status); in floatx80_asin()
2131 return floatx80_default_nan(status); in floatx80_asin()
2136 user_rnd_mode = status->float_rounding_mode; in floatx80_asin()
2137 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_asin()
2138 status->float_rounding_mode = float_round_nearest_even; in floatx80_asin()
2139 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_asin()
2144 fp1 = floatx80_sub(one, fp0, status); /* 1 - X */ in floatx80_asin()
2145 fp2 = floatx80_add(one, fp0, status); /* 1 + X */ in floatx80_asin()
2146 fp1 = floatx80_mul(fp2, fp1, status); /* (1+X)*(1-X) */ in floatx80_asin()
2147 fp1 = floatx80_sqrt(fp1, status); /* SQRT((1+X)*(1-X)) */ in floatx80_asin()
2148 fp0 = floatx80_div(fp0, fp1, status); /* X/SQRT((1+X)*(1-X)) */ in floatx80_asin()
2150 status->float_rounding_mode = user_rnd_mode; in floatx80_asin()
2151 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_asin()
2153 a = floatx80_atan(fp0, status); /* ATAN(X/SQRT((1+X)*(1-X))) */ in floatx80_asin()
2155 float_raise(float_flag_inexact, status); in floatx80_asin()
2164 floatx80 floatx80_acos(floatx80 a, float_status *status) in floatx80_acos() argument
2181 return propagateFloatx80NaNOneArg(a, status); in floatx80_acos()
2184 float_raise(float_flag_inexact, status); in floatx80_acos()
2185 return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, in floatx80_acos()
2186 piby2_exp, pi_sig, 0, status); in floatx80_acos()
2195 float_raise(float_flag_inexact, status); in floatx80_acos()
2196 return floatx80_move(a, status); in floatx80_acos()
2201 float_raise(float_flag_invalid, status); in floatx80_acos()
2202 return floatx80_default_nan(status); in floatx80_acos()
2206 user_rnd_mode = status->float_rounding_mode; in floatx80_acos()
2207 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_acos()
2208 status->float_rounding_mode = float_round_nearest_even; in floatx80_acos()
2209 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_acos()
2214 fp1 = floatx80_add(one, fp0, status); /* 1 + X */ in floatx80_acos()
2215 fp0 = floatx80_sub(one, fp0, status); /* 1 - X */ in floatx80_acos()
2216 fp0 = floatx80_div(fp0, fp1, status); /* (1-X)/(1+X) */ in floatx80_acos()
2217 fp0 = floatx80_sqrt(fp0, status); /* SQRT((1-X)/(1+X)) */ in floatx80_acos()
2218 fp0 = floatx80_atan(fp0, status); /* ATAN(SQRT((1-X)/(1+X))) */ in floatx80_acos()
2220 status->float_rounding_mode = user_rnd_mode; in floatx80_acos()
2221 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_acos()
2223 a = floatx80_add(fp0, fp0, status); /* 2 * ATAN(SQRT((1-X)/(1+X))) */ in floatx80_acos()
2225 float_raise(float_flag_inexact, status); in floatx80_acos()
2234 floatx80 floatx80_atanh(floatx80 a, float_status *status) in floatx80_atanh() argument
2251 return propagateFloatx80NaNOneArg(a, status); in floatx80_atanh()
2262 float_raise(float_flag_divbyzero, status); in floatx80_atanh()
2266 float_raise(float_flag_invalid, status); in floatx80_atanh()
2267 return floatx80_default_nan(status); in floatx80_atanh()
2271 user_rnd_mode = status->float_rounding_mode; in floatx80_atanh()
2272 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_atanh()
2273 status->float_rounding_mode = float_round_nearest_even; in floatx80_atanh()
2274 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_atanh()
2280 fp0 = floatx80_add(fp0, fp0, status); /* 2Y */ in floatx80_atanh()
2281 fp1 = floatx80_add(fp1, one, status); /* 1-Y */ in floatx80_atanh()
2282 fp0 = floatx80_div(fp0, fp1, status); /* Z = 2Y/(1-Y) */ in floatx80_atanh()
2283 fp0 = floatx80_lognp1(fp0, status); /* LOG1P(Z) */ in floatx80_atanh()
2285 status->float_rounding_mode = user_rnd_mode; in floatx80_atanh()
2286 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atanh()
2289 status); /* ATANH(X) = SIGN(X) * (1/2) * LOG1P(Z) */ in floatx80_atanh()
2291 float_raise(float_flag_inexact, status); in floatx80_atanh()
2300 floatx80 floatx80_etoxm1(floatx80 a, float_status *status) in floatx80_etoxm1() argument
2318 return propagateFloatx80NaNOneArg(a, status); in floatx80_etoxm1()
2331 user_rnd_mode = status->float_rounding_mode; in floatx80_etoxm1()
2332 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_etoxm1()
2333 status->float_rounding_mode = float_round_nearest_even; in floatx80_etoxm1()
2334 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_etoxm1()
2343 make_float32(0x42B8AA3B), status), in floatx80_etoxm1()
2344 status); /* 64/log2 * X */ in floatx80_etoxm1()
2345 n = floatx80_to_int32(fp0, status); /* int(64/log2*X) */ in floatx80_etoxm1()
2346 fp0 = int32_to_floatx80(n, status); in floatx80_etoxm1()
2363 make_float32(0xBC317218), status), in floatx80_etoxm1()
2364 status); /* N * L1, L1 = lead(-log2/64) */ in floatx80_etoxm1()
2366 fp2 = floatx80_mul(fp2, l2, status); /* N * L2, L1+L2 = -log2/64 */ in floatx80_etoxm1()
2367 fp0 = floatx80_add(fp0, fp1, status); /* X + N*L1 */ in floatx80_etoxm1()
2368 fp0 = floatx80_add(fp0, fp2, status); /* R */ in floatx80_etoxm1()
2370 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_etoxm1()
2372 status); /* A6 */ in floatx80_etoxm1()
2373 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 is S*A6 */ in floatx80_etoxm1()
2375 status), fp1, status); /* fp3 is S*A5 */ in floatx80_etoxm1()
2377 make_float64(0x3F81111111174385), status), in floatx80_etoxm1()
2378 status); /* fp2 IS A4+S*A6 */ in floatx80_etoxm1()
2380 make_float64(0x3FA5555555554F5A), status), in floatx80_etoxm1()
2381 status); /* fp3 is A3+S*A5 */ in floatx80_etoxm1()
2382 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 IS S*(A4+S*A6) */ in floatx80_etoxm1()
2383 fp3 = floatx80_mul(fp3, fp1, status); /* fp3 IS S*(A3+S*A5) */ in floatx80_etoxm1()
2385 make_float64(0x3FC5555555555555), status), in floatx80_etoxm1()
2386 status); /* fp2 IS A2+S*(A4+S*A6) */ in floatx80_etoxm1()
2388 make_float32(0x3F000000), status), in floatx80_etoxm1()
2389 status); /* fp3 IS A1+S*(A3+S*A5) */ in floatx80_etoxm1()
2391 status); /* fp2 IS S*(A2+S*(A4+S*A6)) */ in floatx80_etoxm1()
2393 status); /* fp1 IS S*(A1+S*(A3+S*A5)) */ in floatx80_etoxm1()
2395 status); /* fp2 IS R*S*(A2+S*(A4+S*A6)) */ in floatx80_etoxm1()
2397 status); /* fp0 IS R+S*(A1+S*(A3+S*A5)) */ in floatx80_etoxm1()
2398 fp0 = floatx80_add(fp0, fp2, status); /* fp0 IS EXP(R) - 1 */ in floatx80_etoxm1()
2401 status); /* 2^(J/64)*(Exp(R)-1) */ in floatx80_etoxm1()
2404 fp1 = float32_to_floatx80(exp_tbl2[j], status); in floatx80_etoxm1()
2406 fp1 = floatx80_add(fp1, onebysc, status); in floatx80_etoxm1()
2407 fp0 = floatx80_add(fp0, fp1, status); in floatx80_etoxm1()
2408 fp0 = floatx80_add(fp0, exp_tbl[j], status); in floatx80_etoxm1()
2411 status), status); in floatx80_etoxm1()
2412 fp0 = floatx80_add(fp0, exp_tbl[j], status); in floatx80_etoxm1()
2414 fp0 = floatx80_add(fp0, onebysc, status); in floatx80_etoxm1()
2418 status), status); in floatx80_etoxm1()
2420 fp1 = floatx80_add(fp1, onebysc, status); in floatx80_etoxm1()
2421 fp0 = floatx80_add(fp0, fp1, status); in floatx80_etoxm1()
2426 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2427 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2429 a = floatx80_mul(fp0, sc, status); in floatx80_etoxm1()
2431 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2437 status); /* -1 */ in floatx80_etoxm1()
2439 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2440 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2443 make_float32(0x00800000), status), in floatx80_etoxm1()
2444 status); /* -1 + 2^(-126) */ in floatx80_etoxm1()
2446 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2450 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2451 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2453 return floatx80_etox(a, status); in floatx80_etoxm1()
2459 fp0 = floatx80_mul(fp0, fp0, status); /* S = X*X */ in floatx80_etoxm1()
2461 status); /* B12 */ in floatx80_etoxm1()
2462 fp1 = floatx80_mul(fp1, fp0, status); /* S * B12 */ in floatx80_etoxm1()
2464 status); /* B11 */ in floatx80_etoxm1()
2466 make_float32(0x32D73220), status), in floatx80_etoxm1()
2467 status); /* B10 */ in floatx80_etoxm1()
2468 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2469 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2471 make_float32(0x3493F281), status), in floatx80_etoxm1()
2472 status); /* B9 */ in floatx80_etoxm1()
2474 make_float64(0x3EC71DE3A5774682), status), in floatx80_etoxm1()
2475 status); /* B8 */ in floatx80_etoxm1()
2476 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2477 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2479 make_float64(0x3EFA01A019D7CB68), status), in floatx80_etoxm1()
2480 status); /* B7 */ in floatx80_etoxm1()
2482 make_float64(0x3F2A01A01A019DF3), status), in floatx80_etoxm1()
2483 status); /* B6 */ in floatx80_etoxm1()
2484 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2485 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2487 make_float64(0x3F56C16C16C170E2), status), in floatx80_etoxm1()
2488 status); /* B5 */ in floatx80_etoxm1()
2490 make_float64(0x3F81111111111111), status), in floatx80_etoxm1()
2491 status); /* B4 */ in floatx80_etoxm1()
2492 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2493 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2495 make_float64(0x3FA5555555555555), status), in floatx80_etoxm1()
2496 status); /* B3 */ in floatx80_etoxm1()
2498 fp1 = floatx80_add(fp1, fp3, status); /* B2 */ in floatx80_etoxm1()
2499 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2500 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2502 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2503 fp1 = floatx80_mul(fp1, a, status); in floatx80_etoxm1()
2506 make_float32(0x3F000000), status), in floatx80_etoxm1()
2507 status); /* S*B1 */ in floatx80_etoxm1()
2508 fp1 = floatx80_add(fp1, fp2, status); /* Q */ in floatx80_etoxm1()
2509 fp0 = floatx80_add(fp0, fp1, status); /* S*B1+Q */ in floatx80_etoxm1()
2511 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2512 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2514 a = floatx80_add(fp0, a, status); in floatx80_etoxm1()
2516 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2525 make_float64(0x48B0000000000000), status), in floatx80_etoxm1()
2526 status); in floatx80_etoxm1()
2527 fp0 = floatx80_add(fp0, sc, status); in floatx80_etoxm1()
2529 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2530 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2533 make_float64(0x3730000000000000), status), in floatx80_etoxm1()
2534 status); in floatx80_etoxm1()
2536 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2537 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2539 a = floatx80_add(fp0, sc, status); in floatx80_etoxm1()
2542 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2553 floatx80 floatx80_tanh(floatx80 a, float_status *status) in floatx80_tanh() argument
2572 return propagateFloatx80NaNOneArg(a, status); in floatx80_tanh()
2581 user_rnd_mode = status->float_rounding_mode; in floatx80_tanh()
2582 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_tanh()
2583 status->float_rounding_mode = float_round_nearest_even; in floatx80_tanh()
2584 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_tanh()
2592 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2593 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2595 a = floatx80_move(a, status); in floatx80_tanh()
2597 float_raise(float_flag_inexact, status); in floatx80_tanh()
2605 fp0 = float32_to_floatx80(make_float32(sign), status); in floatx80_tanh()
2609 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2610 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2613 status), status); in floatx80_tanh()
2615 float_raise(float_flag_inexact, status); in floatx80_tanh()
2620 fp0 = floatx80_etox(fp0, status); /* FP0 IS EXP(Y) */ in floatx80_tanh()
2623 status), status); /* EXP(Y)+1 */ in floatx80_tanh()
2626 sign ^ 0xC0000000), status), fp0, in floatx80_tanh()
2627 status); /* -SIGN(X)*2 / [EXP(Y)+1] */ in floatx80_tanh()
2629 status); /* SIGN */ in floatx80_tanh()
2631 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2632 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2634 a = floatx80_add(fp1, fp0, status); in floatx80_tanh()
2636 float_raise(float_flag_inexact, status); in floatx80_tanh()
2643 fp0 = floatx80_etoxm1(fp0, status); /* FP0 IS Z = EXPM1(Y) */ in floatx80_tanh()
2645 status), in floatx80_tanh()
2646 status); /* Z+2 */ in floatx80_tanh()
2654 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2655 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2657 a = floatx80_div(fp0, fp1, status); in floatx80_tanh()
2659 float_raise(float_flag_inexact, status); in floatx80_tanh()
2669 floatx80 floatx80_sinh(floatx80 a, float_status *status) in floatx80_sinh() argument
2688 return propagateFloatx80NaNOneArg(a, status); in floatx80_sinh()
2698 user_rnd_mode = status->float_rounding_mode; in floatx80_sinh()
2699 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_sinh()
2700 status->float_rounding_mode = float_round_nearest_even; in floatx80_sinh()
2701 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_sinh()
2708 status->float_rounding_mode = user_rnd_mode; in floatx80_sinh()
2709 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sinh()
2711 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_sinh()
2712 aSign, 0x8000, aSig, 0, status); in floatx80_sinh()
2716 make_float64(0x40C62D38D3D64634), status), in floatx80_sinh()
2717 status); /* (|X|-16381LOG2_LEAD) */ in floatx80_sinh()
2719 make_float64(0x3D6F90AEB1E75CC7), status), in floatx80_sinh()
2720 status); /* |X| - 16381 LOG2, ACCURATE */ in floatx80_sinh()
2721 fp0 = floatx80_etox(fp0, status); in floatx80_sinh()
2724 status->float_rounding_mode = user_rnd_mode; in floatx80_sinh()
2725 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sinh()
2727 a = floatx80_mul(fp0, fp2, status); in floatx80_sinh()
2729 float_raise(float_flag_inexact, status); in floatx80_sinh()
2735 fp0 = floatx80_etoxm1(fp0, status); /* FP0 IS Z = EXPM1(Y) */ in floatx80_sinh()
2737 status), status); /* 1+Z */ in floatx80_sinh()
2739 fp0 = floatx80_div(fp0, fp1, status); /* Z/(1+Z) */ in floatx80_sinh()
2740 fp0 = floatx80_add(fp0, fp2, status); in floatx80_sinh()
2744 status->float_rounding_mode = user_rnd_mode; in floatx80_sinh()
2745 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sinh()
2747 a = floatx80_mul(fp0, float32_to_floatx80(fact, status), status); in floatx80_sinh()
2749 float_raise(float_flag_inexact, status); in floatx80_sinh()
2759 floatx80 floatx80_cosh(floatx80 a, float_status *status) in floatx80_cosh() argument
2775 return propagateFloatx80NaNOneArg(a, status); in floatx80_cosh()
2785 user_rnd_mode = status->float_rounding_mode; in floatx80_cosh()
2786 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_cosh()
2787 status->float_rounding_mode = float_round_nearest_even; in floatx80_cosh()
2788 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_cosh()
2794 status->float_rounding_mode = user_rnd_mode; in floatx80_cosh()
2795 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cosh()
2796 return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, in floatx80_cosh()
2797 0x8000, one_sig, 0, status); in floatx80_cosh()
2801 make_float64(0x40C62D38D3D64634), status), in floatx80_cosh()
2802 status); in floatx80_cosh()
2804 make_float64(0x3D6F90AEB1E75CC7), status), in floatx80_cosh()
2805 status); in floatx80_cosh()
2806 fp0 = floatx80_etox(fp0, status); in floatx80_cosh()
2809 status->float_rounding_mode = user_rnd_mode; in floatx80_cosh()
2810 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cosh()
2812 a = floatx80_mul(fp0, fp1, status); in floatx80_cosh()
2814 float_raise(float_flag_inexact, status); in floatx80_cosh()
2821 fp0 = floatx80_etox(fp0, status); /* EXP(|X|) */ in floatx80_cosh()
2823 status), status); /* (1/2)*EXP(|X|) */ in floatx80_cosh()
2824 fp1 = float32_to_floatx80(make_float32(0x3E800000), status); /* 1/4 */ in floatx80_cosh()
2825 fp1 = floatx80_div(fp1, fp0, status); /* 1/(2*EXP(|X|)) */ in floatx80_cosh()
2827 status->float_rounding_mode = user_rnd_mode; in floatx80_cosh()
2828 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cosh()
2830 a = floatx80_add(fp0, fp1, status); in floatx80_cosh()
2832 float_raise(float_flag_inexact, status); in floatx80_cosh()