Fix ldbl-128 expl missing underflows (bug 18586).

Similar to various other bugs in this area, the ldbl-128 expl
implementation does not raise the underflow exception for all
subnormal results, if the scaling down is exact although the actual
result is inexact.  This patch fixes this by forcing the exception in
this case (the tests that failed before and pass after the test are
already in the testsuite).

Tested for mips64.

	[BZ #18586]
	* sysdeps/ieee754/ldbl-128/e_expl.c (__ieee754_expl): Force
	underflow exception for small results.
This commit is contained in:
Joseph Myers 2015-06-24 15:12:03 +00:00
parent 36870482d2
commit 8475ab1684
3 changed files with 16 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2015-06-24 Joseph Myers <joseph@codesourcery.com>
[BZ #18586]
* sysdeps/ieee754/ldbl-128/e_expl.c (__ieee754_expl): Force
underflow exception for small results.
2015-06-24 Andrew Senkevich <andrew.senkevich@intel.com>
* sysdeps/x86_64/fpu/Makefile (libmvec-support): Fixed files list.

2
NEWS
View File

@ -24,7 +24,7 @@ Version 2.22
18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498,
18507, 18512, 18513, 18519, 18520, 18522, 18527, 18528, 18529, 18530,
18532, 18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545, 18546,
18547, 18553, 18558, 18569, 18583.
18547, 18553, 18558, 18569, 18583, 18586.
* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.

View File

@ -230,7 +230,15 @@ __ieee754_expl (long double x)
if (!unsafe)
return result;
else
return result * scale_u.d;
{
result *= scale_u.d;
if (result < LDBL_MIN)
{
long double force_underflow = result * result;
math_force_eval (force_underflow);
}
return result;
}
}
/* Exceptional cases: */
else if (isless (x, himark))