This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.24-477-gf02bb00


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  f02bb0004c5b1944333fd8e74ac1efda3074084b (commit)
      from  0acb8a2a855395c25b1feef2470f4d7ca4bed589 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f02bb0004c5b1944333fd8e74ac1efda3074084b

commit f02bb0004c5b1944333fd8e74ac1efda3074084b
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Dec 14 22:41:26 2016 +0000

    Fix generic fmax, fmin sNaN handling (bug 20947).
    
    Various fmax and fmin function implementations mishandle sNaN
    arguments:
    
    (a) When both arguments are NaNs, the return value should be a qNaN,
    but sometimes it is an sNaN if at least one argument is an sNaN.
    
    (b) Under TS 18661-1 semantics, if either argument is an sNaN then the
    result should be a qNaN (whereas if one argument is a qNaN and the
    other is not a NaN, the result should be the non-NaN argument).
    Various implementations treat sNaNs like qNaNs here.
    
    This patch fixes the generic implementations used in the absence of
    architecture-specific versions.
    
    Tested for mips64 and powerpc (together with testcases that I'll add
    along with the x86_64 / x86 fixes).
    
    	[BZ #20947]
    	* math/s_fmax_template.c (M_DECL_FUNC (__fmax)): Add the arguments
    	when either is a signaling NaN.
    	* math/s_fmin_template.c (M_DECL_FUNC (__fmin)): Likewise.

diff --git a/ChangeLog b/ChangeLog
index ba42b5b..c08b711 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2016-12-14  Joseph Myers  <joseph@codesourcery.com>
 
+	[BZ #20947]
+	* math/s_fmax_template.c (M_DECL_FUNC (__fmax)): Add the arguments
+	when either is a signaling NaN.
+	* math/s_fmin_template.c (M_DECL_FUNC (__fmin)): Likewise.
+
 	* bits/long-double.h: New file.
 	* sysdeps/ieee754/ldbl-128/bits/long-double.h: Likewise.
 	* sysdeps/ieee754/ldbl-96/bits/long-double.h: Likewise.
diff --git a/math/s_fmax_template.c b/math/s_fmax_template.c
index dea53d4..e855b72 100644
--- a/math/s_fmax_template.c
+++ b/math/s_fmax_template.c
@@ -22,7 +22,14 @@
 FLOAT
 M_DECL_FUNC (__fmax) (FLOAT x, FLOAT y)
 {
-  return (isgreaterequal (x, y) || isnan (y)) ? x : y;
+  if (isgreaterequal (x, y))
+    return x;
+  else if (isless (x, y))
+    return y;
+  else if (issignaling (x) || issignaling (y))
+    return x + y;
+  else
+    return isnan (y) ? x : y;
 }
 
 declare_mgen_alias (__fmax, fmax);
diff --git a/math/s_fmin_template.c b/math/s_fmin_template.c
index b70989a..82009bb 100644
--- a/math/s_fmin_template.c
+++ b/math/s_fmin_template.c
@@ -23,7 +23,14 @@
 FLOAT
 M_DECL_FUNC (__fmin) (FLOAT x, FLOAT y)
 {
-  return (islessequal (x, y) || isnan (y)) ? x : y;
+  if (islessequal (x, y))
+    return x;
+  else if (isgreater (x, y))
+    return y;
+  else if (issignaling (x) || issignaling (y))
+    return x + y;
+  else
+    return isnan (y) ? x : y;
 }
 declare_mgen_alias (__fmin, fmin);
 

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog              |    5 +++++
 math/s_fmax_template.c |    9 ++++++++-
 math/s_fmin_template.c |    9 ++++++++-
 3 files changed, 21 insertions(+), 2 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]