diff options
Diffstat (limited to 'libgcc/config/libbid/bid64_next.c')
-rw-r--r-- | libgcc/config/libbid/bid64_next.c | 314 |
1 files changed, 177 insertions, 137 deletions
diff --git a/libgcc/config/libbid/bid64_next.c b/libgcc/config/libbid/bid64_next.c index 62fd091f85f..158121e788a 100644 --- a/libgcc/config/libbid/bid64_next.c +++ b/libgcc/config/libbid/bid64_next.c @@ -34,13 +34,13 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #if DECIMAL_CALL_BY_REFERENCE void -__bid64_nextup (UINT64 * pres, +bid64_nextup (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 -__bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM +bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif @@ -50,107 +50,112 @@ __bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM BID_UI64DOUBLE tmp1; int x_nr_bits; int q1, ind; - UINT64 C1; // C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (UINT64) + UINT64 C1; // C1 represents x_signif (UINT64) // check for NaNs and infinities - if ((x & MASK_SNAN) == MASK_SNAN) { // check for SNaN - // set invalid flag - *pfpsf |= INVALID_EXCEPTION; - // return quiet (SNaN) - res = x & 0xfdffffffffffffffull; - BID_RETURN (res); - } else if ((x & MASK_NAN) == MASK_NAN) { // check for QNaN - res = x; + if ((x & MASK_NAN) == MASK_NAN) { // check for NaN + if ((x & 0x0003ffffffffffffull) > 999999999999999ull) + x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits + else + x = x & 0xfe03ffffffffffffull; // clear G6-G12 + if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN + // set invalid flag + *pfpsf |= INVALID_EXCEPTION; + // return quiet (SNaN) + res = x & 0xfdffffffffffffffull; + } else { // QNaN + res = x; + } BID_RETURN (res); - } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity - if (!(x & 0x8000000000000000ull)) { // x is +inf + } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity + if (!(x & 0x8000000000000000ull)) { // x is +inf res = 0x7800000000000000ull; - } else { // x is -inf - res = 0xf7fb86f26fc0ffffull; // -MAXFP = -999...99 * 10^emax + } else { // x is -inf + res = 0xf7fb86f26fc0ffffull; // -MAXFP = -999...99 * 10^emax } BID_RETURN (res); } // unpack the argument - x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative + x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { - x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased + x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; - if (C1 > 9999999999999999ull) { // non-canonical + if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { - x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased + x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 - res = 0x0000000000000001ull; // MINFP = 1 * 10^emin - } else { // x is not special and is not zero + res = 0x0000000000000001ull; // MINFP = 1 * 10^emin + } else { // x is not special and is not zero if (x == 0x77fb86f26fc0ffffull) { // x = +MAXFP = 999...99 * 10^emax - res = 0x7800000000000000ull; // +inf + res = 0x7800000000000000ull; // +inf } else if (x == 0x8000000000000001ull) { // x = -MINFP = 1...99 * 10^emin - res = 0x8000000000000000ull; // -0 - } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp + res = 0x8000000000000000ull; // -0 + } else { // -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp // can add/subtract 1 ulp to the significand // Note: we could check here if x >= 10^16 to speed up the case q1 =16 // q1 = nr. of decimal digits in x (1 <= q1 <= 54) // determine first the nr. of bits in x - if (C1 >= MASK_BINARY_OR2) { // x >= 2^53 + if (C1 >= MASK_BINARY_OR2) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid rounding errors - if (C1 >= 0x0000000100000000ull) { // x >= 2^32 - tmp1.d = (double) (C1 >> 32); // exact conversion + if (C1 >= 0x0000000100000000ull) { // x >= 2^32 + tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); - } else { // x < 2^32 - tmp1.d = (double) C1; // exact conversion + } else { // x < 2^32 + tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } - } else { // if x < 2^53 - tmp1.d = (double) C1; // exact conversion + } else { // if x < 2^53 + tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } - q1 = __bid_nr_digits[x_nr_bits - 1].digits; + q1 = nr_digits[x_nr_bits - 1].digits; if (q1 == 0) { - q1 = __bid_nr_digits[x_nr_bits - 1].digits1; - if (C1 >= __bid_nr_digits[x_nr_bits - 1].threshold_lo) + q1 = nr_digits[x_nr_bits - 1].digits1; + if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q1++; } // if q1 < P16 then pad the significand with zeros if (q1 < P16) { - if ((SINT64)x_exp > P16 - q1) { - ind = P16 - q1; // 1 <= ind <= P16 - 1 + if (x_exp > (UINT64) (P16 - q1)) { + ind = P16 - q1; // 1 <= ind <= P16 - 1 // pad with P16 - q1 zeros, until exponent = emin // C1 = C1 * 10^ind - C1 = C1 * __bid_ten2k64[ind]; + C1 = C1 * ten2k64[ind]; x_exp = x_exp - ind; - } else { // pad with zeros until the exponent reaches emin + } else { // pad with zeros until the exponent reaches emin ind = x_exp; - C1 = C1 * __bid_ten2k64[ind]; + C1 = C1 * ten2k64[ind]; x_exp = EXP_MIN; } } - if (!x_sign) { // x > 0 + if (!x_sign) { // x > 0 // add 1 ulp (add 1 to the significand) C1++; - if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16 - C1 = 0x00038d7ea4c68000ull; // C1 = 10^15 + if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16 + C1 = 0x00038d7ea4c68000ull; // C1 = 10^15 x_exp++; } // Ok, because MAXFP = 999...99 * 10^emax was caught already - } else { // x < 0 + } else { // x < 0 // subtract 1 ulp (subtract 1 from the significand) C1--; - if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1 - C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1 + if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1 + C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1 x_exp--; } } @@ -160,11 +165,11 @@ __bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM res = x_sign | (x_exp << 51) | MASK_STEERING_BITS | (C1 & MASK_BINARY_SIG2); - } else { // significand fits in 53 bits + } else { // significand fits in 53 bits res = x_sign | (x_exp << 53) | C1; } - } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp - } // end x is not special and is not zero + } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp + } // end x is not special and is not zero BID_RETURN (res); } @@ -174,13 +179,13 @@ __bid64_nextup (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM #if DECIMAL_CALL_BY_REFERENCE void -__bid64_nextdown (UINT64 * pres, +bid64_nextdown (UINT64 * pres, UINT64 * px _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; #else UINT64 -__bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM +bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif @@ -190,108 +195,113 @@ __bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM BID_UI64DOUBLE tmp1; int x_nr_bits; int q1, ind; - UINT64 C1; // C1.w[1], C1.w[0] represent x_signif_hi, x_signif_lo (UINT64) + UINT64 C1; // C1 represents x_signif (UINT64) // check for NaNs and infinities - if ((x & MASK_SNAN) == MASK_SNAN) { // check for SNaN - // set invalid flag - *pfpsf |= INVALID_EXCEPTION; - // return quiet (SNaN) - res = x & 0xfdffffffffffffffull; - BID_RETURN (res); - } else if ((x & MASK_NAN) == MASK_NAN) { // check for QNaN - res = x; + if ((x & MASK_NAN) == MASK_NAN) { // check for NaN + if ((x & 0x0003ffffffffffffull) > 999999999999999ull) + x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits + else + x = x & 0xfe03ffffffffffffull; // clear G6-G12 + if ((x & MASK_SNAN) == MASK_SNAN) { // SNaN + // set invalid flag + *pfpsf |= INVALID_EXCEPTION; + // return quiet (SNaN) + res = x & 0xfdffffffffffffffull; + } else { // QNaN + res = x; + } BID_RETURN (res); - } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity - if (x & 0x8000000000000000ull) { // x is -inf + } else if ((x & MASK_INF) == MASK_INF) { // check for Infinity + if (x & 0x8000000000000000ull) { // x is -inf res = 0xf800000000000000ull; - } else { // x is +inf - res = 0x77fb86f26fc0ffffull; // +MAXFP = +999...99 * 10^emax + } else { // x is +inf + res = 0x77fb86f26fc0ffffull; // +MAXFP = +999...99 * 10^emax } BID_RETURN (res); } // unpack the argument - x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative + x_sign = x & MASK_SIGN; // 0 for positive, MASK_SIGN for negative // if steering bits are 11 (condition will be 0), then exponent is G[0:w+1] => if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { - x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased + x_exp = (x & MASK_BINARY_EXPONENT2) >> 51; // biased C1 = (x & MASK_BINARY_SIG2) | MASK_BINARY_OR2; - if (C1 > 9999999999999999ull) { // non-canonical + if (C1 > 9999999999999999ull) { // non-canonical x_exp = 0; C1 = 0; } } else { - x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased + x_exp = (x & MASK_BINARY_EXPONENT1) >> 53; // biased C1 = x & MASK_BINARY_SIG1; } // check for zeros (possibly from non-canonical values) if (C1 == 0x0ull) { // x is 0 - res = 0x8000000000000001ull; // -MINFP = -1 * 10^emin - } else { // x is not special and is not zero + res = 0x8000000000000001ull; // -MINFP = -1 * 10^emin + } else { // x is not special and is not zero if (x == 0xf7fb86f26fc0ffffull) { // x = -MAXFP = -999...99 * 10^emax - res = 0xf800000000000000ull; // -inf + res = 0xf800000000000000ull; // -inf } else if (x == 0x0000000000000001ull) { // x = +MINFP = 1...99 * 10^emin - res = 0x0000000000000000ull; // -0 - } else { // -MAXFP + 1ulp <= x <= -MINFP OR MINFP + 1 ulp <= x <= MAXFP + res = 0x0000000000000000ull; // -0 + } else { // -MAXFP + 1ulp <= x <= -MINFP OR MINFP + 1 ulp <= x <= MAXFP // can add/subtract 1 ulp to the significand // Note: we could check here if x >= 10^16 to speed up the case q1 =16 // q1 = nr. of decimal digits in x (1 <= q1 <= 16) // determine first the nr. of bits in x - if (C1 >= 0x0020000000000000ull) { // x >= 2^53 + if (C1 >= 0x0020000000000000ull) { // x >= 2^53 // split the 64-bit value in two 32-bit halves to avoid // rounding errors - if (C1 >= 0x0000000100000000ull) { // x >= 2^32 - tmp1.d = (double) (C1 >> 32); // exact conversion + if (C1 >= 0x0000000100000000ull) { // x >= 2^32 + tmp1.d = (double) (C1 >> 32); // exact conversion x_nr_bits = 33 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); - } else { // x < 2^32 - tmp1.d = (double) C1; // exact conversion + } else { // x < 2^32 + tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } - } else { // if x < 2^53 - tmp1.d = (double) C1; // exact conversion + } else { // if x < 2^53 + tmp1.d = (double) C1; // exact conversion x_nr_bits = 1 + ((((unsigned int) (tmp1.ui64 >> 52)) & 0x7ff) - 0x3ff); } - q1 = __bid_nr_digits[x_nr_bits - 1].digits; + q1 = nr_digits[x_nr_bits - 1].digits; if (q1 == 0) { - q1 = __bid_nr_digits[x_nr_bits - 1].digits1; - if (C1 >= __bid_nr_digits[x_nr_bits - 1].threshold_lo) + q1 = nr_digits[x_nr_bits - 1].digits1; + if (C1 >= nr_digits[x_nr_bits - 1].threshold_lo) q1++; } // if q1 < P16 then pad the significand with zeros if (q1 < P16) { - if ((SINT64)x_exp > P16 - q1) { - ind = P16 - q1; // 1 <= ind <= P16 - 1 + if (x_exp > (UINT64) (P16 - q1)) { + ind = P16 - q1; // 1 <= ind <= P16 - 1 // pad with P16 - q1 zeros, until exponent = emin // C1 = C1 * 10^ind - C1 = C1 * __bid_ten2k64[ind]; + C1 = C1 * ten2k64[ind]; x_exp = x_exp - ind; - } else { // pad with zeros until the exponent reaches emin + } else { // pad with zeros until the exponent reaches emin ind = x_exp; - C1 = C1 * __bid_ten2k64[ind]; + C1 = C1 * ten2k64[ind]; x_exp = EXP_MIN; } } - if (x_sign) { // x < 0 + if (x_sign) { // x < 0 // add 1 ulp (add 1 to the significand) C1++; - if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16 - C1 = 0x00038d7ea4c68000ull; // C1 = 10^15 + if (C1 == 0x002386f26fc10000ull) { // if C1 = 10^16 + C1 = 0x00038d7ea4c68000ull; // C1 = 10^15 x_exp++; // Ok, because -MAXFP = -999...99 * 10^emax was caught already } - } else { // x > 0 + } else { // x > 0 // subtract 1 ulp (subtract 1 from the significand) C1--; - if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1 - C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1 + if (C1 == 0x00038d7ea4c67fffull && x_exp != 0) { // if C1 = 10^15 - 1 + C1 = 0x002386f26fc0ffffull; // C1 = 10^16 - 1 x_exp--; } } @@ -301,11 +311,11 @@ __bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM res = x_sign | (x_exp << 51) | MASK_STEERING_BITS | (C1 & MASK_BINARY_SIG2); - } else { // significand fits in 53 bits + } else { // significand fits in 53 bits res = x_sign | (x_exp << 53) | C1; } - } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp - } // end x is not special and is not zero + } // end -MAXFP <= x <= -MINFP - 1 ulp OR MINFP <= x <= MAXFP - 1 ulp + } // end x is not special and is not zero BID_RETURN (res); } @@ -315,37 +325,40 @@ __bid64_nextdown (UINT64 x _EXC_FLAGS_PARAM _EXC_MASKS_PARAM #if DECIMAL_CALL_BY_REFERENCE void -__bid64_nextafter (UINT64 * pres, UINT64 * px, +bid64_nextafter (UINT64 * pres, UINT64 * px, UINT64 * py _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { UINT64 x = *px; UINT64 y = *py; #else UINT64 -__bid64_nextafter (UINT64 x, +bid64_nextafter (UINT64 x, UINT64 y _EXC_FLAGS_PARAM _EXC_MASKS_PARAM _EXC_INFO_PARAM) { #endif UINT64 res; UINT64 tmp1, tmp2; - FPSC tmp_fpsf = 0; // dummy fpsf for calls to comparison functions + FPSC tmp_fpsf = 0; // dummy fpsf for calls to comparison functions int res1, res2; + // check for NaNs or infinities + if (((x & MASK_SPECIAL) == MASK_SPECIAL) || + ((y & MASK_SPECIAL) == MASK_SPECIAL)) { + // x is NaN or infinity or y is NaN or infinity - // check for NaNs - if (((x & MASK_NAN) == MASK_NAN) || ((y & MASK_NAN) == MASK_NAN)) { - // x is NaN or y is NaN - - if ((x & MASK_NAN) == MASK_NAN) { // x is NAN - if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNAN + if ((x & MASK_NAN) == MASK_NAN) { // x is NAN + if ((x & 0x0003ffffffffffffull) > 999999999999999ull) + x = x & 0xfe00000000000000ull; // clear G6-G12 and the payload bits + else + x = x & 0xfe03ffffffffffffull; // clear G6-G12 + if ((x & MASK_SNAN) == MASK_SNAN) { // x is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (x) res = x & 0xfdffffffffffffffull; - res = x; - } else { // x is QNaN - if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN + } else { // x is QNaN + if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; } @@ -353,54 +366,81 @@ __bid64_nextafter (UINT64 x, res = x; } BID_RETURN (res); - } else if ((y & MASK_NAN) == MASK_NAN) { // y is NAN - if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN + } else if ((y & MASK_NAN) == MASK_NAN) { // y is NAN + if ((y & 0x0003ffffffffffffull) > 999999999999999ull) + y = y & 0xfe00000000000000ull; // clear G6-G12 and the payload bits + else + y = y & 0xfe03ffffffffffffull; // clear G6-G12 + if ((y & MASK_SNAN) == MASK_SNAN) { // y is SNAN // set invalid flag *pfpsf |= INVALID_EXCEPTION; // return quiet (y) res = y & 0xfdffffffffffffffull; - res = y; - } else { // y is QNaN + } else { // y is QNaN // return y res = y; } BID_RETURN (res); - } else { - ; // let infinities fall through + } else { // at least one is infinity + if ((x & MASK_ANY_INF) == MASK_INF) { // x = inf + x = x & (MASK_SIGN | MASK_INF); + } + if ((y & MASK_ANY_INF) == MASK_INF) { // y = inf + y = y & (MASK_SIGN | MASK_INF); + } } } // neither x nor y is NaN - tmp_fpsf = *pfpsf; // save fpsf + + // if not infinity, check for non-canonical values x (treated as zero) + if ((x & MASK_ANY_INF) != MASK_INF) { // x != inf + // unpack x + if ((x & MASK_STEERING_BITS) == MASK_STEERING_BITS) { + // if the steering bits are 11 (condition will be 0), then + // the exponent is G[0:w+1] + if (((x & MASK_BINARY_SIG2) | MASK_BINARY_OR2) > + 9999999999999999ull) { + // non-canonical + x = (x & MASK_SIGN) | ((x & MASK_BINARY_EXPONENT2) << 2); + } + } else { // if ((x & MASK_STEERING_BITS) != MASK_STEERING_BITS) x is unch. + ; // canonical + } + } + // no need to check for non-canonical y + + // neither x nor y is NaN + tmp_fpsf = *pfpsf; // save fpsf #if DECIMAL_CALL_BY_REFERENCE - __bid64_quiet_equal (&res1, px, + bid64_quiet_equal (&res1, px, py _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); - __bid64_quiet_greater (&res2, px, + bid64_quiet_greater (&res2, px, py _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res1 = - __bid64_quiet_equal (x, + bid64_quiet_equal (x, y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res2 = - __bid64_quiet_greater (x, + bid64_quiet_greater (x, y _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif - *pfpsf = tmp_fpsf; // restore fpsf - if (res1) { // x = y + *pfpsf = tmp_fpsf; // restore fpsf + if (res1) { // x = y // return x with the sign of y - res = (x & 0x7fffffffffffffffull) | (y & 0x8000000000000000ull); - } else if (res2) { // x > y + res = (y & 0x8000000000000000ull) | (x & 0x7fffffffffffffffull); + } else if (res2) { // x > y #if DECIMAL_CALL_BY_REFERENCE - __bid64_nextdown (&res, + bid64_nextdown (&res, px _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res = - __bid64_nextdown (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); + bid64_nextdown (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif - } else { // x < y + } else { // x < y #if DECIMAL_CALL_BY_REFERENCE - __bid64_nextup (&res, px _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); + bid64_nextup (&res, px _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else - res = __bid64_nextup (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); + res = bid64_nextup (x _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif } // if the operand x is finite but the result is infinite, signal @@ -413,30 +453,30 @@ __bid64_nextafter (UINT64 x, } // if the result is in (-10^emin, 10^emin), and is different from the // operand x, signal underflow and inexact - tmp1 = 0x00038d7ea4c68000ull; // +100...0[16] * 10^emin + tmp1 = 0x00038d7ea4c68000ull; // +100...0[16] * 10^emin tmp2 = res & 0x7fffffffffffffffull; - tmp_fpsf = *pfpsf; // save fpsf + tmp_fpsf = *pfpsf; // save fpsf #if DECIMAL_CALL_BY_REFERENCE - __bid64_quiet_greater (&res1, &tmp1, + bid64_quiet_greater (&res1, &tmp1, &tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); - __bid64_quiet_not_equal (&res2, &x, + bid64_quiet_not_equal (&res2, &x, &res _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #else res1 = - __bid64_quiet_greater (tmp1, + bid64_quiet_greater (tmp1, tmp2 _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); res2 = - __bid64_quiet_not_equal (x, + bid64_quiet_not_equal (x, res _EXC_FLAGS_ARG _EXC_MASKS_ARG _EXC_INFO_ARG); #endif - *pfpsf = tmp_fpsf; // restore fpsf + *pfpsf = tmp_fpsf; // restore fpsf if (res1 && res2) { - // if (__bid64_quiet_greater (tmp1, tmp2, &tmp_fpsf) && - // __bid64_quiet_not_equal (x, res, &tmp_fpsf)) { + // if (bid64_quiet_greater (tmp1, tmp2, &tmp_fpsf) && + // bid64_quiet_not_equal (x, res, &tmp_fpsf)) { // set the inexact flag *pfpsf |= INEXACT_EXCEPTION; // set the underflow flag |