Lines Matching refs:st0_ptr
33 static int trig_arg(FPU_REG *st0_ptr, int even) in trig_arg() argument
41 if (exponent(st0_ptr) >= 63) { in trig_arg()
49 setpositive(st0_ptr); in trig_arg()
50 tag = FPU_u_div(st0_ptr, &CONST_PI2, &tmp, PR_64_BITS | RC_CHOP | 0x3f, in trig_arg()
57 rem_kernel(significand(st0_ptr), in trig_arg()
60 q, exponent(st0_ptr) - exponent(&CONST_PI2)); in trig_arg()
76 if ((exponent(st0_ptr) <= exponent(&CONST_PI2extra) + 64) in trig_arg()
91 if (signnegative(st0_ptr)) { in trig_arg()
96 setpositive(st0_ptr); in trig_arg()
109 && (exponent(st0_ptr) <= exponent(&CONST_PI2extra) + 64)) in trig_arg()
125 if ((exponent(st0_ptr) == exponent(&CONST_PI2)) && in trig_arg()
126 ((st0_ptr->sigh > CONST_PI2.sigh) in trig_arg()
127 || ((st0_ptr->sigh == CONST_PI2.sigh) in trig_arg()
128 && (st0_ptr->sigl > CONST_PI2.sigl)))) { in trig_arg()
179 static void single_arg_error(FPU_REG *st0_ptr, u_char st0_tag) in single_arg_error() argument
184 real_1op_NaN(st0_ptr); /* return with a NaN in st(0) */ in single_arg_error()
191 static void single_arg_2_error(FPU_REG *st0_ptr, u_char st0_tag) in single_arg_2_error() argument
197 isNaN = (exponent(st0_ptr) == EXP_OVER) in single_arg_2_error()
198 && (st0_ptr->sigh & 0x80000000); in single_arg_2_error()
199 if (isNaN && !(st0_ptr->sigh & 0x40000000)) { /* Signaling ? */ in single_arg_2_error()
204 st0_ptr->sigh |= 0x40000000; in single_arg_2_error()
206 FPU_copy_to_reg0(st0_ptr, TAG_Special); in single_arg_2_error()
211 FPU_copy_to_reg0(st0_ptr, TAG_Special); in single_arg_2_error()
232 static void f2xm1(FPU_REG *st0_ptr, u_char tag) in f2xm1() argument
240 if (exponent(st0_ptr) < 0) { in f2xm1()
243 FPU_to_exp16(st0_ptr, &a); in f2xm1()
246 poly_2xm1(getsign(st0_ptr), &a, st0_ptr); in f2xm1()
256 tag = FPU_Special(st0_ptr); in f2xm1()
264 if (signnegative(st0_ptr)) { in f2xm1()
267 setnegative(st0_ptr); in f2xm1()
271 single_arg_error(st0_ptr, tag); in f2xm1()
275 static void fptan(FPU_REG *st0_ptr, u_char st0_tag) in fptan() argument
279 u_char arg_sign = getsign(st0_ptr); in fptan()
298 if (exponent(st0_ptr) > -40) { in fptan()
299 if ((q = trig_arg(st0_ptr, 0)) == -1) { in fptan()
304 poly_tan(st0_ptr); in fptan()
305 setsign(st0_ptr, (q & 1) ^ (arg_sign != 0)); in fptan()
313 FPU_to_exp16(st0_ptr, st0_ptr); in fptan()
316 FPU_round(st0_ptr, 1, 0, FULL_PRECISION, arg_sign); in fptan()
332 st0_tag = FPU_Special(st0_ptr); in fptan()
351 single_arg_2_error(st0_ptr, st0_tag); in fptan()
354 static void fxtract(FPU_REG *st0_ptr, u_char st0_tag) in fxtract() argument
358 register FPU_REG *st1_ptr = st0_ptr; /* anticipate */ in fxtract()
384 sign = getsign(st0_ptr); in fxtract()
396 st0_tag = FPU_Special(st0_ptr); in fxtract()
407 sign = getsign(st0_ptr); in fxtract()
408 setpositive(st0_ptr); in fxtract()
414 if (real_1op_NaN(st0_ptr) < 0) in fxtract()
418 FPU_copy_to_reg0(st0_ptr, TAG_Special); in fxtract()
447 static void fsqrt_(FPU_REG *st0_ptr, u_char st0_tag) in fsqrt_() argument
456 if (signnegative(st0_ptr)) { in fsqrt_()
462 expon = exponent(st0_ptr); in fsqrt_()
466 setexponent16(st0_ptr, (expon & 1)); in fsqrt_()
469 tag = wm_sqrt(st0_ptr, 0, 0, control_word, SIGN_POS); in fsqrt_()
470 addexponent(st0_ptr, expon >> 1); in fsqrt_()
479 st0_tag = FPU_Special(st0_ptr); in fsqrt_()
482 if (signnegative(st0_ptr)) in fsqrt_()
486 if (signnegative(st0_ptr)) { in fsqrt_()
494 FPU_to_exp16(st0_ptr, st0_ptr); in fsqrt_()
496 expon = exponent16(st0_ptr); in fsqrt_()
501 single_arg_error(st0_ptr, st0_tag); in fsqrt_()
505 static void frndint_(FPU_REG *st0_ptr, u_char st0_tag) in frndint_() argument
514 sign = getsign(st0_ptr); in frndint_()
516 if (exponent(st0_ptr) > 63) in frndint_()
525 if ((flags = FPU_round_to_int(st0_ptr, st0_tag))) in frndint_()
528 setexponent16(st0_ptr, 63); in frndint_()
529 tag = FPU_normalize(st0_ptr); in frndint_()
530 setsign(st0_ptr, sign); in frndint_()
539 st0_tag = FPU_Special(st0_ptr); in frndint_()
546 single_arg_error(st0_ptr, st0_tag); in frndint_()
549 static int fsin(FPU_REG *st0_ptr, u_char tag) in fsin() argument
551 u_char arg_sign = getsign(st0_ptr); in fsin()
556 if (exponent(st0_ptr) > -40) { in fsin()
557 if ((q = trig_arg(st0_ptr, 0)) == -1) { in fsin()
562 poly_sine(st0_ptr); in fsin()
565 changesign(st0_ptr); in fsin()
567 setsign(st0_ptr, getsign(st0_ptr) ^ arg_sign); in fsin()
585 tag = FPU_Special(st0_ptr); in fsin()
593 FPU_to_exp16(st0_ptr, st0_ptr); in fsin()
595 tag = FPU_round(st0_ptr, 1, 0, FULL_PRECISION, arg_sign); in fsin()
605 single_arg_error(st0_ptr, tag); in fsin()
610 static int f_cos(FPU_REG *st0_ptr, u_char tag) in f_cos() argument
614 st0_sign = getsign(st0_ptr); in f_cos()
619 if (exponent(st0_ptr) > -40) { in f_cos()
620 if ((exponent(st0_ptr) < 0) in f_cos()
621 || ((exponent(st0_ptr) == 0) in f_cos()
622 && (significand(st0_ptr) <= in f_cos()
624 poly_cos(st0_ptr); in f_cos()
630 } else if ((q = trig_arg(st0_ptr, FCOS)) != -1) { in f_cos()
631 poly_sine(st0_ptr); in f_cos()
634 changesign(st0_ptr); in f_cos()
663 tag = FPU_Special(st0_ptr); in f_cos()
675 single_arg_error(st0_ptr, tag); /* requires st0_ptr == &st(0) */ in f_cos()
680 static void fcos(FPU_REG *st0_ptr, u_char st0_tag) in fcos() argument
682 f_cos(st0_ptr, st0_tag); in fcos()
685 static void fsincos(FPU_REG *st0_ptr, u_char st0_tag) in fsincos() argument
708 tag = FPU_Special(st0_ptr); in fsincos()
713 single_arg_2_error(st0_ptr, TW_NaN); in fsincos()
725 reg_copy(st0_ptr, &arg); in fsincos()
726 if (!fsin(st0_ptr, st0_tag)) { in fsincos()
778 static void do_fprem(FPU_REG *st0_ptr, u_char st0_tag, int round) in do_fprem() argument
796 st0_sign = FPU_to_exp16(st0_ptr, &st0); in do_fprem()
930 reg_copy(&tmp, st0_ptr); in do_fprem()
937 tag = arith_underflow(st0_ptr); in do_fprem()
938 setsign(st0_ptr, st0_sign); in do_fprem()
942 stdexp(st0_ptr); in do_fprem()
943 setsign(st0_ptr, st0_sign); in do_fprem()
946 FPU_round(st0_ptr, 0, 0, FULL_PRECISION, st0_sign); in do_fprem()
955 st0_tag = FPU_Special(st0_ptr); in do_fprem()
1020 static void fyl2x(FPU_REG *st0_ptr, u_char st0_tag) in fyl2x() argument
1032 if (signpositive(st0_ptr)) { in fyl2x()
1034 FPU_to_exp16(st0_ptr, st0_ptr); in fyl2x()
1037 setexponent16(st0_ptr, exponent(st0_ptr)); in fyl2x()
1039 if ((st0_ptr->sigh == 0x80000000) in fyl2x()
1040 && (st0_ptr->sigl == 0)) { in fyl2x()
1043 e = exponent16(st0_ptr); in fyl2x()
1069 poly_l2(st0_ptr, st1_ptr, sign); in fyl2x()
1083 st0_tag = FPU_Special(st0_ptr); in fyl2x()
1109 if (signnegative(st0_ptr)) { in fyl2x()
1117 if (exponent(st0_ptr) < 0) in fyl2x()
1130 if (real_2op_NaN(st0_ptr, st0_tag, 1, st0_ptr) < 0) in fyl2x()
1135 if ((signnegative(st0_ptr)) || (st1_tag == TAG_Zero)) { in fyl2x()
1152 && (signpositive(st0_ptr))) { in fyl2x()
1153 if (exponent(st0_ptr) >= 0) { in fyl2x()
1154 if ((exponent(st0_ptr) == 0) && in fyl2x()
1155 (st0_ptr->sigh == 0x80000000) && in fyl2x()
1156 (st0_ptr->sigl == 0)) { in fyl2x()
1191 static void fpatan(FPU_REG *st0_ptr, u_char st0_tag) in fpatan() argument
1201 poly_atan(st0_ptr, st0_tag, st1_ptr, st1_tag); in fpatan()
1209 st0_tag = FPU_Special(st0_ptr); in fpatan()
1224 if (real_2op_NaN(st0_ptr, st0_tag, 1, st0_ptr) >= 0) in fpatan()
1231 if (signpositive(st0_ptr)) { in fpatan()
1249 if (signpositive(st0_ptr)) { in fpatan()
1274 if (signpositive(st0_ptr)) { in fpatan()
1301 static void fprem(FPU_REG *st0_ptr, u_char st0_tag) in fprem() argument
1303 do_fprem(st0_ptr, st0_tag, RC_CHOP); in fprem()
1306 static void fprem1(FPU_REG *st0_ptr, u_char st0_tag) in fprem1() argument
1308 do_fprem(st0_ptr, st0_tag, RC_RND); in fprem1()
1311 static void fyl2xp1(FPU_REG *st0_ptr, u_char st0_tag) in fyl2xp1() argument
1321 sign = getsign(st0_ptr); in fyl2xp1()
1324 FPU_to_exp16(st0_ptr, &a); in fyl2xp1()
1335 st0_tag = FPU_Special(st0_ptr); in fyl2xp1()
1357 setsign(st0_ptr, getsign(st0_ptr) ^ getsign(st1_ptr)); in fyl2xp1()
1358 FPU_copy_to_reg1(st0_ptr, st0_tag); in fyl2xp1()
1368 if (real_2op_NaN(st0_ptr, st0_tag, 1, st0_ptr) < 0) in fyl2xp1()
1382 if (signnegative(st0_ptr)) { in fyl2xp1()
1383 if (exponent(st0_ptr) >= 0) { in fyl2xp1()
1402 if (signnegative(st0_ptr)) { in fyl2xp1()
1403 if ((exponent(st0_ptr) >= 0) && in fyl2xp1()
1404 !((st0_ptr->sigh == 0x80000000) && in fyl2xp1()
1405 (st0_ptr->sigl == 0))) { in fyl2xp1()
1424 if (real_2op_NaN(st0_ptr, st0_tag, 1, st0_ptr) < 0) in fyl2xp1()
1429 if (real_2op_NaN(st0_ptr, st0_tag, 1, st0_ptr) < 0) in fyl2xp1()
1433 if (real_2op_NaN(st0_ptr, st0_tag, 1, st0_ptr) < 0) in fyl2xp1()
1435 } else if (signnegative(st0_ptr)) { in fyl2xp1()
1480 static void fscale(FPU_REG *st0_ptr, u_char st0_tag) in fscale() argument
1485 u_char sign = getsign(st0_ptr); in fscale()
1493 setexponent16(st0_ptr, exponent(st0_ptr)); in fscale()
1507 setsign(st0_ptr, sign); in fscale()
1517 scale += exponent16(st0_ptr); in fscale()
1519 setexponent16(st0_ptr, scale); in fscale()
1522 FPU_round(st0_ptr, 0, 0, control_word, sign); in fscale()
1528 st0_tag = FPU_Special(st0_ptr); in fscale()
1540 FPU_to_exp16(st0_ptr, st0_ptr); /* Will not be left on stack */ in fscale()
1561 setsign(st0_ptr, sign); in fscale()
1565 real_2op_NaN(st1_ptr, st1_tag, 0, st0_ptr); in fscale()
1584 real_2op_NaN(st1_ptr, st1_tag, 0, st0_ptr); in fscale()
1603 real_2op_NaN(st1_ptr, st1_tag, 0, st0_ptr); in fscale()
1608 real_2op_NaN(st1_ptr, st1_tag, 0, st0_ptr); in fscale()