This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.24-190-gbb8081f
- From: jsm28 at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 23 Sep 2016 21:54:53 -0000
- Subject: 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