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-190-gbb8081f


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  bb8081f57f23a3e1b28b1b7104f24d17da9a3d82 (commit)
      from  4775578486c8ee2aa09b402eb272eb932e7e0691 (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=bb8081f57f23a3e1b28b1b7104f24d17da9a3d82

commit bb8081f57f23a3e1b28b1b7104f24d17da9a3d82
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Fri Sep 23 21:54:21 2016 +0000

    Add iszero.
    
    TS 18661-1 adds an iszero classification macro to <math.h>.  This
    patch implements it for glibc.  There are no new underlying functions
    in libm because the implementation uses fpclassify when sNaN support
    is required and a direct comparison otherwise; any optimizations for
    this macro should be done through adding __builtin_iszero in GCC and
    using it in the header for suitable GCC versions, not through adding
    other optimized inline or out-of-line versions to glibc.
    
    Tested for x86_64 and x86.
    
    	* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iszero): New
    	macro.
    	* math/libm-test.inc (iszero_test_data): New array.
    	(iszero_test): New function.
    	(main): Call iszero_test.
    	* manual/arith.texi (Floating Point Classes): Document iszero.
    	* manual/libm-err-tab.pl: Update comment on interfaces without
    	ulps tabulated.

diff --git a/ChangeLog b/ChangeLog
index fa6d945..6cbe430 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2016-09-23  Joseph Myers  <joseph@codesourcery.com>
+
+	* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iszero): New
+	macro.
+	* math/libm-test.inc (iszero_test_data): New array.
+	(iszero_test): New function.
+	(main): Call iszero_test.
+	* manual/arith.texi (Floating Point Classes): Document iszero.
+	* manual/libm-err-tab.pl: Update comment on interfaces without
+	ulps tabulated.
+
 2016-09-23  Zack Weinberg  <zackw@panix.com>
 
 	* scripts/check-installed-headers.sh: New script.
diff --git a/NEWS b/NEWS
index 23ca5ab..e295274 100644
--- a/NEWS
+++ b/NEWS
@@ -51,7 +51,7 @@ Version 2.25
 
 * New <math.h> features are added from TS 18661-1:2014:
 
-  - Classification macros: issubnormal.
+  - Classification macros: issubnormal, iszero.
 
 * The <sys/quota.h> header now includes the <linux/quota.h> header.  Support
   for the Linux quota interface which predates kernel version 2.4.22 has
diff --git a/manual/arith.texi b/manual/arith.texi
index bfa236a..58f3578 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -414,6 +414,14 @@ This macro returns a nonzero value if @var{x} is subnormal.  It is
 from TS 18661-1:2014.
 @end deftypefn
 
+@comment math.h
+@comment ISO
+@deftypefn {Macro} int iszero (@emph{float-type} @var{x})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+This macro returns a nonzero value if @var{x} is zero.  It is from TS
+18661-1:2014.
+@end deftypefn
+
 Another set of floating-point classification functions was provided by
 BSD.  @Theglibc{} also supports these functions; however, we
 recommend that you use the ISO C99 macros in new code.  Those are standard
diff --git a/manual/libm-err-tab.pl b/manual/libm-err-tab.pl
index adeadb8..2386772 100755
--- a/manual/libm-err-tab.pl
+++ b/manual/libm-err-tab.pl
@@ -78,7 +78,7 @@ use vars qw (%results @all_floats %suffices @all_functions);
     "scalbn", "sin", "sincos", "sinh", "sqrt", "tan", "tanh", "tgamma",
     "trunc", "y0", "y1", "yn" );
 # fpclassify, isnormal, isfinite, isinf, isnan, issignaling,
-# issubnormal, signbit, isgreater, isgreaterequal, isless,
+# issubnormal, iszero, signbit, isgreater, isgreaterequal, isless,
 # islessequal, islessgreater, isunordered are not tabulated.
 
 if ($#ARGV == 0) {
diff --git a/math/libm-test.inc b/math/libm-test.inc
index 385ec5c..872bafd 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -46,7 +46,7 @@
    cbrt, ceil, copysign, cos, cosh, drem, erf, erfc, exp, exp10, exp2, expm1,
    fabs, fdim, finite, floor, fma, fmax, fmin, fmod, fpclassify,
    frexp, gamma, hypot,
-   ilogb, isfinite, isinf, isnan, isnormal, issignaling, issubnormal,
+   ilogb, isfinite, isinf, isnan, isnormal, issignaling, issubnormal, iszero,
    isless, islessequal, isgreater, isgreaterequal, islessgreater, isunordered,
    j0, j1, jn,
    ldexp, lgamma, log, log10, log1p, log2, logb,
@@ -8671,6 +8671,31 @@ isunordered_test (void)
   ALL_RM_TEST (isunordered, 1, isunordered_test_data, RUN_TEST_LOOP_ff_i_tg, END);
 }
 
+static const struct test_f_i_data iszero_test_data[] =
+  {
+    TEST_f_b (iszero, 0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, minus_zero, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, 10, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, min_subnorm_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, -min_subnorm_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, min_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, -min_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, max_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, -max_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, plus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, minus_infty, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, qnan_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, -qnan_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, snan_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+    TEST_f_b (iszero, -snan_value, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
+  };
+
+static void
+iszero_test (void)
+{
+  ALL_RM_TEST (iszero, 1, iszero_test_data, RUN_TEST_LOOP_f_b_tg, END);
+}
+
 static const struct test_f_f_data j0_test_data[] =
   {
     /* j0 is the Bessel function of the first kind of order 0 */
@@ -12694,6 +12719,7 @@ main (int argc, char **argv)
   isnormal_test ();
   issignaling_test ();
   issubnormal_test ();
+  iszero_test ();
   signbit_test ();
 
   /* Trigonometric functions:  */
diff --git a/math/math.h b/math/math.h
index 064cc56..0a09959 100644
--- a/math/math.h
+++ b/math/math.h
@@ -331,6 +331,13 @@ enum
 
 /* Return nonzero value if X is subnormal.  */
 # define issubnormal(x) (fpclassify (x) == FP_SUBNORMAL)
+
+/* Return nonzero value if X is zero.  */
+# ifdef __SUPPORT_SNAN__
+#  define iszero(x) (fpclassify (x) == FP_ZERO)
+# else
+#  define iszero(x) ((x) == 0)
+# endif
 #endif /* Use IEC_60559_BFP_EXT.  */
 
 #ifdef	__USE_MISC

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

Summary of changes:
 ChangeLog              |   11 +++++++++++
 NEWS                   |    2 +-
 manual/arith.texi      |    8 ++++++++
 manual/libm-err-tab.pl |    2 +-
 math/libm-test.inc     |   28 +++++++++++++++++++++++++++-
 math/math.h            |    7 +++++++
 6 files changed, 55 insertions(+), 3 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]