This is the mail archive of the glibc-bugs@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]

[Bug math/22235] iscanonical in C++ and float128


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]