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 19:06:55 +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 #2 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, master has been updated
via aa0235dfdebffe9b338deba51f3ba563ee9b433d (commit)
from a1132b5e56fe8aaa148ebd249034181863857d60 (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=aa0235dfdebffe9b338deba51f3ba563ee9b433d
commit aa0235dfdebffe9b338deba51f3ba563ee9b433d
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.
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 15 +++++++++
math/Makefile | 4 ++-
math/math.h | 2 +-
...st-finite-macros.c => test-math-iscanonical.cc} | 31 ++++++++++++++------
sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h | 21 ++++++++++++-
sysdeps/ieee754/ldbl-96/bits/iscanonical.h | 19 +++++++++++-
sysdeps/powerpc/powerpc64le/Makefile | 1 +
7 files changed, 79 insertions(+), 14 deletions(-)
copy math/{test-finite-macros.c => test-math-iscanonical.cc} (66%)
--
You are receiving this mail because:
You are on the CC list for the bug.