Lines Matching full: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()
145 return floatx80_default_inf(aSign, status); in floatx80_scale()
163 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_scale()
164 aSign, aExp, aSig, 0, status); in floatx80_scale()
171 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_scale()
172 aSign, aExp, aSig, 0, status); in floatx80_scale()
175 floatx80 floatx80_move(floatx80 a, float_status *status) in floatx80_move() argument
187 return propagateFloatx80NaNOneArg(a, status); in floatx80_move()
195 normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_move()
196 aSign, aExp, aSig, 0, status); in floatx80_move()
198 return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, in floatx80_move()
199 aExp, aSig, 0, status); in floatx80_move()
223 floatx80 floatx80_lognp1(floatx80 a, float_status *status) in floatx80_lognp1() argument
241 propagateFloatx80NaNOneArg(a, status); in floatx80_lognp1()
244 float_raise(float_flag_invalid, status); in floatx80_lognp1()
245 return floatx80_default_nan(status); in floatx80_lognp1()
247 return floatx80_default_inf(0, status); in floatx80_lognp1()
256 float_raise(float_flag_divbyzero, status); in floatx80_lognp1()
257 return floatx80_default_inf(aSign, status); in floatx80_lognp1()
259 float_raise(float_flag_invalid, status); in floatx80_lognp1()
260 return floatx80_default_nan(status); in floatx80_lognp1()
265 float_raise(float_flag_inexact, status); in floatx80_lognp1()
266 return floatx80_move(a, status); in floatx80_lognp1()
269 user_rnd_mode = status->float_rounding_mode; in floatx80_lognp1()
270 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_lognp1()
271 status->float_rounding_mode = float_round_nearest_even; in floatx80_lognp1()
272 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_lognp1()
280 status), status); /* X = (1+Z) */ in floatx80_lognp1()
290 fp1 = int32_to_floatx80(k, status); in floatx80_lognp1()
298 fp0 = floatx80_sub(fp0, f, status); /* Y-F */ in floatx80_lognp1()
302 fp0 = floatx80_mul(fp0, log_tbl[j], status); /* FP0 IS U = (Y-F)/F */ in floatx80_lognp1()
304 klog2 = floatx80_mul(fp1, logof2, status); /* FP1 IS K*LOG2 */ in floatx80_lognp1()
305 fp2 = floatx80_mul(fp0, fp0, status); /* FP2 IS V=U*U */ in floatx80_lognp1()
311 make_float64(0x3FC2499AB5E4040B), status), in floatx80_lognp1()
312 status); /* V*A6 */ in floatx80_lognp1()
314 make_float64(0xBFC555B5848CB7DB), status), in floatx80_lognp1()
315 status); /* V*A5 */ in floatx80_lognp1()
317 make_float64(0x3FC99999987D8730), status), in floatx80_lognp1()
318 status); /* A4+V*A6 */ in floatx80_lognp1()
320 make_float64(0xBFCFFFFFFF6F7E97), status), in floatx80_lognp1()
321 status); /* A3+V*A5 */ in floatx80_lognp1()
322 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A4+V*A6) */ in floatx80_lognp1()
323 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A3+V*A5) */ in floatx80_lognp1()
325 make_float64(0x3FD55555555555A4), status), in floatx80_lognp1()
326 status); /* A2+V*(A4+V*A6) */ in floatx80_lognp1()
328 make_float64(0xBFE0000000000008), status), in floatx80_lognp1()
329 status); /* A1+V*(A3+V*A5) */ in floatx80_lognp1()
330 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A2+V*(A4+V*A6)) */ in floatx80_lognp1()
331 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A1+V*(A3+V*A5)) */ in floatx80_lognp1()
332 fp1 = floatx80_mul(fp1, fp0, status); /* U*V*(A2+V*(A4+V*A6)) */ in floatx80_lognp1()
333 fp0 = floatx80_add(fp0, fp2, status); /* U+V*(A1+V*(A3+V*A5)) */ in floatx80_lognp1()
336 status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */ in floatx80_lognp1()
337 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */ in floatx80_lognp1()
339 status->float_rounding_mode = user_rnd_mode; in floatx80_lognp1()
340 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_lognp1()
342 a = floatx80_add(fp0, klog2, status); in floatx80_lognp1()
344 float_raise(float_flag_inexact, status); in floatx80_lognp1()
357 status), f, status); /* 1-F */ in floatx80_lognp1()
358 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS Y-F = (1-F)+Z */ in floatx80_lognp1()
363 status), f, status); /* 2-F */ in floatx80_lognp1()
364 fp1 = floatx80_add(fp1, fp1, status); /* 2Z */ in floatx80_lognp1()
365 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS Y-F = (2-F)+2Z */ in floatx80_lognp1()
371 fp1 = floatx80_add(fp1, fp1, status); /* FP1 IS 2Z */ in floatx80_lognp1()
373 status), status); /* FP0 IS 1+X */ in floatx80_lognp1()
376 fp1 = floatx80_div(fp1, fp0, status); /* U */ in floatx80_lognp1()
378 fp0 = floatx80_mul(fp1, fp1, status); /* FP0 IS V = U*U */ in floatx80_lognp1()
379 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS W = V*V */ in floatx80_lognp1()
382 status); /* B5 */ in floatx80_lognp1()
384 status); /* B4 */ in floatx80_lognp1()
385 fp3 = floatx80_mul(fp3, fp1, status); /* W*B5 */ in floatx80_lognp1()
386 fp2 = floatx80_mul(fp2, fp1, status); /* W*B4 */ in floatx80_lognp1()
388 make_float64(0x3F624924928BCCFF), status), in floatx80_lognp1()
389 status); /* B3+W*B5 */ in floatx80_lognp1()
391 make_float64(0x3F899999999995EC), status), in floatx80_lognp1()
392 status); /* B2+W*B4 */ in floatx80_lognp1()
393 fp1 = floatx80_mul(fp1, fp3, status); /* W*(B3+W*B5) */ in floatx80_lognp1()
394 fp2 = floatx80_mul(fp2, fp0, status); /* V*(B2+W*B4) */ in floatx80_lognp1()
396 make_float64(0x3FB5555555555555), status), in floatx80_lognp1()
397 status); /* B1+W*(B3+W*B5) */ in floatx80_lognp1()
399 fp0 = floatx80_mul(fp0, saveu, status); /* FP0 IS U*V */ in floatx80_lognp1()
401 status); /* B1+W*(B3+W*B5) + V*(B2+W*B4) */ in floatx80_lognp1()
403 status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */ in floatx80_lognp1()
405 status->float_rounding_mode = user_rnd_mode; in floatx80_lognp1()
406 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_lognp1()
408 a = floatx80_add(fp0, saveu, status); in floatx80_lognp1()
411 float_raise(float_flag_inexact, status); in floatx80_lognp1()
422 floatx80 floatx80_logn(floatx80 a, float_status *status) in floatx80_logn() argument
440 propagateFloatx80NaNOneArg(a, status); in floatx80_logn()
443 return floatx80_default_inf(0, status); in floatx80_logn()
451 float_raise(float_flag_divbyzero, status); in floatx80_logn()
452 return floatx80_default_inf(1, status); in floatx80_logn()
463 float_raise(float_flag_invalid, status); in floatx80_logn()
464 return floatx80_default_nan(status); in floatx80_logn()
467 user_rnd_mode = status->float_rounding_mode; in floatx80_logn()
468 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_logn()
469 status->float_rounding_mode = float_round_nearest_even; in floatx80_logn()
470 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_logn()
478 fp1 = int32_to_floatx80(k, status); in floatx80_logn()
486 fp0 = floatx80_sub(fp0, f, status); /* Y-F */ in floatx80_logn()
489 fp0 = floatx80_mul(fp0, log_tbl[j], status); /* FP0 IS U = (Y-F)/F */ in floatx80_logn()
491 klog2 = floatx80_mul(fp1, logof2, status); /* FP1 IS K*LOG2 */ in floatx80_logn()
492 fp2 = floatx80_mul(fp0, fp0, status); /* FP2 IS V=U*U */ in floatx80_logn()
498 make_float64(0x3FC2499AB5E4040B), status), in floatx80_logn()
499 status); /* V*A6 */ in floatx80_logn()
501 make_float64(0xBFC555B5848CB7DB), status), in floatx80_logn()
502 status); /* V*A5 */ in floatx80_logn()
504 make_float64(0x3FC99999987D8730), status), in floatx80_logn()
505 status); /* A4+V*A6 */ in floatx80_logn()
507 make_float64(0xBFCFFFFFFF6F7E97), status), in floatx80_logn()
508 status); /* A3+V*A5 */ in floatx80_logn()
509 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A4+V*A6) */ in floatx80_logn()
510 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A3+V*A5) */ in floatx80_logn()
512 make_float64(0x3FD55555555555A4), status), in floatx80_logn()
513 status); /* A2+V*(A4+V*A6) */ in floatx80_logn()
515 make_float64(0xBFE0000000000008), status), in floatx80_logn()
516 status); /* A1+V*(A3+V*A5) */ in floatx80_logn()
517 fp1 = floatx80_mul(fp1, fp3, status); /* V*(A2+V*(A4+V*A6)) */ in floatx80_logn()
518 fp2 = floatx80_mul(fp2, fp3, status); /* V*(A1+V*(A3+V*A5)) */ in floatx80_logn()
519 fp1 = floatx80_mul(fp1, fp0, status); /* U*V*(A2+V*(A4+V*A6)) */ in floatx80_logn()
520 fp0 = floatx80_add(fp0, fp2, status); /* U+V*(A1+V*(A3+V*A5)) */ in floatx80_logn()
523 status); /* LOG(F)+U*V*(A2+V*(A4+V*A6)) */ in floatx80_logn()
524 fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */ in floatx80_logn()
526 status->float_rounding_mode = user_rnd_mode; in floatx80_logn()
527 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_logn()
529 a = floatx80_add(fp0, klog2, status); in floatx80_logn()
531 float_raise(float_flag_inexact, status); in floatx80_logn()
538 status), status); /* FP1 IS X-1 */ in floatx80_logn()
540 status), status); /* FP0 IS X+1 */ in floatx80_logn()
541 fp1 = floatx80_add(fp1, fp1, status); /* FP1 IS 2(X-1) */ in floatx80_logn()
544 fp1 = floatx80_div(fp1, fp0, status); /* U */ in floatx80_logn()
546 fp0 = floatx80_mul(fp1, fp1, status); /* FP0 IS V = U*U */ in floatx80_logn()
547 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS W = V*V */ in floatx80_logn()
550 status); /* B5 */ in floatx80_logn()
552 status); /* B4 */ in floatx80_logn()
553 fp3 = floatx80_mul(fp3, fp1, status); /* W*B5 */ in floatx80_logn()
554 fp2 = floatx80_mul(fp2, fp1, status); /* W*B4 */ in floatx80_logn()
556 make_float64(0x3F624924928BCCFF), status), in floatx80_logn()
557 status); /* B3+W*B5 */ in floatx80_logn()
559 make_float64(0x3F899999999995EC), status), in floatx80_logn()
560 status); /* B2+W*B4 */ in floatx80_logn()
561 fp1 = floatx80_mul(fp1, fp3, status); /* W*(B3+W*B5) */ in floatx80_logn()
562 fp2 = floatx80_mul(fp2, fp0, status); /* V*(B2+W*B4) */ in floatx80_logn()
564 make_float64(0x3FB5555555555555), status), in floatx80_logn()
565 status); /* B1+W*(B3+W*B5) */ in floatx80_logn()
567 fp0 = floatx80_mul(fp0, saveu, status); /* FP0 IS U*V */ in floatx80_logn()
568 fp1 = floatx80_add(fp1, fp2, status); /* B1+W*(B3+W*B5) + V*(B2+W*B4) */ in floatx80_logn()
570 status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */ in floatx80_logn()
572 status->float_rounding_mode = user_rnd_mode; in floatx80_logn()
573 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_logn()
575 a = floatx80_add(fp0, saveu, status); in floatx80_logn()
578 float_raise(float_flag_inexact, status); in floatx80_logn()
589 floatx80 floatx80_log10(floatx80 a, float_status *status) in floatx80_log10() argument
606 propagateFloatx80NaNOneArg(a, status); in floatx80_log10()
609 return floatx80_default_inf(0, status); in floatx80_log10()
614 float_raise(float_flag_divbyzero, status); in floatx80_log10()
615 return floatx80_default_inf(1, status); in floatx80_log10()
619 float_raise(float_flag_invalid, status); in floatx80_log10()
620 return floatx80_default_nan(status); in floatx80_log10()
623 user_rnd_mode = status->float_rounding_mode; in floatx80_log10()
624 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_log10()
625 status->float_rounding_mode = float_round_nearest_even; in floatx80_log10()
626 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_log10()
628 fp0 = floatx80_logn(a, status); in floatx80_log10()
631 status->float_rounding_mode = user_rnd_mode; in floatx80_log10()
632 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_log10()
634 a = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L10 */ in floatx80_log10()
636 float_raise(float_flag_inexact, status); in floatx80_log10()
645 floatx80 floatx80_log2(floatx80 a, float_status *status) in floatx80_log2() argument
662 propagateFloatx80NaNOneArg(a, status); in floatx80_log2()
665 return floatx80_default_inf(0, status); in floatx80_log2()
671 float_raise(float_flag_divbyzero, status); in floatx80_log2()
672 return floatx80_default_inf(1, status); in floatx80_log2()
678 float_raise(float_flag_invalid, status); in floatx80_log2()
679 return floatx80_default_nan(status); in floatx80_log2()
682 user_rnd_mode = status->float_rounding_mode; in floatx80_log2()
683 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_log2()
684 status->float_rounding_mode = float_round_nearest_even; in floatx80_log2()
685 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_log2()
688 status->float_rounding_mode = user_rnd_mode; in floatx80_log2()
689 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_log2()
691 a = int32_to_floatx80(aExp - 0x3FFF, status); in floatx80_log2()
693 fp0 = floatx80_logn(a, status); 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 = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L2 */ in floatx80_log2()
702 float_raise(float_flag_inexact, status); in floatx80_log2()
711 floatx80 floatx80_etox(floatx80 a, float_status *status) in floatx80_etox() argument
730 return propagateFloatx80NaNOneArg(a, status); in floatx80_etox()
735 return floatx80_default_inf(0, status); in floatx80_etox()
742 user_rnd_mode = status->float_rounding_mode; in floatx80_etox()
743 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_etox()
744 status->float_rounding_mode = float_round_nearest_even; in floatx80_etox()
745 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_etox()
756 make_float32(0x42B8AA3B), status), in floatx80_etox()
757 status); /* 64/log2 * X */ in floatx80_etox()
759 n = floatx80_to_int32(fp0, status); /* int(64/log2*X) */ in floatx80_etox()
760 fp0 = int32_to_floatx80(n, status); in floatx80_etox()
776 make_float32(0xBC317218), status), in floatx80_etox()
777 status); /* N * L1, L1 = lead(-log2/64) */ in floatx80_etox()
779 fp2 = floatx80_mul(fp2, l2, status); /* N * L2, L1+L2 = -log2/64 */ in floatx80_etox()
780 fp0 = floatx80_add(fp0, fp1, status); /* X + N*L1 */ in floatx80_etox()
781 fp0 = floatx80_add(fp0, fp2, status); /* R */ in floatx80_etox()
783 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_etox()
785 status); /* A5 */ in floatx80_etox()
786 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 is S*A5 */ in floatx80_etox()
788 status), fp1, in floatx80_etox()
789 status); /* fp3 is S*A4 */ in floatx80_etox()
791 0x3FA5555555554431), status), in floatx80_etox()
792 status); /* fp2 is A3+S*A5 */ in floatx80_etox()
794 0x3FC5555555554018), status), in floatx80_etox()
795 status); /* fp3 is A2+S*A4 */ in floatx80_etox()
796 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 is S*(A3+S*A5) */ in floatx80_etox()
797 fp3 = floatx80_mul(fp3, fp1, status); /* fp3 is S*(A2+S*A4) */ in floatx80_etox()
799 make_float32(0x3F000000), status), in floatx80_etox()
800 status); /* fp2 is A1+S*(A3+S*A5) */ in floatx80_etox()
801 fp3 = floatx80_mul(fp3, fp0, status); /* fp3 IS R*S*(A2+S*A4) */ in floatx80_etox()
803 status); /* fp2 IS S*(A1+S*(A3+S*A5)) */ in floatx80_etox()
804 fp0 = floatx80_add(fp0, fp3, status); /* fp0 IS R+R*S*(A2+S*A4) */ in floatx80_etox()
805 fp0 = floatx80_add(fp0, fp2, status); /* fp0 IS EXP(R) - 1 */ in floatx80_etox()
808 fp0 = floatx80_mul(fp0, fp1, status); /* 2^(J/64)*(Exp(R)-1) */ in floatx80_etox()
809 fp0 = floatx80_add(fp0, float32_to_floatx80(exp_tbl2[j], status), in floatx80_etox()
810 status); /* accurate 2^(J/64) */ in floatx80_etox()
812 status); /* 2^(J/64) + 2^(J/64)*(Exp(R)-1) */ in floatx80_etox()
817 fp0 = floatx80_mul(fp0, adjscale, status); in floatx80_etox()
820 status->float_rounding_mode = user_rnd_mode; in floatx80_etox()
821 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etox()
823 a = floatx80_mul(fp0, scale, status); in floatx80_etox()
825 float_raise(float_flag_inexact, status); in floatx80_etox()
830 status->float_rounding_mode = user_rnd_mode; in floatx80_etox()
831 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etox()
834 status->floatx80_rounding_precision, in floatx80_etox()
835 0, -0x1000, aSig, 0, status); in floatx80_etox()
838 status->floatx80_rounding_precision, in floatx80_etox()
839 0, 0x8000, aSig, 0, status); in floatx80_etox()
841 float_raise(float_flag_inexact, status); in floatx80_etox()
848 make_float32(0x42B8AA3B), status), in floatx80_etox()
849 status); /* 64/log2 * X */ in floatx80_etox()
851 n = floatx80_to_int32(fp0, status); /* int(64/log2*X) */ in floatx80_etox()
852 fp0 = int32_to_floatx80(n, status); in floatx80_etox()
879 status->float_rounding_mode = user_rnd_mode; in floatx80_etox()
880 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etox()
883 status), status); /* 1 + X */ in floatx80_etox()
885 float_raise(float_flag_inexact, status); in floatx80_etox()
895 floatx80 floatx80_twotox(floatx80 a, float_status *status) in floatx80_twotox() argument
913 return propagateFloatx80NaNOneArg(a, status); in floatx80_twotox()
918 return floatx80_default_inf(0, status); in floatx80_twotox()
925 user_rnd_mode = status->float_rounding_mode; in floatx80_twotox()
926 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_twotox()
927 status->float_rounding_mode = float_round_nearest_even; in floatx80_twotox()
928 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_twotox()
937 status->float_rounding_mode = user_rnd_mode; in floatx80_twotox()
938 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_twotox()
941 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_twotox()
942 0, -0x1000, aSig, 0, status); in floatx80_twotox()
944 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_twotox()
945 0, 0x8000, aSig, 0, status); in floatx80_twotox()
948 status->float_rounding_mode = user_rnd_mode; in floatx80_twotox()
949 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_twotox()
952 make_float32(0x3F800000), status), in floatx80_twotox()
953 status); /* 1 + X */ in floatx80_twotox()
955 float_raise(float_flag_inexact, status); in floatx80_twotox()
962 make_float32(0x42800000), status), in floatx80_twotox()
963 status); /* X * 64 */ in floatx80_twotox()
964 n = floatx80_to_int32(fp1, status); in floatx80_twotox()
965 fp1 = int32_to_floatx80(n, status); in floatx80_twotox()
995 make_float32(0x3C800000), status), in floatx80_twotox()
996 status); /* (1/64)*N */ in floatx80_twotox()
997 fp0 = floatx80_sub(fp0, fp1, status); /* X - (1/64)*INT(64 X) */ in floatx80_twotox()
999 fp0 = floatx80_mul(fp0, fp2, status); /* R */ in floatx80_twotox()
1002 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_twotox()
1004 status); /* A5 */ in floatx80_twotox()
1006 status); /* A4 */ in floatx80_twotox()
1007 fp2 = floatx80_mul(fp2, fp1, status); /* S*A5 */ in floatx80_twotox()
1008 fp3 = floatx80_mul(fp3, fp1, status); /* S*A4 */ in floatx80_twotox()
1010 make_float64(0x3FA5555555554CC1), status), in floatx80_twotox()
1011 status); /* A3+S*A5 */ in floatx80_twotox()
1013 make_float64(0x3FC5555555554A54), status), in floatx80_twotox()
1014 status); /* A2+S*A4 */ in floatx80_twotox()
1015 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A3+S*A5) */ in floatx80_twotox()
1016 fp3 = floatx80_mul(fp3, fp1, status); /* S*(A2+S*A4) */ in floatx80_twotox()
1018 make_float64(0x3FE0000000000000), status), in floatx80_twotox()
1019 status); /* A1+S*(A3+S*A5) */ in floatx80_twotox()
1020 fp3 = floatx80_mul(fp3, fp0, status); /* R*S*(A2+S*A4) */ in floatx80_twotox()
1022 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A1+S*(A3+S*A5)) */ in floatx80_twotox()
1023 fp0 = floatx80_add(fp0, fp3, status); /* R+R*S*(A2+S*A4) */ in floatx80_twotox()
1024 fp0 = floatx80_add(fp0, fp2, status); /* EXP(R) - 1 */ in floatx80_twotox()
1026 fp0 = floatx80_mul(fp0, fact1, status); in floatx80_twotox()
1027 fp0 = floatx80_add(fp0, fact2, status); in floatx80_twotox()
1028 fp0 = floatx80_add(fp0, fact1, status); in floatx80_twotox()
1030 status->float_rounding_mode = user_rnd_mode; in floatx80_twotox()
1031 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_twotox()
1033 a = floatx80_mul(fp0, adjfact, status); in floatx80_twotox()
1035 float_raise(float_flag_inexact, status); in floatx80_twotox()
1045 floatx80 floatx80_tentox(floatx80 a, float_status *status) in floatx80_tentox() argument
1063 return propagateFloatx80NaNOneArg(a, status); in floatx80_tentox()
1068 return floatx80_default_inf(0, status); in floatx80_tentox()
1075 user_rnd_mode = status->float_rounding_mode; in floatx80_tentox()
1076 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_tentox()
1077 status->float_rounding_mode = float_round_nearest_even; in floatx80_tentox()
1078 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_tentox()
1087 status->float_rounding_mode = user_rnd_mode; in floatx80_tentox()
1088 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tentox()
1091 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_tentox()
1092 0, -0x1000, aSig, 0, status); in floatx80_tentox()
1094 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_tentox()
1095 0, 0x8000, aSig, 0, status); 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 make_float32(0x3F800000), status), in floatx80_tentox()
1103 status); /* 1 + X */ in floatx80_tentox()
1105 float_raise(float_flag_inexact, status); in floatx80_tentox()
1113 status), status); /* X*64*LOG10/LOG2 */ in floatx80_tentox()
1114 n = floatx80_to_int32(fp1, status); /* N=INT(X*64*LOG10/LOG2) */ in floatx80_tentox()
1115 fp1 = int32_to_floatx80(n, status); in floatx80_tentox()
1147 make_float64(0x3F734413509F8000), status), in floatx80_tentox()
1148 status); /* N*(LOG2/64LOG10)_LEAD */ in floatx80_tentox()
1150 fp2 = floatx80_mul(fp2, fp3, status); /* N*(LOG2/64LOG10)_TRAIL */ in floatx80_tentox()
1151 fp0 = floatx80_sub(fp0, fp1, status); /* X - N L_LEAD */ in floatx80_tentox()
1152 fp0 = floatx80_sub(fp0, fp2, status); /* X - N L_TRAIL */ in floatx80_tentox()
1154 fp0 = floatx80_mul(fp0, fp2, status); /* R */ in floatx80_tentox()
1157 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_tentox()
1159 status); /* A5 */ in floatx80_tentox()
1161 status); /* A4 */ in floatx80_tentox()
1162 fp2 = floatx80_mul(fp2, fp1, status); /* S*A5 */ in floatx80_tentox()
1163 fp3 = floatx80_mul(fp3, fp1, status); /* S*A4 */ in floatx80_tentox()
1165 make_float64(0x3FA5555555554CC1), status), in floatx80_tentox()
1166 status); /* A3+S*A5 */ in floatx80_tentox()
1168 make_float64(0x3FC5555555554A54), status), in floatx80_tentox()
1169 status); /* A2+S*A4 */ in floatx80_tentox()
1170 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A3+S*A5) */ in floatx80_tentox()
1171 fp3 = floatx80_mul(fp3, fp1, status); /* S*(A2+S*A4) */ in floatx80_tentox()
1173 make_float64(0x3FE0000000000000), status), in floatx80_tentox()
1174 status); /* A1+S*(A3+S*A5) */ in floatx80_tentox()
1175 fp3 = floatx80_mul(fp3, fp0, status); /* R*S*(A2+S*A4) */ in floatx80_tentox()
1177 fp2 = floatx80_mul(fp2, fp1, status); /* S*(A1+S*(A3+S*A5)) */ in floatx80_tentox()
1178 fp0 = floatx80_add(fp0, fp3, status); /* R+R*S*(A2+S*A4) */ in floatx80_tentox()
1179 fp0 = floatx80_add(fp0, fp2, status); /* EXP(R) - 1 */ in floatx80_tentox()
1181 fp0 = floatx80_mul(fp0, fact1, status); in floatx80_tentox()
1182 fp0 = floatx80_add(fp0, fact2, status); in floatx80_tentox()
1183 fp0 = floatx80_add(fp0, fact1, status); in floatx80_tentox()
1185 status->float_rounding_mode = user_rnd_mode; in floatx80_tentox()
1186 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tentox()
1188 a = floatx80_mul(fp0, adjfact, status); in floatx80_tentox()
1190 float_raise(float_flag_inexact, status); in floatx80_tentox()
1200 floatx80 floatx80_tan(floatx80 a, float_status *status) in floatx80_tan() argument
1220 return propagateFloatx80NaNOneArg(a, status); in floatx80_tan()
1222 float_raise(float_flag_invalid, status); in floatx80_tan()
1223 return floatx80_default_nan(status); in floatx80_tan()
1230 user_rnd_mode = status->float_rounding_mode; in floatx80_tan()
1231 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_tan()
1232 status->float_rounding_mode = float_round_nearest_even; in floatx80_tan()
1233 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_tan()
1249 fp0 = floatx80_add(fp0, twopi1, status); in floatx80_tan()
1251 fp0 = floatx80_add(fp0, twopi2, status); in floatx80_tan()
1252 fp1 = floatx80_sub(fp1, fp0, status); in floatx80_tan()
1253 fp1 = floatx80_add(fp1, twopi2, status); in floatx80_tan()
1274 fp2 = floatx80_mul(fp0, invtwopi, status); in floatx80_tan()
1275 fp2 = floatx80_add(fp2, float32_to_floatx80(twoto63, status), in floatx80_tan()
1276 status); /* THE FRACT PART OF FP2 IS ROUNDED */ in floatx80_tan()
1277 fp2 = floatx80_sub(fp2, float32_to_floatx80(twoto63, status), in floatx80_tan()
1278 status); /* FP2 is N */ in floatx80_tan()
1279 fp4 = floatx80_mul(twopi1, fp2, status); /* W = N*P1 */ in floatx80_tan()
1280 fp5 = floatx80_mul(twopi2, fp2, status); /* w = N*P2 */ in floatx80_tan()
1281 fp3 = floatx80_add(fp4, fp5, status); /* FP3 is P */ in floatx80_tan()
1282 fp4 = floatx80_sub(fp4, fp3, status); /* W-P */ in floatx80_tan()
1283 fp0 = floatx80_sub(fp0, fp3, status); /* FP0 is A := R - P */ in floatx80_tan()
1284 fp4 = floatx80_add(fp4, fp5, status); /* FP4 is p = (W-P)+w */ in floatx80_tan()
1286 fp1 = floatx80_sub(fp1, fp4, status); /* FP1 is a := r - p */ in floatx80_tan()
1287 fp0 = floatx80_add(fp0, fp1, status); /* FP0 is R := A+a */ in floatx80_tan()
1290 n = floatx80_to_int32(fp2, status); in floatx80_tan()
1293 fp3 = floatx80_sub(fp3, fp0, status); /* A-R */ in floatx80_tan()
1294 fp1 = floatx80_add(fp1, fp3, status); /* FP1 is r := (A-R)+a */ in floatx80_tan()
1297 status->float_rounding_mode = user_rnd_mode; in floatx80_tan()
1298 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tan()
1300 a = floatx80_move(a, status); in floatx80_tan()
1302 float_raise(float_flag_inexact, status); in floatx80_tan()
1308 make_float64(0x3FE45F306DC9C883), status), in floatx80_tan()
1309 status); /* X*2/PI */ in floatx80_tan()
1311 n = floatx80_to_int32(fp1, status); in floatx80_tan()
1314 fp0 = floatx80_sub(fp0, pi_tbl[j], status); /* X-Y1 */ in floatx80_tan()
1315 fp0 = floatx80_sub(fp0, float32_to_floatx80(pi_tbl2[j], status), in floatx80_tan()
1316 status); /* FP0 IS R = (X-Y1)-Y2 */ in floatx80_tan()
1322 fp0 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_tan()
1324 status); /* Q4 */ in floatx80_tan()
1326 status); /* P3 */ in floatx80_tan()
1327 fp3 = floatx80_mul(fp3, fp0, status); /* SQ4 */ in floatx80_tan()
1328 fp2 = floatx80_mul(fp2, fp0, status); /* SP3 */ in floatx80_tan()
1330 make_float64(0xBF346F59B39BA65F), status), in floatx80_tan()
1331 status); /* Q3+SQ4 */ in floatx80_tan()
1333 fp2 = floatx80_add(fp2, fp4, status); /* P2+SP3 */ in floatx80_tan()
1334 fp3 = floatx80_mul(fp3, fp0, status); /* S(Q3+SQ4) */ in floatx80_tan()
1335 fp2 = floatx80_mul(fp2, fp0, status); /* S(P2+SP3) */ in floatx80_tan()
1337 fp3 = floatx80_add(fp3, fp4, status); /* Q2+S(Q3+SQ4) */ in floatx80_tan()
1339 fp2 = floatx80_add(fp2, fp4, status); /* P1+S(P2+SP3) */ in floatx80_tan()
1340 fp3 = floatx80_mul(fp3, fp0, status); /* S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1341 fp2 = floatx80_mul(fp2, fp0, status); /* S(P1+S(P2+SP3)) */ in floatx80_tan()
1343 fp3 = floatx80_add(fp3, fp4, status); /* Q1+S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1344 fp2 = floatx80_mul(fp2, fp1, status); /* RS(P1+S(P2+SP3)) */ in floatx80_tan()
1345 fp0 = floatx80_mul(fp0, fp3, status); /* S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1346 fp1 = floatx80_add(fp1, fp2, status); /* R+RS(P1+S(P2+SP3)) */ in floatx80_tan()
1348 make_float32(0x3F800000), status), in floatx80_tan()
1349 status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1357 status->float_rounding_mode = user_rnd_mode; in floatx80_tan()
1358 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tan()
1360 a = floatx80_div(fp0, fp1, status); in floatx80_tan()
1362 float_raise(float_flag_inexact, status); in floatx80_tan()
1366 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_tan()
1368 status); /* Q4 */ in floatx80_tan()
1370 status); /* P3 */ in floatx80_tan()
1371 fp3 = floatx80_mul(fp3, fp1, status); /* SQ4 */ in floatx80_tan()
1372 fp2 = floatx80_mul(fp2, fp1, status); /* SP3 */ in floatx80_tan()
1374 make_float64(0xBF346F59B39BA65F), status), in floatx80_tan()
1375 status); /* Q3+SQ4 */ in floatx80_tan()
1377 fp2 = floatx80_add(fp2, fp4, status); /* P2+SP3 */ in floatx80_tan()
1378 fp3 = floatx80_mul(fp3, fp1, status); /* S(Q3+SQ4) */ in floatx80_tan()
1379 fp2 = floatx80_mul(fp2, fp1, status); /* S(P2+SP3) */ in floatx80_tan()
1381 fp3 = floatx80_add(fp3, fp4, status); /* Q2+S(Q3+SQ4) */ in floatx80_tan()
1383 fp2 = floatx80_add(fp2, fp4, status); /* P1+S(P2+SP3) */ in floatx80_tan()
1384 fp3 = floatx80_mul(fp3, fp1, status); /* S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1385 fp2 = floatx80_mul(fp2, fp1, status); /* S(P1+S(P2+SP3)) */ in floatx80_tan()
1387 fp3 = floatx80_add(fp3, fp4, status); /* Q1+S(Q2+S(Q3+SQ4)) */ in floatx80_tan()
1388 fp2 = floatx80_mul(fp2, fp0, status); /* RS(P1+S(P2+SP3)) */ in floatx80_tan()
1389 fp1 = floatx80_mul(fp1, fp3, status); /* S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1390 fp0 = floatx80_add(fp0, fp2, status); /* R+RS(P1+S(P2+SP3)) */ in floatx80_tan()
1392 make_float32(0x3F800000), status), in floatx80_tan()
1393 status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */ in floatx80_tan()
1395 status->float_rounding_mode = user_rnd_mode; in floatx80_tan()
1396 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tan()
1398 a = floatx80_div(fp0, fp1, status); in floatx80_tan()
1400 float_raise(float_flag_inexact, status); in floatx80_tan()
1411 floatx80 floatx80_sin(floatx80 a, float_status *status) in floatx80_sin() argument
1431 return propagateFloatx80NaNOneArg(a, status); in floatx80_sin()
1433 float_raise(float_flag_invalid, status); in floatx80_sin()
1434 return floatx80_default_nan(status); in floatx80_sin()
1441 user_rnd_mode = status->float_rounding_mode; in floatx80_sin()
1442 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_sin()
1443 status->float_rounding_mode = float_round_nearest_even; in floatx80_sin()
1444 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_sin()
1460 fp0 = floatx80_add(fp0, twopi1, status); in floatx80_sin()
1462 fp0 = floatx80_add(fp0, twopi2, status); in floatx80_sin()
1463 fp1 = floatx80_sub(fp1, fp0, status); in floatx80_sin()
1464 fp1 = floatx80_add(fp1, twopi2, status); in floatx80_sin()
1485 fp2 = floatx80_mul(fp0, invtwopi, status); in floatx80_sin()
1486 fp2 = floatx80_add(fp2, float32_to_floatx80(twoto63, status), in floatx80_sin()
1487 status); /* THE FRACT PART OF FP2 IS ROUNDED */ in floatx80_sin()
1488 fp2 = floatx80_sub(fp2, float32_to_floatx80(twoto63, status), in floatx80_sin()
1489 status); /* FP2 is N */ in floatx80_sin()
1490 fp4 = floatx80_mul(twopi1, fp2, status); /* W = N*P1 */ in floatx80_sin()
1491 fp5 = floatx80_mul(twopi2, fp2, status); /* w = N*P2 */ in floatx80_sin()
1492 fp3 = floatx80_add(fp4, fp5, status); /* FP3 is P */ in floatx80_sin()
1493 fp4 = floatx80_sub(fp4, fp3, status); /* W-P */ in floatx80_sin()
1494 fp0 = floatx80_sub(fp0, fp3, status); /* FP0 is A := R - P */ in floatx80_sin()
1495 fp4 = floatx80_add(fp4, fp5, status); /* FP4 is p = (W-P)+w */ in floatx80_sin()
1497 fp1 = floatx80_sub(fp1, fp4, status); /* FP1 is a := r - p */ in floatx80_sin()
1498 fp0 = floatx80_add(fp0, fp1, status); /* FP0 is R := A+a */ in floatx80_sin()
1501 n = floatx80_to_int32(fp2, status); in floatx80_sin()
1504 fp3 = floatx80_sub(fp3, fp0, status); /* A-R */ in floatx80_sin()
1505 fp1 = floatx80_add(fp1, fp3, status); /* FP1 is r := (A-R)+a */ in floatx80_sin()
1510 status); /* 1 */ in floatx80_sin()
1512 status->float_rounding_mode = user_rnd_mode; in floatx80_sin()
1513 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sin()
1516 a = floatx80_move(a, status); in floatx80_sin()
1517 float_raise(float_flag_inexact, status); in floatx80_sin()
1523 make_float64(0x3FE45F306DC9C883), status), in floatx80_sin()
1524 status); /* X*2/PI */ in floatx80_sin()
1526 n = floatx80_to_int32(fp1, status); in floatx80_sin()
1529 fp0 = floatx80_sub(fp0, pi_tbl[j], status); /* X-Y1 */ in floatx80_sin()
1530 fp0 = floatx80_sub(fp0, float32_to_floatx80(pi_tbl2[j], status), in floatx80_sin()
1531 status); /* FP0 IS R = (X-Y1)-Y2 */ in floatx80_sin()
1536 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_sin()
1537 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_sin()
1539 status); /* B8 */ in floatx80_sin()
1541 status); /* B7 */ in floatx80_sin()
1555 fp2 = floatx80_mul(fp2, fp1, status); /* TB8 */ in floatx80_sin()
1556 fp3 = floatx80_mul(fp3, fp1, status); /* TB7 */ in floatx80_sin()
1558 make_float64(0x3E21EED90612C972), status), in floatx80_sin()
1559 status); /* B6+TB8 */ in floatx80_sin()
1561 make_float64(0xBE927E4FB79D9FCF), status), in floatx80_sin()
1562 status); /* B5+TB7 */ in floatx80_sin()
1563 fp2 = floatx80_mul(fp2, fp1, status); /* T(B6+TB8) */ in floatx80_sin()
1564 fp3 = floatx80_mul(fp3, fp1, status); /* T(B5+TB7) */ in floatx80_sin()
1566 make_float64(0x3EFA01A01A01D423), status), in floatx80_sin()
1567 status); /* B4+T(B6+TB8) */ in floatx80_sin()
1569 fp3 = floatx80_add(fp3, fp4, status); /* B3+T(B5+TB7) */ in floatx80_sin()
1570 fp2 = floatx80_mul(fp2, fp1, status); /* T(B4+T(B6+TB8)) */ in floatx80_sin()
1571 fp1 = floatx80_mul(fp1, fp3, status); /* T(B3+T(B5+TB7)) */ in floatx80_sin()
1573 fp2 = floatx80_add(fp2, fp4, status); /* B2+T(B4+T(B6+TB8)) */ in floatx80_sin()
1575 make_float32(0xBF000000), status), in floatx80_sin()
1576 status); /* B1+T(B3+T(B5+TB7)) */ in floatx80_sin()
1577 fp0 = floatx80_mul(fp0, fp2, status); /* S(B2+T(B4+T(B6+TB8))) */ in floatx80_sin()
1578 fp0 = floatx80_add(fp0, fp1, status); /* [B1+T(B3+T(B5+TB7))]+ in floatx80_sin()
1583 fp0 = floatx80_mul(fp0, x, status); in floatx80_sin()
1585 status->float_rounding_mode = user_rnd_mode; in floatx80_sin()
1586 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sin()
1588 a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status); in floatx80_sin()
1590 float_raise(float_flag_inexact, status); in floatx80_sin()
1601 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_sin()
1602 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_sin()
1604 status); /* A7 */ in floatx80_sin()
1606 status); /* A6 */ in floatx80_sin()
1607 fp3 = floatx80_mul(fp3, fp1, status); /* T*A7 */ in floatx80_sin()
1608 fp2 = floatx80_mul(fp2, fp1, status); /* T*A6 */ in floatx80_sin()
1610 make_float64(0xBE5AE6452A118AE4), status), in floatx80_sin()
1611 status); /* A5+T*A7 */ in floatx80_sin()
1613 make_float64(0x3EC71DE3A5341531), status), in floatx80_sin()
1614 status); /* A4+T*A6 */ in floatx80_sin()
1615 fp3 = floatx80_mul(fp3, fp1, status); /* T(A5+TA7) */ in floatx80_sin()
1616 fp2 = floatx80_mul(fp2, fp1, status); /* T(A4+TA6) */ in floatx80_sin()
1618 make_float64(0xBF2A01A01A018B59), status), in floatx80_sin()
1619 status); /* A3+T(A5+TA7) */ in floatx80_sin()
1621 fp2 = floatx80_add(fp2, fp4, status); /* A2+T(A4+TA6) */ in floatx80_sin()
1622 fp1 = floatx80_mul(fp1, fp3, status); /* T(A3+T(A5+TA7)) */ in floatx80_sin()
1623 fp2 = floatx80_mul(fp2, fp0, status); /* S(A2+T(A4+TA6)) */ in floatx80_sin()
1625 fp1 = floatx80_add(fp1, fp4, status); /* A1+T(A3+T(A5+TA7)) */ in floatx80_sin()
1627 status); /* [A1+T(A3+T(A5+TA7))]+ in floatx80_sin()
1632 fp0 = floatx80_mul(fp0, x, status); /* R'*S */ in floatx80_sin()
1633 fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ in floatx80_sin()
1635 status->float_rounding_mode = user_rnd_mode; in floatx80_sin()
1636 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sin()
1638 a = floatx80_add(fp0, x, status); in floatx80_sin()
1640 float_raise(float_flag_inexact, status); in floatx80_sin()
1651 floatx80 floatx80_cos(floatx80 a, float_status *status) in floatx80_cos() argument
1671 return propagateFloatx80NaNOneArg(a, status); in floatx80_cos()
1673 float_raise(float_flag_invalid, status); in floatx80_cos()
1674 return floatx80_default_nan(status); in floatx80_cos()
1681 user_rnd_mode = status->float_rounding_mode; in floatx80_cos()
1682 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_cos()
1683 status->float_rounding_mode = float_round_nearest_even; in floatx80_cos()
1684 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_cos()
1700 fp0 = floatx80_add(fp0, twopi1, status); in floatx80_cos()
1702 fp0 = floatx80_add(fp0, twopi2, status); in floatx80_cos()
1703 fp1 = floatx80_sub(fp1, fp0, status); in floatx80_cos()
1704 fp1 = floatx80_add(fp1, twopi2, status); in floatx80_cos()
1725 fp2 = floatx80_mul(fp0, invtwopi, status); in floatx80_cos()
1726 fp2 = floatx80_add(fp2, float32_to_floatx80(twoto63, status), in floatx80_cos()
1727 status); /* THE FRACT PART OF FP2 IS ROUNDED */ in floatx80_cos()
1728 fp2 = floatx80_sub(fp2, float32_to_floatx80(twoto63, status), in floatx80_cos()
1729 status); /* FP2 is N */ in floatx80_cos()
1730 fp4 = floatx80_mul(twopi1, fp2, status); /* W = N*P1 */ in floatx80_cos()
1731 fp5 = floatx80_mul(twopi2, fp2, status); /* w = N*P2 */ in floatx80_cos()
1732 fp3 = floatx80_add(fp4, fp5, status); /* FP3 is P */ in floatx80_cos()
1733 fp4 = floatx80_sub(fp4, fp3, status); /* W-P */ in floatx80_cos()
1734 fp0 = floatx80_sub(fp0, fp3, status); /* FP0 is A := R - P */ in floatx80_cos()
1735 fp4 = floatx80_add(fp4, fp5, status); /* FP4 is p = (W-P)+w */ in floatx80_cos()
1737 fp1 = floatx80_sub(fp1, fp4, status); /* FP1 is a := r - p */ in floatx80_cos()
1738 fp0 = floatx80_add(fp0, fp1, status); /* FP0 is R := A+a */ in floatx80_cos()
1741 n = floatx80_to_int32(fp2, status); in floatx80_cos()
1744 fp3 = floatx80_sub(fp3, fp0, status); /* A-R */ in floatx80_cos()
1745 fp1 = floatx80_add(fp1, fp3, status); /* FP1 is r := (A-R)+a */ in floatx80_cos()
1749 fp0 = float32_to_floatx80(make_float32(0x3F800000), status); /* 1 */ in floatx80_cos()
1751 status->float_rounding_mode = user_rnd_mode; in floatx80_cos()
1752 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cos()
1756 make_float32(0x00800000), status), in floatx80_cos()
1757 status); in floatx80_cos()
1758 float_raise(float_flag_inexact, status); in floatx80_cos()
1764 make_float64(0x3FE45F306DC9C883), status), in floatx80_cos()
1765 status); /* X*2/PI */ in floatx80_cos()
1767 n = floatx80_to_int32(fp1, status); in floatx80_cos()
1770 fp0 = floatx80_sub(fp0, pi_tbl[j], status); /* X-Y1 */ in floatx80_cos()
1771 fp0 = floatx80_sub(fp0, float32_to_floatx80(pi_tbl2[j], status), in floatx80_cos()
1772 status); /* FP0 IS R = (X-Y1)-Y2 */ in floatx80_cos()
1777 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_cos()
1778 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_cos()
1780 status); /* B8 */ in floatx80_cos()
1782 status); /* B7 */ in floatx80_cos()
1796 fp2 = floatx80_mul(fp2, fp1, status); /* TB8 */ in floatx80_cos()
1797 fp3 = floatx80_mul(fp3, fp1, status); /* TB7 */ in floatx80_cos()
1799 make_float64(0x3E21EED90612C972), status), in floatx80_cos()
1800 status); /* B6+TB8 */ in floatx80_cos()
1802 make_float64(0xBE927E4FB79D9FCF), status), in floatx80_cos()
1803 status); /* B5+TB7 */ in floatx80_cos()
1804 fp2 = floatx80_mul(fp2, fp1, status); /* T(B6+TB8) */ in floatx80_cos()
1805 fp3 = floatx80_mul(fp3, fp1, status); /* T(B5+TB7) */ in floatx80_cos()
1807 make_float64(0x3EFA01A01A01D423), status), in floatx80_cos()
1808 status); /* B4+T(B6+TB8) */ in floatx80_cos()
1810 fp3 = floatx80_add(fp3, fp4, status); /* B3+T(B5+TB7) */ in floatx80_cos()
1811 fp2 = floatx80_mul(fp2, fp1, status); /* T(B4+T(B6+TB8)) */ in floatx80_cos()
1812 fp1 = floatx80_mul(fp1, fp3, status); /* T(B3+T(B5+TB7)) */ in floatx80_cos()
1814 fp2 = floatx80_add(fp2, fp4, status); /* B2+T(B4+T(B6+TB8)) */ in floatx80_cos()
1816 make_float32(0xBF000000), status), in floatx80_cos()
1817 status); /* B1+T(B3+T(B5+TB7)) */ in floatx80_cos()
1818 fp0 = floatx80_mul(fp0, fp2, status); /* S(B2+T(B4+T(B6+TB8))) */ in floatx80_cos()
1819 fp0 = floatx80_add(fp0, fp1, status); in floatx80_cos()
1823 fp0 = floatx80_mul(fp0, x, status); in floatx80_cos()
1825 status->float_rounding_mode = user_rnd_mode; in floatx80_cos()
1826 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cos()
1828 a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status); in floatx80_cos()
1830 float_raise(float_flag_inexact, status); in floatx80_cos()
1841 fp0 = floatx80_mul(fp0, fp0, status); /* FP0 IS S */ in floatx80_cos()
1842 fp1 = floatx80_mul(fp0, fp0, status); /* FP1 IS T */ in floatx80_cos()
1844 status); /* A7 */ in floatx80_cos()
1846 status); /* A6 */ in floatx80_cos()
1847 fp3 = floatx80_mul(fp3, fp1, status); /* T*A7 */ in floatx80_cos()
1848 fp2 = floatx80_mul(fp2, fp1, status); /* T*A6 */ in floatx80_cos()
1850 make_float64(0xBE5AE6452A118AE4), status), in floatx80_cos()
1851 status); /* A5+T*A7 */ in floatx80_cos()
1853 make_float64(0x3EC71DE3A5341531), status), in floatx80_cos()
1854 status); /* A4+T*A6 */ in floatx80_cos()
1855 fp3 = floatx80_mul(fp3, fp1, status); /* T(A5+TA7) */ in floatx80_cos()
1856 fp2 = floatx80_mul(fp2, fp1, status); /* T(A4+TA6) */ in floatx80_cos()
1858 make_float64(0xBF2A01A01A018B59), status), in floatx80_cos()
1859 status); /* A3+T(A5+TA7) */ in floatx80_cos()
1861 fp2 = floatx80_add(fp2, fp4, status); /* A2+T(A4+TA6) */ in floatx80_cos()
1862 fp1 = floatx80_mul(fp1, fp3, status); /* T(A3+T(A5+TA7)) */ in floatx80_cos()
1863 fp2 = floatx80_mul(fp2, fp0, status); /* S(A2+T(A4+TA6)) */ in floatx80_cos()
1865 fp1 = floatx80_add(fp1, fp4, status); /* A1+T(A3+T(A5+TA7)) */ in floatx80_cos()
1866 fp1 = floatx80_add(fp1, fp2, status); in floatx80_cos()
1870 fp0 = floatx80_mul(fp0, x, status); /* R'*S */ in floatx80_cos()
1871 fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */ in floatx80_cos()
1873 status->float_rounding_mode = user_rnd_mode; in floatx80_cos()
1874 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cos()
1876 a = floatx80_add(fp0, x, status); in floatx80_cos()
1878 float_raise(float_flag_inexact, status); in floatx80_cos()
1889 floatx80 floatx80_atan(floatx80 a, float_status *status) in floatx80_atan() argument
1907 return propagateFloatx80NaNOneArg(a, status); in floatx80_atan()
1910 float_raise(float_flag_inexact, status); in floatx80_atan()
1911 return floatx80_move(a, status); in floatx80_atan()
1920 user_rnd_mode = status->float_rounding_mode; in floatx80_atan()
1921 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_atan()
1922 status->float_rounding_mode = float_round_nearest_even; in floatx80_atan()
1923 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_atan()
1932 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
1933 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
1935 a = floatx80_sub(fp0, fp1, status); in floatx80_atan()
1937 float_raise(float_flag_inexact, status); in floatx80_atan()
1943 fp1 = floatx80_div(fp1, fp0, status); /* X' = -1/X */ in floatx80_atan()
1945 fp0 = floatx80_mul(fp1, fp1, status); /* Y = X'*X' */ in floatx80_atan()
1946 fp1 = floatx80_mul(fp0, fp0, status); /* Z = Y*Y */ in floatx80_atan()
1948 status); /* C5 */ in floatx80_atan()
1950 status); /* C4 */ in floatx80_atan()
1951 fp3 = floatx80_mul(fp3, fp1, status); /* Z*C5 */ in floatx80_atan()
1952 fp2 = floatx80_mul(fp2, fp1, status); /* Z*C4 */ in floatx80_atan()
1954 make_float64(0xBFC24924827107B8), status), in floatx80_atan()
1955 status); /* C3+Z*C5 */ in floatx80_atan()
1957 make_float64(0x3FC999999996263E), status), in floatx80_atan()
1958 status); /* C2+Z*C4 */ in floatx80_atan()
1959 fp1 = floatx80_mul(fp1, fp3, status); /* Z*(C3+Z*C5) */ in floatx80_atan()
1960 fp2 = floatx80_mul(fp2, fp0, status); /* Y*(C2+Z*C4) */ in floatx80_atan()
1962 make_float64(0xBFD5555555555536), status), in floatx80_atan()
1963 status); /* C1+Z*(C3+Z*C5) */ in floatx80_atan()
1964 fp0 = floatx80_mul(fp0, xsave, status); /* X'*Y */ in floatx80_atan()
1966 fp1 = floatx80_add(fp1, fp2, status); in floatx80_atan()
1968 fp0 = floatx80_mul(fp0, fp1, status); in floatx80_atan()
1969 fp0 = floatx80_add(fp0, xsave, status); in floatx80_atan()
1972 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
1973 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
1975 a = floatx80_add(fp0, fp1, status); in floatx80_atan()
1977 float_raise(float_flag_inexact, 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_move(a, status); in floatx80_atan()
1988 float_raise(float_flag_inexact, status); in floatx80_atan()
1994 fp0 = floatx80_mul(fp0, fp0, status); /* Y = X*X */ in floatx80_atan()
1995 fp1 = floatx80_mul(fp0, fp0, status); /* Z = Y*Y */ in floatx80_atan()
1997 status); /* B6 */ in floatx80_atan()
1999 status); /* B5 */ in floatx80_atan()
2000 fp2 = floatx80_mul(fp2, fp1, status); /* Z*B6 */ in floatx80_atan()
2001 fp3 = floatx80_mul(fp3, fp1, status); /* Z*B5 */ in floatx80_atan()
2003 make_float64(0x3FBC71C646940220), status), in floatx80_atan()
2004 status); /* B4+Z*B6 */ in floatx80_atan()
2007 status), status); /* B3+Z*B5 */ in floatx80_atan()
2008 fp2 = floatx80_mul(fp2, fp1, status); /* Z*(B4+Z*B6) */ in floatx80_atan()
2009 fp1 = floatx80_mul(fp1, fp3, status); /* Z*(B3+Z*B5) */ in floatx80_atan()
2011 make_float64(0x3FC9999999998FA9), status), in floatx80_atan()
2012 status); /* B2+Z*(B4+Z*B6) */ in floatx80_atan()
2014 make_float64(0xBFD5555555555555), status), in floatx80_atan()
2015 status); /* B1+Z*(B3+Z*B5) */ in floatx80_atan()
2016 fp2 = floatx80_mul(fp2, fp0, status); /* Y*(B2+Z*(B4+Z*B6)) */ in floatx80_atan()
2017 fp0 = floatx80_mul(fp0, xsave, status); /* X*Y */ in floatx80_atan()
2019 fp1 = floatx80_add(fp1, fp2, status); in floatx80_atan()
2021 fp0 = floatx80_mul(fp0, fp1, status); in floatx80_atan()
2023 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
2024 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
2026 a = floatx80_add(fp0, xsave, status); in floatx80_atan()
2028 float_raise(float_flag_inexact, status); in floatx80_atan()
2040 fp1 = floatx80_mul(fp1, xsave, status); /* X*F */ in floatx80_atan()
2041 fp0 = floatx80_sub(fp0, xsave, status); /* X-F */ in floatx80_atan()
2042 fp1 = floatx80_add(fp1, fp2, status); /* 1 + X*F */ in floatx80_atan()
2043 fp0 = floatx80_div(fp0, fp1, status); /* U = (X-F)/(1+X*F) */ in floatx80_atan()
2057 fp1 = floatx80_mul(fp0, fp0, status); /* V = U*U */ in floatx80_atan()
2059 status); /* A3 */ in floatx80_atan()
2060 fp2 = floatx80_add(fp2, fp1, status); /* A3+V */ in floatx80_atan()
2061 fp2 = floatx80_mul(fp2, fp1, status); /* V*(A3+V) */ in floatx80_atan()
2062 fp1 = floatx80_mul(fp1, fp0, status); /* U*V */ in floatx80_atan()
2064 make_float64(0x4002AC6934A26DB3), status), in floatx80_atan()
2065 status); /* A2+V*(A3+V) */ in floatx80_atan()
2067 make_float64(0xBFC2476F4E1DA28E), status), in floatx80_atan()
2068 status); /* A1+U*V */ in floatx80_atan()
2069 fp1 = floatx80_mul(fp1, fp2, status); /* A1*U*V*(A2+V*(A3+V)) */ in floatx80_atan()
2070 fp0 = floatx80_add(fp0, fp1, status); /* ATAN(U) */ in floatx80_atan()
2072 status->float_rounding_mode = user_rnd_mode; in floatx80_atan()
2073 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atan()
2075 a = floatx80_add(fp0, fp3, status); /* ATAN(X) */ in floatx80_atan()
2077 float_raise(float_flag_inexact, status); in floatx80_atan()
2087 floatx80 floatx80_asin(floatx80 a, float_status *status) in floatx80_asin() argument
2104 return propagateFloatx80NaNOneArg(a, status); in floatx80_asin()
2115 float_raise(float_flag_inexact, status); in floatx80_asin()
2117 return floatx80_move(a, status); in floatx80_asin()
2119 float_raise(float_flag_invalid, status); in floatx80_asin()
2120 return floatx80_default_nan(status); in floatx80_asin()
2125 user_rnd_mode = status->float_rounding_mode; in floatx80_asin()
2126 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_asin()
2127 status->float_rounding_mode = float_round_nearest_even; in floatx80_asin()
2128 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_asin()
2133 fp1 = floatx80_sub(one, fp0, status); /* 1 - X */ in floatx80_asin()
2134 fp2 = floatx80_add(one, fp0, status); /* 1 + X */ in floatx80_asin()
2135 fp1 = floatx80_mul(fp2, fp1, status); /* (1+X)*(1-X) */ in floatx80_asin()
2136 fp1 = floatx80_sqrt(fp1, status); /* SQRT((1+X)*(1-X)) */ in floatx80_asin()
2137 fp0 = floatx80_div(fp0, fp1, status); /* X/SQRT((1+X)*(1-X)) */ in floatx80_asin()
2139 status->float_rounding_mode = user_rnd_mode; in floatx80_asin()
2140 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_asin()
2142 a = floatx80_atan(fp0, status); /* ATAN(X/SQRT((1+X)*(1-X))) */ in floatx80_asin()
2144 float_raise(float_flag_inexact, status); in floatx80_asin()
2153 floatx80 floatx80_acos(floatx80 a, float_status *status) in floatx80_acos() argument
2170 return propagateFloatx80NaNOneArg(a, status); in floatx80_acos()
2173 float_raise(float_flag_inexact, status); in floatx80_acos()
2174 return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, in floatx80_acos()
2175 piby2_exp, pi_sig, 0, status); in floatx80_acos()
2184 float_raise(float_flag_inexact, status); in floatx80_acos()
2185 return floatx80_move(a, status); in floatx80_acos()
2190 float_raise(float_flag_invalid, status); in floatx80_acos()
2191 return floatx80_default_nan(status); in floatx80_acos()
2195 user_rnd_mode = status->float_rounding_mode; in floatx80_acos()
2196 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_acos()
2197 status->float_rounding_mode = float_round_nearest_even; in floatx80_acos()
2198 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_acos()
2203 fp1 = floatx80_add(one, fp0, status); /* 1 + X */ in floatx80_acos()
2204 fp0 = floatx80_sub(one, fp0, status); /* 1 - X */ in floatx80_acos()
2205 fp0 = floatx80_div(fp0, fp1, status); /* (1-X)/(1+X) */ in floatx80_acos()
2206 fp0 = floatx80_sqrt(fp0, status); /* SQRT((1-X)/(1+X)) */ in floatx80_acos()
2207 fp0 = floatx80_atan(fp0, status); /* ATAN(SQRT((1-X)/(1+X))) */ in floatx80_acos()
2209 status->float_rounding_mode = user_rnd_mode; in floatx80_acos()
2210 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_acos()
2212 a = floatx80_add(fp0, fp0, status); /* 2 * ATAN(SQRT((1-X)/(1+X))) */ in floatx80_acos()
2214 float_raise(float_flag_inexact, status); in floatx80_acos()
2223 floatx80 floatx80_atanh(floatx80 a, float_status *status) in floatx80_atanh() argument
2240 return propagateFloatx80NaNOneArg(a, status); in floatx80_atanh()
2251 float_raise(float_flag_divbyzero, status); in floatx80_atanh()
2252 return floatx80_default_inf(aSign, status); in floatx80_atanh()
2254 float_raise(float_flag_invalid, status); in floatx80_atanh()
2255 return floatx80_default_nan(status); in floatx80_atanh()
2259 user_rnd_mode = status->float_rounding_mode; in floatx80_atanh()
2260 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_atanh()
2261 status->float_rounding_mode = float_round_nearest_even; in floatx80_atanh()
2262 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_atanh()
2268 fp0 = floatx80_add(fp0, fp0, status); /* 2Y */ in floatx80_atanh()
2269 fp1 = floatx80_add(fp1, one, status); /* 1-Y */ in floatx80_atanh()
2270 fp0 = floatx80_div(fp0, fp1, status); /* Z = 2Y/(1-Y) */ in floatx80_atanh()
2271 fp0 = floatx80_lognp1(fp0, status); /* LOG1P(Z) */ in floatx80_atanh()
2273 status->float_rounding_mode = user_rnd_mode; in floatx80_atanh()
2274 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_atanh()
2277 status); /* ATANH(X) = SIGN(X) * (1/2) * LOG1P(Z) */ in floatx80_atanh()
2279 float_raise(float_flag_inexact, status); in floatx80_atanh()
2288 floatx80 floatx80_etoxm1(floatx80 a, float_status *status) in floatx80_etoxm1() argument
2306 return propagateFloatx80NaNOneArg(a, status); in floatx80_etoxm1()
2311 return floatx80_default_inf(0, status); in floatx80_etoxm1()
2318 user_rnd_mode = status->float_rounding_mode; in floatx80_etoxm1()
2319 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_etoxm1()
2320 status->float_rounding_mode = float_round_nearest_even; in floatx80_etoxm1()
2321 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_etoxm1()
2330 make_float32(0x42B8AA3B), status), in floatx80_etoxm1()
2331 status); /* 64/log2 * X */ in floatx80_etoxm1()
2332 n = floatx80_to_int32(fp0, status); /* int(64/log2*X) */ in floatx80_etoxm1()
2333 fp0 = int32_to_floatx80(n, status); in floatx80_etoxm1()
2350 make_float32(0xBC317218), status), in floatx80_etoxm1()
2351 status); /* N * L1, L1 = lead(-log2/64) */ in floatx80_etoxm1()
2353 fp2 = floatx80_mul(fp2, l2, status); /* N * L2, L1+L2 = -log2/64 */ in floatx80_etoxm1()
2354 fp0 = floatx80_add(fp0, fp1, status); /* X + N*L1 */ in floatx80_etoxm1()
2355 fp0 = floatx80_add(fp0, fp2, status); /* R */ in floatx80_etoxm1()
2357 fp1 = floatx80_mul(fp0, fp0, status); /* S = R*R */ in floatx80_etoxm1()
2359 status); /* A6 */ in floatx80_etoxm1()
2360 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 is S*A6 */ in floatx80_etoxm1()
2362 status), fp1, status); /* fp3 is S*A5 */ in floatx80_etoxm1()
2364 make_float64(0x3F81111111174385), status), in floatx80_etoxm1()
2365 status); /* fp2 IS A4+S*A6 */ in floatx80_etoxm1()
2367 make_float64(0x3FA5555555554F5A), status), in floatx80_etoxm1()
2368 status); /* fp3 is A3+S*A5 */ in floatx80_etoxm1()
2369 fp2 = floatx80_mul(fp2, fp1, status); /* fp2 IS S*(A4+S*A6) */ in floatx80_etoxm1()
2370 fp3 = floatx80_mul(fp3, fp1, status); /* fp3 IS S*(A3+S*A5) */ in floatx80_etoxm1()
2372 make_float64(0x3FC5555555555555), status), in floatx80_etoxm1()
2373 status); /* fp2 IS A2+S*(A4+S*A6) */ in floatx80_etoxm1()
2375 make_float32(0x3F000000), status), in floatx80_etoxm1()
2376 status); /* fp3 IS A1+S*(A3+S*A5) */ in floatx80_etoxm1()
2378 status); /* fp2 IS S*(A2+S*(A4+S*A6)) */ in floatx80_etoxm1()
2380 status); /* fp1 IS S*(A1+S*(A3+S*A5)) */ in floatx80_etoxm1()
2382 status); /* fp2 IS R*S*(A2+S*(A4+S*A6)) */ in floatx80_etoxm1()
2384 status); /* fp0 IS R+S*(A1+S*(A3+S*A5)) */ in floatx80_etoxm1()
2385 fp0 = floatx80_add(fp0, fp2, status); /* fp0 IS EXP(R) - 1 */ in floatx80_etoxm1()
2388 status); /* 2^(J/64)*(Exp(R)-1) */ in floatx80_etoxm1()
2391 fp1 = float32_to_floatx80(exp_tbl2[j], status); in floatx80_etoxm1()
2393 fp1 = floatx80_add(fp1, onebysc, status); in floatx80_etoxm1()
2394 fp0 = floatx80_add(fp0, fp1, status); in floatx80_etoxm1()
2395 fp0 = floatx80_add(fp0, exp_tbl[j], status); in floatx80_etoxm1()
2398 status), status); in floatx80_etoxm1()
2399 fp0 = floatx80_add(fp0, exp_tbl[j], status); in floatx80_etoxm1()
2401 fp0 = floatx80_add(fp0, onebysc, status); in floatx80_etoxm1()
2405 status), status); in floatx80_etoxm1()
2407 fp1 = floatx80_add(fp1, onebysc, status); in floatx80_etoxm1()
2408 fp0 = floatx80_add(fp0, fp1, status); in floatx80_etoxm1()
2413 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2414 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2416 a = floatx80_mul(fp0, sc, status); in floatx80_etoxm1()
2418 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2424 status); /* -1 */ 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()
2430 make_float32(0x00800000), status), in floatx80_etoxm1()
2431 status); /* -1 + 2^(-126) */ in floatx80_etoxm1()
2433 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2437 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2438 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2440 return floatx80_etox(a, status); in floatx80_etoxm1()
2446 fp0 = floatx80_mul(fp0, fp0, status); /* S = X*X */ in floatx80_etoxm1()
2448 status); /* B12 */ in floatx80_etoxm1()
2449 fp1 = floatx80_mul(fp1, fp0, status); /* S * B12 */ in floatx80_etoxm1()
2451 status); /* B11 */ in floatx80_etoxm1()
2453 make_float32(0x32D73220), status), in floatx80_etoxm1()
2454 status); /* B10 */ in floatx80_etoxm1()
2455 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2456 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2458 make_float32(0x3493F281), status), in floatx80_etoxm1()
2459 status); /* B9 */ in floatx80_etoxm1()
2461 make_float64(0x3EC71DE3A5774682), status), in floatx80_etoxm1()
2462 status); /* B8 */ in floatx80_etoxm1()
2463 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2464 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2466 make_float64(0x3EFA01A019D7CB68), status), in floatx80_etoxm1()
2467 status); /* B7 */ in floatx80_etoxm1()
2469 make_float64(0x3F2A01A01A019DF3), status), in floatx80_etoxm1()
2470 status); /* B6 */ in floatx80_etoxm1()
2471 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2472 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2474 make_float64(0x3F56C16C16C170E2), status), in floatx80_etoxm1()
2475 status); /* B5 */ in floatx80_etoxm1()
2477 make_float64(0x3F81111111111111), status), in floatx80_etoxm1()
2478 status); /* B4 */ in floatx80_etoxm1()
2479 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2480 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2482 make_float64(0x3FA5555555555555), status), in floatx80_etoxm1()
2483 status); /* B3 */ in floatx80_etoxm1()
2485 fp1 = floatx80_add(fp1, fp3, status); /* B2 */ in floatx80_etoxm1()
2486 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2487 fp1 = floatx80_mul(fp1, fp0, status); in floatx80_etoxm1()
2489 fp2 = floatx80_mul(fp2, fp0, status); in floatx80_etoxm1()
2490 fp1 = floatx80_mul(fp1, a, status); in floatx80_etoxm1()
2493 make_float32(0x3F000000), status), in floatx80_etoxm1()
2494 status); /* S*B1 */ in floatx80_etoxm1()
2495 fp1 = floatx80_add(fp1, fp2, status); /* Q */ in floatx80_etoxm1()
2496 fp0 = floatx80_add(fp0, fp1, status); /* S*B1+Q */ in floatx80_etoxm1()
2498 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2499 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2501 a = floatx80_add(fp0, a, status); in floatx80_etoxm1()
2503 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2512 make_float64(0x48B0000000000000), status), in floatx80_etoxm1()
2513 status); in floatx80_etoxm1()
2514 fp0 = floatx80_add(fp0, sc, status); in floatx80_etoxm1()
2516 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2517 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2520 make_float64(0x3730000000000000), status), in floatx80_etoxm1()
2521 status); in floatx80_etoxm1()
2523 status->float_rounding_mode = user_rnd_mode; in floatx80_etoxm1()
2524 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_etoxm1()
2526 a = floatx80_add(fp0, sc, status); in floatx80_etoxm1()
2529 float_raise(float_flag_inexact, status); in floatx80_etoxm1()
2540 floatx80 floatx80_tanh(floatx80 a, float_status *status) in floatx80_tanh() argument
2559 return propagateFloatx80NaNOneArg(a, status); in floatx80_tanh()
2568 user_rnd_mode = status->float_rounding_mode; in floatx80_tanh()
2569 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_tanh()
2570 status->float_rounding_mode = float_round_nearest_even; in floatx80_tanh()
2571 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_tanh()
2579 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2580 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2582 a = floatx80_move(a, status); in floatx80_tanh()
2584 float_raise(float_flag_inexact, status); in floatx80_tanh()
2592 fp0 = float32_to_floatx80(make_float32(sign), status); in floatx80_tanh()
2596 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2597 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2600 status), status); in floatx80_tanh()
2602 float_raise(float_flag_inexact, status); in floatx80_tanh()
2607 fp0 = floatx80_etox(fp0, status); /* FP0 IS EXP(Y) */ in floatx80_tanh()
2610 status), status); /* EXP(Y)+1 */ in floatx80_tanh()
2613 sign ^ 0xC0000000), status), fp0, in floatx80_tanh()
2614 status); /* -SIGN(X)*2 / [EXP(Y)+1] */ in floatx80_tanh()
2616 status); /* SIGN */ in floatx80_tanh()
2618 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2619 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2621 a = floatx80_add(fp1, fp0, status); in floatx80_tanh()
2623 float_raise(float_flag_inexact, status); in floatx80_tanh()
2630 fp0 = floatx80_etoxm1(fp0, status); /* FP0 IS Z = EXPM1(Y) */ in floatx80_tanh()
2632 status), in floatx80_tanh()
2633 status); /* Z+2 */ in floatx80_tanh()
2641 status->float_rounding_mode = user_rnd_mode; in floatx80_tanh()
2642 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_tanh()
2644 a = floatx80_div(fp0, fp1, status); in floatx80_tanh()
2646 float_raise(float_flag_inexact, status); in floatx80_tanh()
2656 floatx80 floatx80_sinh(floatx80 a, float_status *status) in floatx80_sinh() argument
2675 return propagateFloatx80NaNOneArg(a, status); in floatx80_sinh()
2677 return floatx80_default_inf(aSign, status); in floatx80_sinh()
2684 user_rnd_mode = status->float_rounding_mode; in floatx80_sinh()
2685 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_sinh()
2686 status->float_rounding_mode = float_round_nearest_even; in floatx80_sinh()
2687 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_sinh()
2694 status->float_rounding_mode = user_rnd_mode; in floatx80_sinh()
2695 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sinh()
2697 return roundAndPackFloatx80(status->floatx80_rounding_precision, in floatx80_sinh()
2698 aSign, 0x8000, aSig, 0, status); in floatx80_sinh()
2702 make_float64(0x40C62D38D3D64634), status), in floatx80_sinh()
2703 status); /* (|X|-16381LOG2_LEAD) */ in floatx80_sinh()
2705 make_float64(0x3D6F90AEB1E75CC7), status), in floatx80_sinh()
2706 status); /* |X| - 16381 LOG2, ACCURATE */ in floatx80_sinh()
2707 fp0 = floatx80_etox(fp0, status); in floatx80_sinh()
2710 status->float_rounding_mode = user_rnd_mode; in floatx80_sinh()
2711 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sinh()
2713 a = floatx80_mul(fp0, fp2, status); in floatx80_sinh()
2715 float_raise(float_flag_inexact, status); in floatx80_sinh()
2721 fp0 = floatx80_etoxm1(fp0, status); /* FP0 IS Z = EXPM1(Y) */ in floatx80_sinh()
2723 status), status); /* 1+Z */ in floatx80_sinh()
2725 fp0 = floatx80_div(fp0, fp1, status); /* Z/(1+Z) */ in floatx80_sinh()
2726 fp0 = floatx80_add(fp0, fp2, status); in floatx80_sinh()
2730 status->float_rounding_mode = user_rnd_mode; in floatx80_sinh()
2731 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_sinh()
2733 a = floatx80_mul(fp0, float32_to_floatx80(fact, status), status); in floatx80_sinh()
2735 float_raise(float_flag_inexact, status); in floatx80_sinh()
2745 floatx80 floatx80_cosh(floatx80 a, float_status *status) in floatx80_cosh() argument
2761 return propagateFloatx80NaNOneArg(a, status); in floatx80_cosh()
2763 return floatx80_default_inf(0, status); in floatx80_cosh()
2770 user_rnd_mode = status->float_rounding_mode; in floatx80_cosh()
2771 user_rnd_prec = status->floatx80_rounding_precision; in floatx80_cosh()
2772 status->float_rounding_mode = float_round_nearest_even; in floatx80_cosh()
2773 status->floatx80_rounding_precision = floatx80_precision_x; in floatx80_cosh()
2779 status->float_rounding_mode = user_rnd_mode; in floatx80_cosh()
2780 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cosh()
2781 return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, in floatx80_cosh()
2782 0x8000, one_sig, 0, status); in floatx80_cosh()
2786 make_float64(0x40C62D38D3D64634), status), in floatx80_cosh()
2787 status); in floatx80_cosh()
2789 make_float64(0x3D6F90AEB1E75CC7), status), in floatx80_cosh()
2790 status); in floatx80_cosh()
2791 fp0 = floatx80_etox(fp0, status); 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()
2797 a = floatx80_mul(fp0, fp1, status); in floatx80_cosh()
2799 float_raise(float_flag_inexact, status); in floatx80_cosh()
2806 fp0 = floatx80_etox(fp0, status); /* EXP(|X|) */ in floatx80_cosh()
2808 status), status); /* (1/2)*EXP(|X|) */ in floatx80_cosh()
2809 fp1 = float32_to_floatx80(make_float32(0x3E800000), status); /* 1/4 */ in floatx80_cosh()
2810 fp1 = floatx80_div(fp1, fp0, status); /* 1/(2*EXP(|X|)) */ in floatx80_cosh()
2812 status->float_rounding_mode = user_rnd_mode; in floatx80_cosh()
2813 status->floatx80_rounding_precision = user_rnd_prec; in floatx80_cosh()
2815 a = floatx80_add(fp0, fp1, status); in floatx80_cosh()
2817 float_raise(float_flag_inexact, status); in floatx80_cosh()