Add iscanonical.
TS 18661-1 adds an iscanonical classification macro to <math.h>.
The motivation for this is decimal floating-point, where some values
have both canonical and noncanonical encodings. For IEEE binary
interchange formats, all encodings are canonical. For x86/m68k
ldbl-96, and for ldbl-128ibm, there are encodings that do not
represent any valid value of the type; although formally iscanonical
does not need to handle trap representations (and so could just always
return 1), it seems useful, and in line with the description in the TS
of "representations that are extraneous to the floating-point model"
as being non-canonical (as well as "redundant representations of some
or all of its values"), for it to detect those representations and
return 0 for them.
This patch adds iscanonical to glibc. It goes in a header
<bits/iscanonical.h>, included under appropriate conditions in
<math.h>. The default header version just evaluates the argument
(converted to its semantic type, though current GCC will probably
discard that conversion and any exceptions resulting from it) and
returns 1. ldbl-96 and ldbl-128ibm then have versions of the header
that call a function __iscanonicall for long double (the sizeof-based
tests will of course need updating for float128 support, like other
such type-generic macro implementations). The ldbl-96 version of
__iscanonicall has appropriate conditionals to reflect the differences
in the m68k version of that format (where the high mantissa bit may be
either 0 or 1 when the exponent is 0 or 0x7fff). Corresponding tests
for those formats are added as well. Other architectures do not have
any new functions added because just returning 1 is correct for all
their floating-point formats.
Tested for x86_64, x86, mips64 (to test the default macro version) and
powerpc.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)]: Include
<bits/iscanonical.h>.
* bits/iscanonical.h: New file.
* math/s_iscanonicall.c: Likewise.
* math/Versions (__iscanonicall): New libm symbol at version
GLIBC_2.25.
* math/libm-test.inc (iscanonical_test_data): New array.
(iscanonical_test): New function.
(main): Call iscanonical_test.
* math/Makefile (headers): Add bits/iscanonical.h.
(type-ldouble-routines): Add s_iscanonicall.
* manual/arith.texi (Floating Point Classes): Document
iscanonical.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/test-iscanonical-ldbl-128ibm.c:
Likewise.
* sysdeps/ieee754/ldbl-128ibm/Makefile (tests): Add
test-iscanonical-ldbl-128ibm.
* sysdeps/ieee754/ldbl-96/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-96/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-96/test-iscanonical-ldbl-96.c: Likewise.
* sysdeps/ieee754/ldbl-96/Makefile: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-09-30 00:24:19 +00:00
|
|
|
# Makefile for sysdeps/ieee754/ldbl-96.
|
2025-01-01 18:14:45 +00:00
|
|
|
# Copyright (C) 2016-2025 Free Software Foundation, Inc.
|
Add iscanonical.
TS 18661-1 adds an iscanonical classification macro to <math.h>.
The motivation for this is decimal floating-point, where some values
have both canonical and noncanonical encodings. For IEEE binary
interchange formats, all encodings are canonical. For x86/m68k
ldbl-96, and for ldbl-128ibm, there are encodings that do not
represent any valid value of the type; although formally iscanonical
does not need to handle trap representations (and so could just always
return 1), it seems useful, and in line with the description in the TS
of "representations that are extraneous to the floating-point model"
as being non-canonical (as well as "redundant representations of some
or all of its values"), for it to detect those representations and
return 0 for them.
This patch adds iscanonical to glibc. It goes in a header
<bits/iscanonical.h>, included under appropriate conditions in
<math.h>. The default header version just evaluates the argument
(converted to its semantic type, though current GCC will probably
discard that conversion and any exceptions resulting from it) and
returns 1. ldbl-96 and ldbl-128ibm then have versions of the header
that call a function __iscanonicall for long double (the sizeof-based
tests will of course need updating for float128 support, like other
such type-generic macro implementations). The ldbl-96 version of
__iscanonicall has appropriate conditionals to reflect the differences
in the m68k version of that format (where the high mantissa bit may be
either 0 or 1 when the exponent is 0 or 0x7fff). Corresponding tests
for those formats are added as well. Other architectures do not have
any new functions added because just returning 1 is correct for all
their floating-point formats.
Tested for x86_64, x86, mips64 (to test the default macro version) and
powerpc.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)]: Include
<bits/iscanonical.h>.
* bits/iscanonical.h: New file.
* math/s_iscanonicall.c: Likewise.
* math/Versions (__iscanonicall): New libm symbol at version
GLIBC_2.25.
* math/libm-test.inc (iscanonical_test_data): New array.
(iscanonical_test): New function.
(main): Call iscanonical_test.
* math/Makefile (headers): Add bits/iscanonical.h.
(type-ldouble-routines): Add s_iscanonicall.
* manual/arith.texi (Floating Point Classes): Document
iscanonical.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/test-iscanonical-ldbl-128ibm.c:
Likewise.
* sysdeps/ieee754/ldbl-128ibm/Makefile (tests): Add
test-iscanonical-ldbl-128ibm.
* sysdeps/ieee754/ldbl-96/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-96/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-96/test-iscanonical-ldbl-96.c: Likewise.
* sysdeps/ieee754/ldbl-96/Makefile: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-09-30 00:24:19 +00:00
|
|
|
# This file is part of the GNU C Library.
|
|
|
|
|
|
|
|
# The GNU C Library is free software; you can redistribute it and/or
|
|
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
|
|
# License as published by the Free Software Foundation; either
|
|
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
# The GNU C Library is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
# Lesser General Public License for more details.
|
|
|
|
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
|
|
# License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 05:40:42 +00:00
|
|
|
# <https://www.gnu.org/licenses/>.
|
Add iscanonical.
TS 18661-1 adds an iscanonical classification macro to <math.h>.
The motivation for this is decimal floating-point, where some values
have both canonical and noncanonical encodings. For IEEE binary
interchange formats, all encodings are canonical. For x86/m68k
ldbl-96, and for ldbl-128ibm, there are encodings that do not
represent any valid value of the type; although formally iscanonical
does not need to handle trap representations (and so could just always
return 1), it seems useful, and in line with the description in the TS
of "representations that are extraneous to the floating-point model"
as being non-canonical (as well as "redundant representations of some
or all of its values"), for it to detect those representations and
return 0 for them.
This patch adds iscanonical to glibc. It goes in a header
<bits/iscanonical.h>, included under appropriate conditions in
<math.h>. The default header version just evaluates the argument
(converted to its semantic type, though current GCC will probably
discard that conversion and any exceptions resulting from it) and
returns 1. ldbl-96 and ldbl-128ibm then have versions of the header
that call a function __iscanonicall for long double (the sizeof-based
tests will of course need updating for float128 support, like other
such type-generic macro implementations). The ldbl-96 version of
__iscanonicall has appropriate conditionals to reflect the differences
in the m68k version of that format (where the high mantissa bit may be
either 0 or 1 when the exponent is 0 or 0x7fff). Corresponding tests
for those formats are added as well. Other architectures do not have
any new functions added because just returning 1 is correct for all
their floating-point formats.
Tested for x86_64, x86, mips64 (to test the default macro version) and
powerpc.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)]: Include
<bits/iscanonical.h>.
* bits/iscanonical.h: New file.
* math/s_iscanonicall.c: Likewise.
* math/Versions (__iscanonicall): New libm symbol at version
GLIBC_2.25.
* math/libm-test.inc (iscanonical_test_data): New array.
(iscanonical_test): New function.
(main): Call iscanonical_test.
* math/Makefile (headers): Add bits/iscanonical.h.
(type-ldouble-routines): Add s_iscanonicall.
* manual/arith.texi (Floating Point Classes): Document
iscanonical.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/test-iscanonical-ldbl-128ibm.c:
Likewise.
* sysdeps/ieee754/ldbl-128ibm/Makefile (tests): Add
test-iscanonical-ldbl-128ibm.
* sysdeps/ieee754/ldbl-96/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-96/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-96/test-iscanonical-ldbl-96.c: Likewise.
* sysdeps/ieee754/ldbl-96/Makefile: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-09-30 00:24:19 +00:00
|
|
|
|
|
|
|
ifeq ($(subdir),math)
|
Avoid ldbl-96 stack corruption from range reduction of pseudo-zero (bug 25487).
Bug 25487 reports stack corruption in ldbl-96 sinl on a pseudo-zero
argument (an representation where all the significand bits, including
the explicit high bit, are zero, but the exponent is not zero, which
is not a valid representation for the long double type).
Although this is not a valid long double representation, existing
practice in this area (see bug 4586, originally marked invalid but
subsequently fixed) is that we still seek to avoid invalid memory
accesses as a result, in case of programs that treat arbitrary binary
data as long double representations, although the invalid
representations of the ldbl-96 format do not need to be consistently
handled the same as any particular valid representation.
This patch makes the range reduction detect pseudo-zero and unnormal
representations that would otherwise go to __kernel_rem_pio2, and
returns a NaN for them instead of continuing with the range reduction
process. (Pseudo-zero and unnormal representations whose unbiased
exponent is less than -1 have already been safely returned from the
function before this point without going through the rest of range
reduction.) Pseudo-zero representations would previously result in
the value passed to __kernel_rem_pio2 being all-zero, which is
definitely unsafe; unnormal representations would previously result in
a value passed whose high bit is zero, which might well be unsafe
since that is not a form of input expected by __kernel_rem_pio2.
Tested for x86_64.
2020-02-12 23:31:56 +00:00
|
|
|
tests += test-canonical-ldbl-96 test-totalorderl-ldbl-96 test-sinl-pseudo
|
2020-02-13 16:01:15 +00:00
|
|
|
ifeq ($(have-ssp),yes)
|
Avoid ldbl-96 stack corruption from range reduction of pseudo-zero (bug 25487).
Bug 25487 reports stack corruption in ldbl-96 sinl on a pseudo-zero
argument (an representation where all the significand bits, including
the explicit high bit, are zero, but the exponent is not zero, which
is not a valid representation for the long double type).
Although this is not a valid long double representation, existing
practice in this area (see bug 4586, originally marked invalid but
subsequently fixed) is that we still seek to avoid invalid memory
accesses as a result, in case of programs that treat arbitrary binary
data as long double representations, although the invalid
representations of the ldbl-96 format do not need to be consistently
handled the same as any particular valid representation.
This patch makes the range reduction detect pseudo-zero and unnormal
representations that would otherwise go to __kernel_rem_pio2, and
returns a NaN for them instead of continuing with the range reduction
process. (Pseudo-zero and unnormal representations whose unbiased
exponent is less than -1 have already been safely returned from the
function before this point without going through the rest of range
reduction.) Pseudo-zero representations would previously result in
the value passed to __kernel_rem_pio2 being all-zero, which is
definitely unsafe; unnormal representations would previously result in
a value passed whose high bit is zero, which might well be unsafe
since that is not a form of input expected by __kernel_rem_pio2.
Tested for x86_64.
2020-02-12 23:31:56 +00:00
|
|
|
CFLAGS-test-sinl-pseudo.c += -fstack-protector-all
|
Add iscanonical.
TS 18661-1 adds an iscanonical classification macro to <math.h>.
The motivation for this is decimal floating-point, where some values
have both canonical and noncanonical encodings. For IEEE binary
interchange formats, all encodings are canonical. For x86/m68k
ldbl-96, and for ldbl-128ibm, there are encodings that do not
represent any valid value of the type; although formally iscanonical
does not need to handle trap representations (and so could just always
return 1), it seems useful, and in line with the description in the TS
of "representations that are extraneous to the floating-point model"
as being non-canonical (as well as "redundant representations of some
or all of its values"), for it to detect those representations and
return 0 for them.
This patch adds iscanonical to glibc. It goes in a header
<bits/iscanonical.h>, included under appropriate conditions in
<math.h>. The default header version just evaluates the argument
(converted to its semantic type, though current GCC will probably
discard that conversion and any exceptions resulting from it) and
returns 1. ldbl-96 and ldbl-128ibm then have versions of the header
that call a function __iscanonicall for long double (the sizeof-based
tests will of course need updating for float128 support, like other
such type-generic macro implementations). The ldbl-96 version of
__iscanonicall has appropriate conditionals to reflect the differences
in the m68k version of that format (where the high mantissa bit may be
either 0 or 1 when the exponent is 0 or 0x7fff). Corresponding tests
for those formats are added as well. Other architectures do not have
any new functions added because just returning 1 is correct for all
their floating-point formats.
Tested for x86_64, x86, mips64 (to test the default macro version) and
powerpc.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)]: Include
<bits/iscanonical.h>.
* bits/iscanonical.h: New file.
* math/s_iscanonicall.c: Likewise.
* math/Versions (__iscanonicall): New libm symbol at version
GLIBC_2.25.
* math/libm-test.inc (iscanonical_test_data): New array.
(iscanonical_test): New function.
(main): Call iscanonical_test.
* math/Makefile (headers): Add bits/iscanonical.h.
(type-ldouble-routines): Add s_iscanonicall.
* manual/arith.texi (Floating Point Classes): Document
iscanonical.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-128ibm/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/test-iscanonical-ldbl-128ibm.c:
Likewise.
* sysdeps/ieee754/ldbl-128ibm/Makefile (tests): Add
test-iscanonical-ldbl-128ibm.
* sysdeps/ieee754/ldbl-96/bits/iscanonical.h: New file.
* sysdeps/ieee754/ldbl-96/s_iscanonicall.c: Likewise.
* sysdeps/ieee754/ldbl-96/test-iscanonical-ldbl-96.c: Likewise.
* sysdeps/ieee754/ldbl-96/Makefile: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Update.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm-le.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
2016-09-30 00:24:19 +00:00
|
|
|
endif
|
2022-10-31 23:20:08 +00:00
|
|
|
|
|
|
|
CFLAGS-w_acosl.c += -fno-builtin-acosf64x
|
|
|
|
CFLAGS-w_acoshl.c += -fno-builtin-acoshf64x
|
|
|
|
CFLAGS-w_asinl.c += -fno-builtin-asinf64x
|
|
|
|
CFLAGS-s_asinhl.c += -fno-builtin-asinhf64x
|
|
|
|
CFLAGS-s_atanl.c += -fno-builtin-atanf64x
|
|
|
|
CFLAGS-w_atan2l.c += -fno-builtin-atan2f64x
|
|
|
|
CFLAGS-w_atanhl.c += -fno-builtin-atanhf64x
|
|
|
|
CFLAGS-s_cabsl.c += -fno-builtin-cabsf64x
|
|
|
|
CFLAGS-s_cacosl.c += -fno-builtin-cacosf64x
|
|
|
|
CFLAGS-s_cacoshl.c += -fno-builtin-cacoshf64x
|
|
|
|
CFLAGS-s_canonicalizel.c += -fno-builtin-canonicalizef64x
|
|
|
|
CFLAGS-s_cargl.c += -fno-builtin-cargf64x
|
|
|
|
CFLAGS-s_casinl.c += -fno-builtin-casinf64x
|
|
|
|
CFLAGS-s_casinhl.c += -fno-builtin-casinhf64x
|
|
|
|
CFLAGS-s_catanl.c += -fno-builtin-catanf64x
|
|
|
|
CFLAGS-s_catanhl.c += -fno-builtin-catanhf64x
|
|
|
|
CFLAGS-s_cbrtl.c += -fno-builtin-cbrtf64x
|
|
|
|
CFLAGS-s_ccosl.c += -fno-builtin-ccosf64x
|
|
|
|
CFLAGS-s_ccoshl.c += -fno-builtin-ccoshf64x
|
|
|
|
CFLAGS-s_ceill.c += -fno-builtin-ceilf64x
|
|
|
|
CFLAGS-s_cexpl.c += -fno-builtin-cexpf64x
|
|
|
|
CFLAGS-s_cimagl.c += -fno-builtin-cimagf64x
|
|
|
|
CFLAGS-s_clogl.c += -fno-builtin-clogf64x
|
|
|
|
CFLAGS-s_clog10l.c += -fno-builtin-clog10f64x
|
|
|
|
CFLAGS-s_conjl.c += -fno-builtin-conjf64x
|
|
|
|
CFLAGS-s_copysignl.c += -fno-builtin-copysignf64x
|
|
|
|
CFLAGS-s_cosl.c += -fno-builtin-cosf64x
|
|
|
|
CFLAGS-w_coshl.c += -fno-builtin-coshf64x
|
|
|
|
CFLAGS-s_cpowl.c += -fno-builtin-cpowf64x
|
|
|
|
CFLAGS-s_cprojl.c += -fno-builtin-cprojf64x
|
|
|
|
CFLAGS-s_creall.c += -fno-builtin-crealf64x
|
|
|
|
CFLAGS-s_csinl.c += -fno-builtin-csinf64x
|
|
|
|
CFLAGS-s_csinhl.c += -fno-builtin-csinhf64x
|
|
|
|
CFLAGS-s_csqrtl.c += -fno-builtin-csqrtf64x
|
|
|
|
CFLAGS-s_ctanl.c += -fno-builtin-ctanf64x
|
|
|
|
CFLAGS-s_ctanhl.c += -fno-builtin-ctanhf64x
|
|
|
|
CFLAGS-s_daddl.c += -fno-builtin-f64addf64x
|
|
|
|
CFLAGS-s_ddivl.c += -fno-builtin-f64divf64x
|
|
|
|
CFLAGS-s_dfmal.c += -fno-builtin-f64fmaf64x
|
|
|
|
CFLAGS-s_dmull.c += -fno-builtin-f64mulf64x
|
|
|
|
CFLAGS-s_dsqrtl.c += -fno-builtin-f64sqrtf64x
|
|
|
|
CFLAGS-s_dsubl.c += -fno-builtin-f64subf64x
|
|
|
|
CFLAGS-s_erfl.c += -fno-builtin-erff64x
|
|
|
|
CFLAGS-s_erfcl.c += -fno-builtin-erfcf64x
|
|
|
|
CFLAGS-e_expl.c += -fno-builtin-expf64x
|
|
|
|
CFLAGS-w_exp10l.c += -fno-builtin-exp10f64x
|
|
|
|
CFLAGS-e_exp2l.c += -fno-builtin-exp2f64x
|
|
|
|
CFLAGS-s_expm1l.c += -fno-builtin-expm1f64x
|
|
|
|
CFLAGS-s_fabsl.c += -fno-builtin-fabsf64x
|
|
|
|
CFLAGS-s_faddl.c += -fno-builtin-f32addf64x
|
|
|
|
CFLAGS-s_fdiml.c += -fno-builtin-fdimf64x
|
|
|
|
CFLAGS-s_fdivl.c += -fno-builtin-f32divf64x
|
|
|
|
CFLAGS-s_ffmal.c += -fno-builtin-f32fmaf64x
|
|
|
|
CFLAGS-s_floorl.c += -fno-builtin-floorf64x
|
|
|
|
CFLAGS-s_fmal.c += -fno-builtin-fmaf64x
|
|
|
|
CFLAGS-s_fmaxl.c += -fno-builtin-fmaxf64x
|
|
|
|
CFLAGS-s_fmaximuml.c += -fno-builtin-fmaximumf64x
|
|
|
|
CFLAGS-s_fmaximum_magl.c += -fno-builtin-fmaximum_magf64x
|
|
|
|
CFLAGS-s_fmaximum_mag_numl.c += -fno-builtin-fmaximum_mag_numf64x
|
|
|
|
CFLAGS-s_fmaximum_numl.c += -fno-builtin-fmaximum_numf64x
|
|
|
|
CFLAGS-s_fmaxmagl.c += -fno-builtin-fmaxmagf64x
|
|
|
|
CFLAGS-s_fminl.c += -fno-builtin-fminf64x
|
|
|
|
CFLAGS-s_fminimuml.c += -fno-builtin-fminimumf64x
|
|
|
|
CFLAGS-s_fminimum_magl.c += -fno-builtin-fminimum_magf64x
|
|
|
|
CFLAGS-s_fminimum_mag_numl.c += -fno-builtin-fminimum_mag_numf64x
|
|
|
|
CFLAGS-s_fminimum_numl.c += -fno-builtin-fminimum_numf64x
|
|
|
|
CFLAGS-s_fminmagl.c += -fno-builtin-fminmagf64x
|
|
|
|
CFLAGS-w_fmodl.c += -fno-builtin-fmodf64x
|
|
|
|
CFLAGS-s_fmull.c += -fno-builtin-f32mulf64x
|
|
|
|
CFLAGS-s_frexpl.c += -fno-builtin-frexpf64x
|
|
|
|
CFLAGS-s_fromfpl.c += -fno-builtin-fromfpf64x
|
|
|
|
CFLAGS-s_fromfpxl.c += -fno-builtin-fromfpxf64x
|
|
|
|
CFLAGS-s_fsqrtl.c += -fno-builtin-f32sqrtf64x
|
|
|
|
CFLAGS-s_fsubl.c += -fno-builtin-f32subf64x
|
|
|
|
CFLAGS-s_getpayloadl.c += -fno-builtin-getpayloadf64x
|
|
|
|
CFLAGS-w_hypotl.c += -fno-builtin-hypotf64x
|
|
|
|
CFLAGS-w_ilogbl.c += -fno-builtin-ilogbf64x
|
|
|
|
CFLAGS-w_j0l.c += -fno-builtin-j0f64x
|
|
|
|
CFLAGS-w_j1l.c += -fno-builtin-j1f64x
|
|
|
|
CFLAGS-w_jnl.c += -fno-builtin-jnf64x
|
|
|
|
CFLAGS-s_ldexpl.c += -fno-builtin-ldexpf64x
|
|
|
|
CFLAGS-w_lgammal.c += -fno-builtin-lgammaf64x
|
|
|
|
CFLAGS-w_lgammal_r.c += -fno-builtin-lgammaf64x_r
|
|
|
|
CFLAGS-w_llogbl.c += -fno-builtin-llogbf64x
|
|
|
|
CFLAGS-s_llrintl.c += -fno-builtin-llrintf64x
|
|
|
|
CFLAGS-s_llroundl.c += -fno-builtin-llroundf64x
|
|
|
|
CFLAGS-e_logl.c += -fno-builtin-logf64x
|
|
|
|
CFLAGS-w_log10l.c += -fno-builtin-log10f64x
|
Implement C23 logp1
C23 adds various <math.h> function families originally defined in TS
18661-4. Add the logp1 functions (aliases for log1p functions - the
name is intended to be more consistent with the new log2p1 and
log10p1, where clearly it would have been very confusing to name those
functions log21p and log101p). As aliases rather than new functions,
the content of this patch is somewhat different from those actually
adding new functions.
Tests are shared with log1p, so this patch *does* mechanically update
all affected libm-test-ulps files to expect the same errors for both
functions.
The vector versions of log1p on aarch64 and x86_64 are *not* updated
to have logp1 aliases (and thus there are no corresponding header,
tests, abilist or ulps changes for vector functions either). It would
be reasonable for such vector aliases and corresponding changes to
other files to be made separately. For now, the log1p tests instead
avoid testing logp1 in the vector case (a Makefile change is needed to
avoid problems with grep, used in generating the .c files for vector
function tests, matching more than one ALL_RM_TEST line in a file
testing multiple functions with the same inputs, when it assumes that
the .inc file only has a single such line).
Tested for x86_64 and x86, and with build-many-glibcs.py.
2024-06-17 13:47:09 +00:00
|
|
|
CFLAGS-w_log1pl.c += -fno-builtin-log1pf64x -fno-builtin-logp1f64x
|
2022-10-31 23:20:08 +00:00
|
|
|
CFLAGS-e_log2l.c += -fno-builtin-log2f64x
|
|
|
|
CFLAGS-s_logbl.c += -fno-builtin-logbf64x
|
|
|
|
CFLAGS-s_lrintl.c += -fno-builtin-lrintf64x
|
|
|
|
CFLAGS-s_lroundl.c += -fno-builtin-lroundf64x
|
|
|
|
CFLAGS-s_modfl.c += -fno-builtin-modff64x
|
|
|
|
CFLAGS-s_nanl.c += -fno-builtin-nanf64x
|
|
|
|
CFLAGS-s_nearbyintl.c += -fno-builtin-nearbyintf64x
|
|
|
|
CFLAGS-s_nextafterl.c += -fno-builtin-nextafterf64x
|
|
|
|
CFLAGS-s_nextdownl.c += -fno-builtin-nextdownf64x
|
|
|
|
CFLAGS-s_nextupl.c += -fno-builtin-nextupf64x
|
|
|
|
CFLAGS-e_powl.c += -fno-builtin-powf64x
|
|
|
|
CFLAGS-w_remainderl.c += -fno-builtin-remainderf64x
|
|
|
|
CFLAGS-s_remquol.c += -fno-builtin-remquof64x
|
|
|
|
CFLAGS-s_rintl.c += -fno-builtin-rintf64x
|
|
|
|
CFLAGS-s_roundl.c += -fno-builtin-roundf64x
|
|
|
|
CFLAGS-s_roundevenl.c += -fno-builtin-roundevenf64x
|
|
|
|
CFLAGS-w_scalblnl.c += -fno-builtin-scalblnf64x
|
|
|
|
CFLAGS-s_scalbnl.c += -fno-builtin-scalbnf64x
|
|
|
|
CFLAGS-s_setpayloadl.c += -fno-builtin-setpayloadf64x
|
|
|
|
CFLAGS-s_setpayloadsigl.c += -fno-builtin-setpayloadsigf64x
|
|
|
|
CFLAGS-s_sinl.c += -fno-builtin-sinf64x
|
|
|
|
CFLAGS-s_sincosl.c += -fno-builtin-sincosf64x
|
|
|
|
CFLAGS-w_sinhl.c += -fno-builtin-sinhf64x
|
|
|
|
CFLAGS-w_sqrtl.c += -fno-builtin-sqrtf64x
|
|
|
|
CFLAGS-s_tanl.c += -fno-builtin-tanf64x
|
|
|
|
CFLAGS-s_tanhl.c += -fno-builtin-tanhf64x
|
|
|
|
CFLAGS-w_tgammal.c += -fno-builtin-tgammaf64x
|
|
|
|
CFLAGS-s_totalorderl.c += -fno-builtin-totalorderf64x
|
|
|
|
CFLAGS-s_totalordermagl.c += -fno-builtin-totalordermagf64x
|
|
|
|
CFLAGS-s_truncl.c += -fno-builtin-truncf64x
|
|
|
|
CFLAGS-s_ufromfpl.c += -fno-builtin-ufromfpf64x
|
|
|
|
CFLAGS-s_ufromfpxl.c += -fno-builtin-ufromfpxf64x
|
|
|
|
CFLAGS-s_y0l.c += -fno-builtin-y0f64x
|
|
|
|
CFLAGS-s_y1l.c += -fno-builtin-y1f64x
|
|
|
|
CFLAGS-s_ynl.c += -fno-builtin-ynf64x
|
|
|
|
|
2020-02-13 16:01:15 +00:00
|
|
|
endif # $(subdir) == math
|