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.20-73-g43059f4


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  43059f42dbd6dd3926c33ee0cbc7583f0c3e84b9 (commit)
      from  2d6a47ba4ca899746db7fb5ba75a82f2cda93a91 (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=43059f42dbd6dd3926c33ee0cbc7583f0c3e84b9

commit 43059f42dbd6dd3926c33ee0cbc7583f0c3e84b9
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Thu Oct 9 01:00:41 2014 +0000

    soft-fp: Make extensions of subnormals from XFmode to TFmode signal underflow if traps enabled.
    
    This patch fixes a soft-fp corner case I previously noted in
    <https://sourceware.org/ml/libc-alpha/2013-10/msg00349.html>: when
    trapping on underflow is enabled, extensions of subnormals from XFmode
    to TFmode need to signal underflow because the result is tiny (but
    exact, so the underflow flag is not raised unless trapping is
    enabled).
    
    To avoid any excess initialization or tests for other cases of
    floating-point extensions, a new FP_INIT_TRAPPING_EXCEPTIONS is added
    that does the initialization required for this particular case (more
    than FP_INIT_EXCEPTIONS, less than FP_INIT_ROUNDMODE, in general), and
    FP_NO_EXACT_UNDERFLOW is added to stub out FP_TRAPPING_EXCEPTIONS
    tests for those cases of extensions where the test would be dead code,
    to avoid any uninitialized variable warnings.
    
    As the relevant case only applies in libgcc, not to any use of soft-fp
    in glibc, there is no bug report in Bugzilla and no non-default
    definitions of FP_INIT_TRAPPING_EXCEPTIONS are added by the patch.  A
    testcase will be added to GCC as part of an update of soft-fp in
    libgcc once this patch is in libc.
    
    Tested for powerpc-nofpu that the disassembly of installed shared
    libraries is unchanged by this patch.  Bootstrapped GCC with updated
    soft-fp with no regressions on x86_64-unknown-linux-gnu and verified
    that a test of the relevant case passes where it failed before.
    
    	* soft-fp/op-common.h (FP_EXTEND): When a subnormal input produces
    	a subnormal result, set the underflow exception if trapping on
    	underflow is enabled.
    	* soft-fp/soft-fp.h (FP_INIT_TRAPPING_EXCEPTIONS): New macro.
    	(FP_INIT_EXCEPTIONS): Default to FP_INIT_TRAPPING_EXCEPTIONS.
    	[FP_NO_EXACT_UNDERFLOW] (FP_TRAPPING_EXCEPTIONS): Undefine and
    	redefine to 0.
    	* soft-fp/extenddftf2.c (FP_NO_EXACT_UNDERFLOW): Define.
    	* soft-fp/extendsfdf2.c (FP_NO_EXACT_UNDERFLOW): Likewise.
    	* soft-fp/extendsftf2.c (FP_NO_EXACT_UNDERFLOW): Likewise.
    	* soft-fp/extendxftf2.c (__extendxftf2): Use
    	FP_INIT_TRAPPING_EXCEPTIONS instead of FP_INIT_ROUNDMODE.

diff --git a/ChangeLog b/ChangeLog
index b5faff4..703934d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2014-10-09  Joseph Myers  <joseph@codesourcery.com>
 
+	* soft-fp/op-common.h (FP_EXTEND): When a subnormal input produces
+	a subnormal result, set the underflow exception if trapping on
+	underflow is enabled.
+	* soft-fp/soft-fp.h (FP_INIT_TRAPPING_EXCEPTIONS): New macro.
+	(FP_INIT_EXCEPTIONS): Default to FP_INIT_TRAPPING_EXCEPTIONS.
+	[FP_NO_EXACT_UNDERFLOW] (FP_TRAPPING_EXCEPTIONS): Undefine and
+	redefine to 0.
+	* soft-fp/extenddftf2.c (FP_NO_EXACT_UNDERFLOW): Define.
+	* soft-fp/extendsfdf2.c (FP_NO_EXACT_UNDERFLOW): Likewise.
+	* soft-fp/extendsftf2.c (FP_NO_EXACT_UNDERFLOW): Likewise.
+	* soft-fp/extendxftf2.c (__extendxftf2): Use
+	FP_INIT_TRAPPING_EXCEPTIONS instead of FP_INIT_ROUNDMODE.
+
 	* soft-fp/soft-fp.h (FP_CLEAR_EXCEPTIONS): Remove macro.
 	* sysdeps/sparc/sparc32/soft-fp/q_itoq.c: Define FP_NO_EXCEPTIONS.
 	(_Q_itoq): Do not use FP_DECL_EX, FP_CLEAR_EXCEPTIONS or
diff --git a/soft-fp/extenddftf2.c b/soft-fp/extenddftf2.c
index 6984b41..1765532 100644
--- a/soft-fp/extenddftf2.c
+++ b/soft-fp/extenddftf2.c
@@ -28,6 +28,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXACT_UNDERFLOW
 #include "soft-fp.h"
 #include "double.h"
 #include "quad.h"
diff --git a/soft-fp/extendsfdf2.c b/soft-fp/extendsfdf2.c
index a9b6bfb..6224195 100644
--- a/soft-fp/extendsfdf2.c
+++ b/soft-fp/extendsfdf2.c
@@ -28,6 +28,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXACT_UNDERFLOW
 #include "soft-fp.h"
 #include "single.h"
 #include "double.h"
diff --git a/soft-fp/extendsftf2.c b/soft-fp/extendsftf2.c
index 07fc367..f67d614 100644
--- a/soft-fp/extendsftf2.c
+++ b/soft-fp/extendsftf2.c
@@ -28,6 +28,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#define FP_NO_EXACT_UNDERFLOW
 #include "soft-fp.h"
 #include "single.h"
 #include "quad.h"
diff --git a/soft-fp/extendxftf2.c b/soft-fp/extendxftf2.c
index 67b9095..a1386a6 100644
--- a/soft-fp/extendxftf2.c
+++ b/soft-fp/extendxftf2.c
@@ -39,7 +39,7 @@ __extendxftf2 (XFtype a)
   FP_DECL_Q (R);
   TFtype r;
 
-  FP_INIT_ROUNDMODE;
+  FP_INIT_TRAPPING_EXCEPTIONS;
   FP_UNPACK_RAW_E (A, a);
 #if (2 * _FP_W_TYPE_SIZE) < _FP_FRACBITS_Q
   FP_EXTEND (Q, E, 4, 4, R, A);
diff --git a/soft-fp/op-common.h b/soft-fp/op-common.h
index ec0bc42..e3212ec 100644
--- a/soft-fp/op-common.h
+++ b/soft-fp/op-common.h
@@ -1522,6 +1522,8 @@
 		  _FP_FRAC_SLL_##dwc (D, (_FP_FRACBITS_##dfs		\
 					  - _FP_FRACBITS_##sfs));	\
 		  D##_e = 0;						\
+		  if (FP_TRAPPING_EXCEPTIONS & FP_EX_UNDERFLOW)		\
+		    FP_SET_EXCEPTION (FP_EX_UNDERFLOW);			\
 		}							\
 	      else							\
 		{							\
diff --git a/soft-fp/soft-fp.h b/soft-fp/soft-fp.h
index ead9c97..4018b0e 100644
--- a/soft-fp/soft-fp.h
+++ b/soft-fp/soft-fp.h
@@ -108,9 +108,15 @@
 #endif
 
 /* Initialize any machine-specific state used in
+   FP_TRAPPING_EXCEPTIONS or FP_HANDLE_EXCEPTIONS.  */
+#ifndef FP_INIT_TRAPPING_EXCEPTIONS
+# define FP_INIT_TRAPPING_EXCEPTIONS FP_INIT_ROUNDMODE
+#endif
+
+/* Initialize any machine-specific state used in
    FP_HANDLE_EXCEPTIONS.  */
 #ifndef FP_INIT_EXCEPTIONS
-# define FP_INIT_EXCEPTIONS FP_INIT_ROUNDMODE
+# define FP_INIT_EXCEPTIONS FP_INIT_TRAPPING_EXCEPTIONS
 #endif
 
 #ifndef FP_HANDLE_EXCEPTIONS
@@ -162,6 +168,16 @@
 
 #endif
 
+/* A file using soft-fp may define FP_NO_EXACT_UNDERFLOW before
+   including soft-fp.h to indicate that, although a macro used there
+   could allow for the case of exact underflow requiring the underflow
+   exception to be raised if traps are enabled, for the particular
+   arguments used in that file no exact underflow can occur.  */
+#ifdef FP_NO_EXACT_UNDERFLOW
+# undef FP_TRAPPING_EXCEPTIONS
+# define FP_TRAPPING_EXCEPTIONS 0
+#endif
+
 #define _FP_ROUND_NEAREST(wc, X)				\
   do								\
     {								\

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

Summary of changes:
 ChangeLog             |   13 +++++++++++++
 soft-fp/extenddftf2.c |    1 +
 soft-fp/extendsfdf2.c |    1 +
 soft-fp/extendsftf2.c |    1 +
 soft-fp/extendxftf2.c |    2 +-
 soft-fp/op-common.h   |    2 ++
 soft-fp/soft-fp.h     |   18 +++++++++++++++++-
 7 files changed, 36 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]