normalizeFloatx80Subnormal(aSig, &aExp, &aSig);
}
- return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
+ aSign,
0x3FFF, aSig, 0, status);
}
if (0x400F < bExp) {
aExp = bSign ? -0x6001 : 0xE000;
- return roundAndPackFloatx80(status->floatx80_rounding_precision,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
aSign, aExp, aSig, 0, status);
}
bSig >>= shiftCount;
aExp = bSign ? (aExp - bSig) : (aExp + bSig);
- return roundAndPackFloatx80(status->floatx80_rounding_precision,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
aSign, aExp, aSig, 0, status);
}
if (aSig == 0) {
return a;
}
- normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision,
+ normalizeRoundAndPackFloatx80(get_floatx80_rounding_precision(status),
aSign, aExp, aSig, 0, status);
}
- return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
+ aSign,
aExp, aSig, 0, status);
}
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, klog2, status);
status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, saveu, status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
fp0 = floatx80_add(fp0, fp1, status); /* FP0 IS LOG(F) + LOG(1+U) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, klog2, status);
status); /* U*V*([B1+W*(B3+W*B5)] + [V*(B2+W*B4)]) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, saveu, status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
fp0 = floatx80_logn(a, status);
fp1 = packFloatx80(0, 0x3FFD, UINT64_C(0xDE5BD8A937287195)); /* INV_L10 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L10 */
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
if (aSig == one_sig) { /* X is 2^k */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = int32_to_floatx80(aExp - 0x3FFF, status);
} else {
fp1 = packFloatx80(0, 0x3FFF, UINT64_C(0xB8AA3B295C17F0BC)); /* INV_L2 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, fp1, status); /* LOGN(X)*INV_L2 */
}
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
adjflag = 0;
}
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, scale, status);
} else { /* |X| >= 16380 log2 */
if (compact > 0x400CB27C) { /* |X| >= 16480 log2 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
if (aSign) {
- a = roundAndPackFloatx80(
- status->floatx80_rounding_precision,
- 0, -0x1000, aSig, 0, status);
+ a = roundAndPackFloatx80(get_floatx80_rounding_precision(status),
+ 0, -0x1000, aSig, 0, status);
} else {
- a = roundAndPackFloatx80(
- status->floatx80_rounding_precision,
- 0, 0x8000, aSig, 0, status);
+ a = roundAndPackFloatx80(get_floatx80_rounding_precision(status),
+ 0, 0x8000, aSig, 0, status);
}
float_raise(float_flag_inexact, status);
}
} else { /* |X| < 2^(-65) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(a, float32_to_floatx80(make_float32(0x3F800000),
status), status); /* 1 + X */
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
fp0 = a;
/* |X| > 16480 or |X| < 2^(-70) */
if (compact > 0x3FFF8000) { /* |X| > 16480 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
if (aSign) {
- return roundAndPackFloatx80(status->floatx80_rounding_precision,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
0, -0x1000, aSig, 0, status);
} else {
- return roundAndPackFloatx80(status->floatx80_rounding_precision,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
0, 0x8000, aSig, 0, status);
}
} else { /* |X| < 2^(-70) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, float32_to_floatx80(
make_float32(0x3F800000), status),
fp0 = floatx80_add(fp0, fact1, status);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, adjfact, status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
fp0 = a;
/* |X| > 16480 LOG2/LOG10 or |X| < 2^(-70) */
if (compact > 0x3FFF8000) { /* |X| > 16480 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
if (aSign) {
- return roundAndPackFloatx80(status->floatx80_rounding_precision,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
0, -0x1000, aSig, 0, status);
} else {
- return roundAndPackFloatx80(status->floatx80_rounding_precision,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
0, 0x8000, aSig, 0, status);
}
} else { /* |X| < 2^(-70) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, float32_to_floatx80(
make_float32(0x3F800000), status),
fp0 = floatx80_add(fp0, fact1, status);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, adjfact, status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
goto loop;
} else {
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_move(a, status);
fp1 = packFloatx80(xSign, xExp, xSig);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_div(fp0, fp1, status);
status); /* 1+S(Q1+S(Q2+S(Q3+SQ4))) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_div(fp0, fp1, status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
status); /* 1 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
/* SINTINY */
a = floatx80_move(a, status);
fp0 = floatx80_mul(fp0, x, status);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status);
fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, x, status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
fp0 = float32_to_floatx80(make_float32(0x3F800000), status); /* 1 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
/* COSTINY */
a = floatx80_sub(fp0, float32_to_floatx80(
fp0 = floatx80_mul(fp0, x, status);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, float32_to_floatx80(posneg1, status), status);
fp0 = floatx80_mul(fp0, fp1, status); /* SIN(R')-R' */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, x, status);
compact = floatx80_make_compact(aExp, aSig);
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
if (compact < 0x3FFB8000 || compact > 0x4002FFFF) {
/* |X| >= 16 or |X| < 1/16 */
fp1 = packFloatx80(aSign, 0x0001, one_sig);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_sub(fp0, fp1, status);
fp1 = packFloatx80(aSign, piby2_exp, pi_sig);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, fp1, status);
} else { /* |X| < 1/16 */
if (compact < 0x3FD78000) { /* |X| < 2^(-40) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_move(a, status);
fp0 = floatx80_mul(fp0, fp1, status);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, xsave, status);
fp0 = floatx80_add(fp0, fp1, status); /* ATAN(U) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, fp3, status); /* ATAN(X) */
} /* |X| < 1 */
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
one = packFloatx80(0, one_exp, one_sig);
fp0 = a;
fp0 = floatx80_div(fp0, fp1, status); /* X/SQRT((1+X)*(1-X)) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_atan(fp0, status); /* ATAN(X/SQRT((1+X)*(1-X))) */
}
if (aExp == 0 && aSig == 0) {
float_raise(float_flag_inexact, status);
- return roundAndPackFloatx80(status->floatx80_rounding_precision, 0,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
+ 0,
piby2_exp, pi_sig, 0, status);
}
} /* |X| < 1 */
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
one = packFloatx80(0, one_exp, one_sig);
fp0 = a;
fp0 = floatx80_atan(fp0, status); /* ATAN(SQRT((1-X)/(1+X))) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, fp0, status); /* 2 * ATAN(SQRT((1-X)/(1+X))) */
} /* |X| < 1 */
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
one = packFloatx80(0, one_exp, one_sig);
fp2 = packFloatx80(aSign, 0x3FFE, one_sig); /* SIGN(X) * (1/2) */
fp0 = floatx80_lognp1(fp0, status); /* LOG1P(Z) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, fp2,
status); /* ATANH(X) = SIGN(X) * (1/2) * LOG1P(Z) */
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
if (aExp >= 0x3FFD) { /* |X| >= 1/4 */
compact = floatx80_make_compact(aExp, aSig);
sc = packFloatx80(0, m + 0x3FFF, one_sig);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, sc, status);
status); /* -1 */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, float32_to_floatx80(
make_float32(0x00800000), status),
return a;
} else {
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
return floatx80_etox(a, status);
}
fp0 = floatx80_add(fp0, fp1, status); /* S*B1+Q */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, a, status);
fp0 = floatx80_add(fp0, sc, status);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, float64_to_floatx80(
make_float64(0x3730000000000000), status),
status);
} else {
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, sc, status);
}
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
if (compact < 0x3FFF8000) {
/* TANHSM */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_move(a, status);
sign ^= 0x80800000; /* -SIGN(X)*EPS */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, float32_to_floatx80(make_float32(sign),
status), status);
status); /* SIGN */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp1, fp0, status);
fp1 = packFloatx80(vSign ^ aSign, vExp, vSig);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_div(fp0, fp1, status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
/* SINHBIG */
if (compact > 0x400CB2B3) {
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
- return roundAndPackFloatx80(status->floatx80_rounding_precision,
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
aSign, 0x8000, aSig, 0, status);
} else {
fp0 = floatx80_abs(a); /* Y = |X| */
fp2 = packFloatx80(aSign, 0x7FFB, one_sig);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, fp2, status);
fact = packFloat32(aSign, 0x7E, 0);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, float32_to_floatx80(fact, status), status);
}
user_rnd_mode = get_float_rounding_mode(status);
- user_rnd_prec = status->floatx80_rounding_precision;
+ user_rnd_prec = get_floatx80_rounding_precision(status);
set_float_rounding_mode(float_round_nearest_even, status);
- status->floatx80_rounding_precision = floatx80_precision_x;
+ set_floatx80_rounding_precision(floatx80_precision_x, status);
compact = floatx80_make_compact(aExp, aSig);
if (compact > 0x400CB167) {
if (compact > 0x400CB2B3) {
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
- return roundAndPackFloatx80(status->floatx80_rounding_precision, 0,
+ set_floatx80_rounding_precision(user_rnd_prec, status);
+ return roundAndPackFloatx80(get_floatx80_rounding_precision(status),
+ 0,
0x8000, one_sig, 0, status);
} else {
fp0 = packFloatx80(0, aExp, aSig);
fp1 = packFloatx80(0, 0x7FFB, one_sig);
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_mul(fp0, fp1, status);
fp1 = floatx80_div(fp1, fp0, status); /* 1/(2*EXP(|X|)) */
set_float_rounding_mode(user_rnd_mode, status);
- status->floatx80_rounding_precision = user_rnd_prec;
+ set_floatx80_rounding_precision(user_rnd_prec, status);
a = floatx80_add(fp0, fp1, status);