This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug math/22235] iscanonical in C++ and float128
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Tue, 03 Oct 2017 20:55:18 +0000
- Subject: [Bug math/22235] iscanonical in C++ and float128
- Auto-submitted: auto-generated
- References: <bug-22235-131@http.sourceware.org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=22235
--- Comment #4 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 3b10c5d2abb0392d5ecfd865e2eb911ac109e36f (commit)
from 3f68c5c9b61600f0f85c75bac15b1520d5059359 (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=3b10c5d2abb0392d5ecfd865e2eb911ac109e36f
commit 3b10c5d2abb0392d5ecfd865e2eb911ac109e36f
Author: Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
Date: Mon Oct 2 14:46:35 2017 -0300
Add C++ versions of iscanonical for ldbl-96 and ldbl-128ibm (bug 22235)
All representations of floating-point numbers in types with IEC 60559
binary exchange format are canonical. On the other hand, types with IEC
60559 extended formats, such as those implemented under ldbl-96 and
ldbl-128ibm, contain representations that are not canonical.
TS 18661-1 introduced the type-generic macro iscanonical, which returns
whether a floating-point value is canonical or not. In Glibc, this
type-generic macro is implemented using the macro __MATH_TG, which, when
support for float128 is enabled, relies on __builtin_types_compatible_p
to select between floating-point types. However, this use of
iscanonical breaks C++ applications, because the builtin is only
available in C mode.
This patch provides a C++ implementation of iscanonical that relies on
function overloading, rather than builtins, to select between
floating-point types.
Unlike the C++ implementations for iszero and issignaling, this
implementation ignores __NO_LONG_DOUBLE_MATH. The double type always
matches IEC 60559 double format, which is always canonical. Thus, when
double and long double are the same (__NO_LONG_DOUBLE_MATH), iscanonical
always returns 1 and is not implemented with __MATH_TG.
Tested for powerpc64, powerpc64le and x86_64.
[BZ #22235]
* math/math.h: Trivial fix for unbalanced parentheses in comment.
* math/Makefile [CXX] (tests): Add test-math-iscanonical.cc.
(CFLAGS-test-math-iscanonical.cc): New variable.
* math/test-math-iscanonical.cc: New file.
* sysdeps/ieee754/ldbl-96/bits/iscanonical.h (iscanonical):
Provide a C++ implementation based on function overloading,
rather than using __MATH_TG, which uses C-only builtins.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h (iscanonical):
Likewise.
* sysdeps/powerpc/powerpc64le/Makefile
(CFLAGS-test-math-iscanonical.cc): New variable.
(cherry picked from commit aa0235dfdebffe9b338deba51f3ba563ee9b433d)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 15 +++++++++
NEWS | 1 +
math/Makefile | 4 ++-
math/math.h | 2 +-
debug/tst-ssp-1.c => math/test-math-iscanonical.cc | 33 +++++++++++---------
sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h | 21 +++++++++++-
sysdeps/ieee754/ldbl-96/bits/iscanonical.h | 19 +++++++++++-
sysdeps/powerpc/powerpc64le/Makefile | 1 +
8 files changed, 76 insertions(+), 20 deletions(-)
copy debug/tst-ssp-1.c => math/test-math-iscanonical.cc (65%)
--
You are receiving this mail because:
You are on the CC list for the bug.