This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug math/21930] C-only gcc builtins used in <math.h> isinf
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Thu, 31 Aug 2017 19:25:02 +0000
- Subject: [Bug math/21930] C-only gcc builtins used in <math.h> isinf
- Auto-submitted: auto-generated
- References: <bug-21930-131@http.sourceware.org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=21930
--- Comment #16 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
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, release/2.26/master has been updated
via 58270c0049404ef2f878fdd45df55f17f0b8c1f7 (commit)
via 35dded99a89db873b06270ca7f21245a0faf712a (commit)
via ef8566d72af5e03c1b82cf02efb794268a347f8c (commit)
from 6043d77a47de297b62084c1c261cdada082bf09c (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 -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=58270c0049404ef2f878fdd45df55f17f0b8c1f7
commit 58270c0049404ef2f878fdd45df55f17f0b8c1f7
Author: Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Date: Tue Aug 22 16:34:42 2017 -0300
Provide a C++ version of iszero that does not use __MATH_TG (bug 21930)
When signaling nans are enabled (with -fsignaling-nans), the C++ version
of iszero uses the fpclassify macro, which is defined with __MATH_TG.
However, when support for float128 is available, __MATH_TG uses the
builtin __builtin_types_compatible_p, which is only available in C mode.
This patch refactors the C++ version of iszero so that it uses function
overloading to select between the floating-point types, instead of
relying on fpclassify and __MATH_TG.
Tested for powerpc64le, s390x, x86_64, and with build-many-glibcs.py.
[BZ #21930]
* math/math.h [defined __cplusplus && defined __SUPPORT_SNAN__]
(iszero): New C++ implementation that does not use
fpclassify/__MATH_TG/__builtin_types_compatible_p, when
signaling nans are enabled, since __builtin_types_compatible_p
is a C-only feature.
* math/test-math-iszero.cc: When __HAVE_DISTINCT_FLOAT128 is
defined, include ieee754_float128.h for access to the union and
member ieee854_float128.ieee.
[__HAVE_DISTINCT_FLOAT128] (do_test): Call check_float128.
[__HAVE_DISTINCT_FLOAT128] (check_float128): New function.
* sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
(CXXFLAGS-test-math-iszero.cc): Add -mfloat128 to the build
options of test-math-zero on powerpc64le.
(cherry picked from commit 42496114ec0eb7d6d039d05d4262e109951c600c)
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=35dded99a89db873b06270ca7f21245a0faf712a
commit 35dded99a89db873b06270ca7f21245a0faf712a
Author: Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Date: Wed Aug 23 10:16:54 2017 -0300
Fix the C++ version of issignaling when __NO_LONG_DOUBLE_MATH is defined
When __NO_LONG_DOUBLE_MATH is defined, __issignalingl is not available,
thus issignaling with long double argument should call __issignaling,
instead.
Tested for powerpc64le.
* math/math.h [defined __cplusplus] (issignaling): In the long
double case, call __issignalingl only if __NO_LONG_DOUBLE_MATH
is not defined. Call __issignaling, otherwise.
(cherry picked from commit 3d7b66f66cb223e899a7ebc0f4c20f13e711c9e0)
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ef8566d72af5e03c1b82cf02efb794268a347f8c
commit ef8566d72af5e03c1b82cf02efb794268a347f8c
Author: Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
Date: Mon Aug 14 13:46:15 2017 -0300
Provide a C++ version of issignaling that does not use __MATH_TG
The macro __MATH_TG contains the logic to select between long double and
_Float128, when these types are ABI-distinct. This logic relies on
__builtin_types_compatible_p, which is not available in C++ mode.
On the other hand, C++ function overloading provides the means to
distinguish between the floating-point types. The overloading
resolution will match the correct parameter regardless of type
qualifiers, i.e.: const and volatile.
Tested for powerpc64le, s390x, and x86_64.
* math/math.h [defined __cplusplus] (issignaling): Provide a C++
definition for issignaling that does not rely on __MATH_TG,
since __MATH_TG uses __builtin_types_compatible_p, which is only
available in C mode.
(CFLAGS-test-math-issignaling.cc): New variable.
* math/Makefile [CXX] (tests): Add test-math-issignaling.
* math/test-math-issignaling.cc: New test for C++ implementation
of type-generic issignaling.
* sysdeps/powerpc/powerpc64le/Makefile [subdir == math]
(CXXFLAGS-test-math-issignaling.cc): Add -mfloat128 to the build
options of test-math-issignaling on powerpc64le.
(cherry picked from commit a16e8bc08edca84d507715c66d6cddbbc7ed3b62)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 37 +++++++++
math/Makefile | 3 +-
math/math.h | 60 ++++++++++++++-
...est-math-iszero.cc => test-math-issignaling.cc} | 78 +++++++++++++------
math/test-math-iszero.cc | 79 ++++++++++++++++++++
sysdeps/powerpc/powerpc64le/Makefile | 4 +-
6 files changed, 229 insertions(+), 32 deletions(-)
copy math/{test-math-iszero.cc => test-math-issignaling.cc} (52%)
--
You are receiving this mail because:
You are on the CC list for the bug.