Fix excessive ULP for y1_upward (0x2p+0) in test-float and test-ifloat.

Message ID 20140524.215924.291968172076422168.davem@davemloft.net
State Committed
Headers

Commit Message

David Miller May 25, 2014, 1:59 a.m. UTC
  Ok for mainline?

	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Force computations
	to occur in round to nearest mode when |x| >= 2.0
---
 ChangeLog                      | 5 +++++
 sysdeps/ieee754/flt-32/e_j1f.c | 1 +
 2 files changed, 6 insertions(+)
  

Comments

David Miller May 30, 2014, 10:20 p.m. UTC | #1
From: David Miller <davem@davemloft.net>
Date: Sat, 24 May 2014 21:59:24 -0400 (EDT)

> Ok for mainline?
> 
> 	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Force computations
> 	to occur in round to nearest mode when |x| >= 2.0

Ping?  This is my second submission of this bug fix.

Thanks.

> ---
>  ChangeLog                      | 5 +++++
>  sysdeps/ieee754/flt-32/e_j1f.c | 1 +
>  2 files changed, 6 insertions(+)
> 
> diff --git a/ChangeLog b/ChangeLog
> index 271e31d..1dd5794 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,8 @@
> +2014-05-24  David S. Miller  <davem@davemloft.net>
> +
> +	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Force computations
> +	to occur in round to nearest mode when |x| >= 2.0
> +
>  2014-05-23  Richard Henderson  <rth@twiddle.net>
>  
>  	* nptl/pt-vfork.c (vfork_resolve): Rename from vfork_ifunc.
> diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c
> index cb9f97f..a180968 100644
> --- a/sysdeps/ieee754/flt-32/e_j1f.c
> +++ b/sysdeps/ieee754/flt-32/e_j1f.c
> @@ -107,6 +107,7 @@ __ieee754_y1f(float x)
>  		return -HUGE_VALF+x;  /* -inf and overflow exception.  */
>  	if(__builtin_expect(hx<0, 0)) return zero/(zero*x);
>  	if(ix >= 0x40000000) {  /* |x| >= 2.0 */
> +		SET_RESTORE_ROUNDF (FE_TONEAREST);
>  		__sincosf (x, &s, &c);
>  		ss = -s-c;
>  		cc = s-c;
> -- 
> 1.8.1.2
>
  
Andreas Jaeger May 31, 2014, 12:27 p.m. UTC | #2
On 05/25/2014 03:59 AM, David Miller wrote:
> 
> Ok for mainline?
> 
> 	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Force computations
> 	to occur in round to nearest mode when |x| >= 2.0
> ---
>  ChangeLog                      | 5 +++++
>  sysdeps/ieee754/flt-32/e_j1f.c | 1 +
>  2 files changed, 6 insertions(+)
> 
> diff --git a/ChangeLog b/ChangeLog
> index 271e31d..1dd5794 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,8 @@
> +2014-05-24  David S. Miller  <davem@davemloft.net>
> +
> +	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Force computations
> +	to occur in round to nearest mode when |x| >= 2.0
> +
>  2014-05-23  Richard Henderson  <rth@twiddle.net>
>  
>  	* nptl/pt-vfork.c (vfork_resolve): Rename from vfork_ifunc.
> diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c
> index cb9f97f..a180968 100644
> --- a/sysdeps/ieee754/flt-32/e_j1f.c
> +++ b/sysdeps/ieee754/flt-32/e_j1f.c
> @@ -107,6 +107,7 @@ __ieee754_y1f(float x)
>  		return -HUGE_VALF+x;  /* -inf and overflow exception.  */
>  	if(__builtin_expect(hx<0, 0)) return zero/(zero*x);
>  	if(ix >= 0x40000000) {  /* |x| >= 2.0 */
> +		SET_RESTORE_ROUNDF (FE_TONEAREST);

Looks fine, thanks,

Andreas

>  		__sincosf (x, &s, &c);
>  		ss = -s-c;
>  		cc = s-c;
>
  

Patch

diff --git a/ChangeLog b/ChangeLog
index 271e31d..1dd5794 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@ 
+2014-05-24  David S. Miller  <davem@davemloft.net>
+
+	* sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_y1f): Force computations
+	to occur in round to nearest mode when |x| >= 2.0
+
 2014-05-23  Richard Henderson  <rth@twiddle.net>
 
 	* nptl/pt-vfork.c (vfork_resolve): Rename from vfork_ifunc.
diff --git a/sysdeps/ieee754/flt-32/e_j1f.c b/sysdeps/ieee754/flt-32/e_j1f.c
index cb9f97f..a180968 100644
--- a/sysdeps/ieee754/flt-32/e_j1f.c
+++ b/sysdeps/ieee754/flt-32/e_j1f.c
@@ -107,6 +107,7 @@  __ieee754_y1f(float x)
 		return -HUGE_VALF+x;  /* -inf and overflow exception.  */
 	if(__builtin_expect(hx<0, 0)) return zero/(zero*x);
 	if(ix >= 0x40000000) {  /* |x| >= 2.0 */
+		SET_RESTORE_ROUNDF (FE_TONEAREST);
 		__sincosf (x, &s, &c);
 		ss = -s-c;
 		cc = s-c;