Age | Commit message (Collapse) | Author |
|
|
|
TS 18661-1 defines fromfp functions (fromfp, fromfpx, ufromfp,
ufromfpx, and float and long double variants) to convert from
floating-point to an integer type with any signedness and any given
width up to that of intmax_t, in any of the five IEEE rounding modes
(the usual four for binary floating point, plus rounding to nearest
with ties rounding away from zero), with control of whether in-range
non-integer values should result in the "inexact" exception being
raised. This patch implements these functions for glibc.
These implementations are (apart from raising exceptions) pure integer
implementations; it's entirely possible optimized versions could be
devised for some architectures. A common math/fromfp.h header
provides various common helper code that can readily be shared between
the implementations for different types. For each type, the bulk of
the implementation is also shared between the four functions, with
wrappers that define UNSIGNED and INEXACT macros appropriately before
including the main implementation.
As the functions return intmax_t and uintmax_t without math.h being
allowed to expose those typedef names, they are declared using
__intmax_t and __uintmax_t as obtained from <bits/types.h>.
The FP_INT_* rounding direction macros are defined as ascending
integers in the order the names are listed in the TS; I see no
significant value in allowing architectures to vary the values of
them.
The libm-test machinery is duly adapted to handle unsigned int
arguments, and intmax_t and uintmax_t results. Because each test
input is generally tested for four functions, five rounding modes and
several different widths, the libm-test.inc additions are very large.
Thus, the diffs in the body of this message exclude the libm-test.inc
changes, with the full patch being attached gzipped. The bulk of the
new tests were generated (expanded from a test input plus rounding
results and information about where it lies in the relevant interval
between integers, to libm-test tests for all relevant combinations of
function, rounding direction and width) by a script that's included in
the patch as math/gen-fromfp-tests.py (input data
math/gen-fromfp-tests-inputs); as an ad hoc script that's not really
expected to be rerun, it's not very polished, but it's at least
plausibly useful for adding any further tests for these functions in
future. I may split the libm-test tests up by function in future (so
both libm-test.inc and auto-libm-test-out are split into separate
files, and the tests for each function are also built and run
separately), but not for 2.25.
For no obvious reason, adding tgmath tests for the new functions
resulted in -Wuninitialized errors from test-tgmath.c about the
variable i being used uninitialized. Those errors were correct - the
variable is read by the frexp version in test-tgmath.c (where real
frexp would write through that pointer instead of reading it) - but I
don't know why this patch would result in the pre-existing issue being
newly detected. The patch initializes the variable to avoid those
errors.
With these changes, glibc 2.25 should have all the library features
from TS 18661-1 other than the functions that round result to narrower
type (and constant rounding directions, but I'm considering those
mainly a compiler feature not a library one).
Tested for x86_64, x86, mips64 and powerpc.
* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
(fromfp): New declaration.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (fromfpx): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (ufromfp): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (ufromfpx): Likewise.
* math/tgmath.h (__TGMATH_TERNARY_FIRST_REAL_RET_ONLY): New macro.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (fromfp): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (ufromfp): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (fromfpx): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (ufromfpx): Likewise.
* math/math.h: Include <bits/types.h>.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (FP_INT_UPWARD): New enum
constant and macro.
(FP_INT_DOWNWARD): Likewise.
(FP_INT_TOWARDZERO): Likewise.
(FP_INT_TONEARESTFROMZERO): Likewise.
(FP_INT_TONEAREST): Likewise.
* math/Versions (fromfp): New libm symbol at version GLIBC_2.25.
(fromfpf): Likewise.
(fromfpl): Likewise.
(ufromfp): Likewise.
(ufromfpf): Likewise.
(ufromfpl): Likewise.
(fromfpx): Likewise.
(fromfpxf): Likewise.
(fromfpxl): Likewise.
(ufromfpx): Likewise.
(ufromfpxf): Likewise.
(ufromfpxl): Likewise.
* math/Makefile (libm-calls): Add s_fromfpF, s_ufromfpF,
s_fromfpxF and s_ufromfpxF.
* math/gen-fromfp-tests.py: New file.
* math/gen-fromfp-tests-inputs: Likewise.
* math/libm-test.inc: Include <stdint.h>
(check_intmax_t): New function.
(check_uintmax_t): Likewise.
(struct test_fiu_M_data): New type.
(struct test_fiu_U_data): Likewise.
(RUN_TEST_fiu_M): New macro.
(RUN_TEST_LOOP_fiu_M): Likewise.
(RUN_TEST_fiu_U): Likewise.
(RUN_TEST_LOOP_fiu_U): Likewise.
(fromfp_test_data): New array.
(fromfp_test): New function.
(fromfpx_test_data): New array.
(fromfpx_test): New function.
(ufromfp_test_data): New array.
(ufromfp_test): New function.
(ufromfpx_test_data): New array.
(ufromfpx_test): New function.
(main): Call fromfp_test, fromfpx_test, ufromfp_test and
ufromfpx_test.
* math/gen-libm-test.pl (parse_args): Handle u, M and U descriptor
characters.
* math/test-tgmath-ret.c: Include <stdint.h>.
(rm): New variable.
(width): Likewise.
(CHECK_RET_CONST_TYPE): Take extra arguments and pass them to
called function.
(CHECK_RET_CONST_FLOAT): Take extra arguments and pass them to
CHECK_RET_CONST_TYPE.
(CHECK_RET_CONST_DOUBLE): Likewise.
(CHECK_RET_CONST_LDOUBLE): Likewise.
(CHECK_RET_CONST): Take extra arguments and pass them to calls
macros.
(fromfp): New CHECK_RET_CONST call.
(ufromfp): Likewise.
(fromfpx): Likewise.
(ufromfpx): Likewise.
(do_test): Call check_return_fromfp, check_return_ufromfp,
check_return_fromfpx and check_return_ufromfpx.
* math/test-tgmath.c: Include <stdint.h>
(NCALLS): Increase to 138.
(F(compile_test)): Initialize i. Call fromfp functions.
(F(fromfp)): New function.
(F(fromfpx)): Likewise.
(F(ufromfp)): Likewise.
(F(ufromfpx)): Likewise.
* manual/arith.texi (Rounding Functions): Document FP_INT_UPWARD,
FP_INT_DOWNWARD, FP_INT_TOWARDZERO, FP_INT_TONEARESTFROMZERO,
FP_INT_TONEAREST, fromfp, fromfpf, fromfpl, ufromfp, ufromfpf,
ufromfpl, fromfpx, fromfpxf, fromfpxl, ufromfpx, ufromfpxf and
ufromfpxl.
* manual/libm-err-tab.pl (@all_functions): Add fromfp, fromfpx,
ufromfp and ufromfpx.
* math/fromfp.h: New file.
* sysdeps/ieee754/dbl-64/s_fromfp.c: Likewise.
* sysdeps/ieee754/dbl-64/s_fromfp_main.c: Likewise.
* sysdeps/ieee754/dbl-64/s_fromfpx.c: Likewise.
* sysdeps/ieee754/dbl-64/s_ufromfp.c: Likewise.
* sysdeps/ieee754/dbl-64/s_ufromfpx.c: Likewise.
* sysdeps/ieee754/flt-32/s_fromfpf.c: Likewise.
* sysdeps/ieee754/flt-32/s_fromfpf_main.c: Likewise.
* sysdeps/ieee754/flt-32/s_fromfpxf.c: Likewise.
* sysdeps/ieee754/flt-32/s_ufromfpf.c: Likewise.
* sysdeps/ieee754/flt-32/s_ufromfpxf.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_fromfpl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_fromfpl_main.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_fromfpxl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_ufromfpl.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_ufromfpxl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_fromfpl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_fromfpl_main.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_fromfpxl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_ufromfpl.c: Likewise.
* sysdeps/ieee754/ldbl-128ibm/s_ufromfpxl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_fromfpl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_fromfpl_main.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_fromfpxl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_ufromfpl.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_ufromfpxl.c: Likewise.
* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add fromfp,
ufromfp, fromfpx and ufromfpx.
(CFLAGS-nldbl-fromfp.c): New variable.
(CFLAGS-nldbl-fromfpx.c): Likewise.
(CFLAGS-nldbl-ufromfp.c): Likewise.
(CFLAGS-nldbl-ufromfpx.c): Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-compat.h: Include <stdint.h>.
* sysdeps/ieee754/ldbl-opt/nldbl-fromfp.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fromfpx.c: Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-ufromfp.c: Likewise.
* sysdeps/ieee754/ldbl-opt/nldbl-ufromfpx.c: Likewise.
* sysdeps/nacl/libm.abilist: Update.
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/nios2/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/s390/s390-32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
|
|
Information about whether the ABI of long double is the same as that
of double is split between bits/mathdef.h and bits/wordsize.h.
When the ABIs are the same, bits/mathdef.h defines
__NO_LONG_DOUBLE_MATH. In addition, in the case where the same glibc
binary supports both -mlong-double-64 and -mlong-double-128,
bits/wordsize.h defines __LONG_DOUBLE_MATH_OPTIONAL, along with
__NO_LONG_DOUBLE_MATH if this particular compilation is with
-mlong-double-64.
As part of the refactoring I proposed in
<https://sourceware.org/ml/libc-alpha/2016-11/msg00745.html>, this
patch puts all that information in a single header,
bits/long-double.h. It is included from sys/cdefs.h alongside the
include of bits/wordsize.h, so other headers generally do not need to
include bits/long-double.h directly.
Previously, various bits/mathdef.h headers and bits/wordsize.h headers
had this long double information (including implicitly in some
bits/mathdef.h headers through not having the defines present in the
default version). After the patch, it's all in six bits/long-double.h
headers. Furthermore, most of those new headers are not
architecture-specific. Architectures with optional long double all
use the ldbl-opt sysdeps directory, either in the order (ldbl-64-128,
ldbl-opt, ldbl-128) or (ldbl-128ibm, ldbl-opt). Thus a generic header
for the case where long double = double, and headers in ldbl-128,
ldbl-96 and ldbl-opt, suffices to cover every architecture except for
cases where long double properties vary between different ABIs sharing
a set of installed headers; fortunately all the ldbl-opt cases share a
single compiler-predefined macro __LONG_DOUBLE_128__ that can be used
to tell whether this compilation is -mlong-double-64 or
-mlong-double-128.
The two cases where a set of headers is shared between ABIs with
different long double properties, MIPS (o32 has long double = double,
other ABIs use ldbl-128) and SPARC (32-bit has optional long double,
64-bit has required long double), need their own bits/long-double.h
headers.
As with bits/wordsize.h, multiple-include protection for this header
is generally implicit through the include guards on sys/cdefs.h, and
multiple inclusion is harmless in any case. There is one subtlety:
the header must not define __LONG_DOUBLE_MATH_OPTIONAL if
__NO_LONG_DOUBLE_MATH was defined before its inclusion, because doing
so breaks how sysdeps/ieee754/ldbl-opt/nldbl-compat.h defines
__NO_LONG_DOUBLE_MATH itself before including system headers. Subject
to keeping that working, it would be reasonable to move these macros
from defined/undefined #ifdef to always-defined 1/0 #if semantics, but
this patch does not attempt to do so, just rearranges where the macros
are defined.
After this patch, the only use of bits/mathdef.h is the alpha one for
modifying complex function ABIs for old GCC. Thus, all versions of
the header other than the default and alpha versions are removed, as
is the include from math.h.
Tested for x86_64 and x86. Also did compilation-only testing with
build-many-glibcs.py.
* bits/long-double.h: New file.
* sysdeps/ieee754/ldbl-128/bits/long-double.h: Likewise.
* sysdeps/ieee754/ldbl-96/bits/long-double.h: Likewise.
* sysdeps/ieee754/ldbl-opt/bits/long-double.h: Likewise.
* sysdeps/mips/bits/long-double.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/long-double.h: Likewise.
* math/Makefile (headers): Add bits/long-double.h.
* misc/sys/cdefs.h: Include <bits/long-double.h>.
* stdlib/strtold.c: Include <bits/long-double.h> instead of
<bits/wordsize.h>.
* bits/mathdef.h [!_COMPLEX_H]: Do not allow inclusion.
[!__NO_LONG_DOUBLE_MATH]: Remove conditional code.
* math/math.h: Do not include <bits/mathdef.h>.
* sysdeps/aarch64/bits/mathdef.h: Remove file.
* sysdeps/alpha/bits/mathdef.h [!_COMPLEX_H]: Do not allow
inclusion.
* sysdeps/ia64/bits/mathdef.h: Remove file.
* sysdeps/m68k/m680x0/bits/mathdef.h: Likewise.
* sysdeps/mips/bits/mathdef.h: Likewise.
* sysdeps/powerpc/bits/mathdef.h: Likewise.
* sysdeps/s390/bits/mathdef.h: Likewise.
* sysdeps/sparc/bits/mathdef.h: Likewise.
* sysdeps/x86/bits/mathdef.h: Likewise.
* sysdeps/s390/s390-32/bits/wordsize.h
[!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]: Remove
conditional code.
* sysdeps/s390/s390-64/bits/wordsize.h
[!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]:
Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/wordsize.h
[!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/wordsize.h
[!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]:
Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/wordsize.h
[!__NO_LONG_DOUBLE_MATH && !__LONG_DOUBLE_MATH_OPTIONAL]:
Likewise.
|
|
TS 18661-1 defines llogb functions that are like ilogb except that
they return long int instead of int. Corresponding FP_LLOGB* macros
are defined, whose values are required to have the obvious
correspondence to those of the FP_ILOGB* macros.
This patch implements these functions and macros for glibc. llogb
uses the type-generic infrastructure, with an implementation similar
to the wrapper for ilogb but with additional conversion from FP_ILOGB*
to FP_LLOGB*; this approach avoids needing to modify or duplicate any
of the architecture-specific ilogb implementations. Tests are also
based on those for ilogb.
Ideally the llogb functions would alias the ilogb ones when long is
32-bit, but such aliasing requires the associated header declarations
of the different-type alias to be hidden, typically by defining macros
before including the header (see e.g. how
sysdeps/ieee754/dbl-64/wordsize-64/s_llround.c defines lround to
__hidden_lround before including <math.h>). The infrastructure for
type-generic function implementations does not support defining such
macros at present (since C code can't define a macro whose name is
determined by other macros). So this patch leaves them as separate
functions (similar to e.g. scalbln and scalbn being separate in such a
case as well), but with the remapping of FP_ILOGB* to FP_LLOGB*
conditioned out in the case where it would be the identity map.
Tested for x86_64, x86, mips64 and powerpc.
* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (llogb):
New declaration.
* math/tgmath.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (llogb): New
macro.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (__FP_LONG_MAX):
New macro.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (FP_LLOGB0): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (FP_LLOGBNAN): Likewise.
* math/Versions (llogb): New libm symbol at version GLIBC_2.25.
(llogbf): Likewise.
(llogbl): Likewise.
* math/Makefile (gen-libm-calls): Add w_llogbF.
(tests): Add test-fp-llogb-constants.
* math/w_llogb_template.c: New file. Based on
math/w_ilogb_template.c.
* math/libm-test.inc (llogb_test_data): New array.
(llogb_test): New function.
(main): Call llogb_test.
* math/test-fp-llogb-constants.c: New file. Based on
math/test-fp-ilogb-constants.c.
* math/test-tgmath-ret.c (llogb): New CHECK_RET_CONST call.
(do_test): Call check_return_llogb.
* math/test-tgmath.c (NCALLS): Increase to 126.
(F(compile_test)): Call llogb.
(F(llogb)): New function.
* manual/math.texi (Exponents and Logarithms): Document llogb,
llogbf, llogbl, FP_LLOGB0 and FP_LLOGBNAN.
* manual/libm-err-tab.pl (@all_functions): Add llogb.
* sysdeps/ieee754/ldbl-opt/nldbl-llogb.c: New file.
* sysdeps/ieee754/ldbl-opt/w_llogbl.c: Likewise.
* sysdeps/ieee754/ldbl-opt/Makefile (libnldbl-calls): Add llogb.
(CFLAGS-nldbl-llogb.c): New variable.
* sysdeps/nacl/libm.abilist: Update.
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/nios2/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/s390/s390-32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
|
|
Continuing the refactoring of bits/mathdef.h, this patch stops it
defining FP_ILOGB0 and FP_ILOGBNAN, moving the required information to
a new header bits/fp-logb.h.
There are only two possible values of each of those macros permitted
by ISO C. TS 18661-1 adds corresponding macros for llogb, and their
values are required to correspond to those of the ilogb macros in the
obvious way. Thus two boolean values - for which the same choices are
correct for most architectures - suffice to determine the value of all
these macros, and by defining macros for those boolean values in
bits/fp-logb.h we can then define the public FP_* macros in math.h and
avoid the present duplication of the associated feature test macro
logic.
This patch duly moves to bits/fp-logb.h defining __FP_LOGB0_IS_MIN and
__FP_LOGBNAN_IS_MIN. Default definitions of those to 0 are correct
for both architectures, while ia64, m68k and x86 get their own
versions of bits/fp-logb.h to reflect their use of values different
from the defaults.
The patch renders many copies of bits/mathdef.h trivial (needed only
to avoid the default __NO_LONG_DOUBLE_MATH). I'll revise
<https://sourceware.org/ml/libc-alpha/2016-11/msg00865.html>
accordingly so that it removes all bits/mathdef.h headers except the
default one and the alpha one, and arranges for the header to be
included only by complex.h as the only remaining use at that point
will be for the alpha ABI issues there.
Tested for x86_64 and x86. Also did compile-only testing with
build-many-glibcs.py (using glibc sources from before the commit that
introduced many build failures with undefined __GI___sigsetjmp).
* bits/fp-logb.h: New file.
* sysdeps/ia64/bits/fp-logb.h: Likewise.
* sysdeps/m68k/m680x0/bits/fp-logb.h: Likewise.
* sysdeps/x86/bits/fp-logb.h: Likewise.
* math/Makefile (headers): Add bits/fp-logb.h.
* math/math.h: Include <bits/fp-logb.h>.
[__USE_ISOC99] (FP_ILOGB0): Define based on __FP_LOGB0_IS_MIN.
[__USE_ISOC99] (FP_ILOGBNAN): Define based on __FP_LOGBNAN_IS_MIN.
* bits/mathdef.h (FP_ILOGB0): Remove.
(FP_ILOGBNAN): Likewise.
* sysdeps/aarch64/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/alpha/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/ia64/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/m68k/m680x0/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/mips/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/powerpc/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/s390/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/sparc/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
* sysdeps/x86/bits/mathdef.h (FP_ILOGB0): Likewise.
(FP_ILOGBNAN): Likewise.
|
|
Continuing the refactoring of bits/mathdef.h, this patch moves the
FP_FAST_* definitions into a new bits/fp-fast.h header. Currently
this is only for FP_FAST_FMA*, but in future it would be the
appropriate place for the FP_FAST_* macros from TS 18661-1 as well.
The generic bits/mathdef.h header defines these macros based on
whether the compiler defines __FP_FAST_*. Most architecture-specific
headers, however, fail to do so, meaning that if the architecture (or
some particular processors) does in fact have fused operations, and
GCC knows to use them inline, the FP_FAST_* macros will still not be
defined.
By refactoring, this patch causes the generic version (based on
__FP_FAST_*) to be used in more cases, and so the macro definitions to
be more accurate. Architectures that already defined some or all of
these macros other than based on the predefines have their own
versions of fp-fast.h, which are arranged so they define FP_FAST_* if
either the architecture-specific conditions are true or __FP_FAST_*
are defined.
After this refactoring, various bits/mathdef.h headers for
architectures with long double = double are semantically identical to
the generic version. The patch removes those headers that are
redundant. (In fact two of the four removed were already redundant
before this patch because they did use __FP_FAST_*.)
Tested for x86_64 and x86, and compilation-only with
build-many-glibcs.py.
* bits/fp-fast.h: New file.
* sysdeps/aarch64/bits/fp-fast.h: Likewise.
* sysdeps/powerpc/bits/fp-fast.h: Likewise.
* math/Makefile (headers): Add bits/fp-fast.h.
* math/math.h: Include <bits/fp-fast.h>.
* bits/mathdef.h (FP_FAST_FMA): Remove.
(FP_FAST_FMAF): Likewise.
(FP_FAST_FMAL): Likewise.
* sysdeps/aarch64/bits/mathdef.h (FP_FAST_FMA): Likewise.
(FP_FAST_FMAF): Likewise.
* sysdeps/powerpc/bits/mathdef.h (FP_FAST_FMA): Likewise.
(FP_FAST_FMAF): Likewise.
* sysdeps/x86/bits/mathdef.h (FP_FAST_FMA): Likewise.
(FP_FAST_FMAF): Likewise.
(FP_FAST_FMAL): Likewise.
* sysdeps/arm/bits/mathdef.h: Remove file.
* sysdeps/hppa/fpu/bits/mathdef.h: Likewise.
* sysdeps/sh/sh4/bits/mathdef.h: Likewise.
* sysdeps/tile/bits/mathdef.h: Likewise.
|
|
At present, definitions of float_t and double_t are split among many
bits/mathdef.h headers.
For all but three architectures, these types are float and double.
Furthermore, if you assume __FLT_EVAL_METHOD__ to be defined, that
provides a more generic way of determining the correct values of these
typedefs. Defining these typedefs more generally based on
__FLT_EVAL_METHOD__ was previously proposed by Paul Eggert in
<https://sourceware.org/ml/libc-alpha/2012-02/msg00002.html>.
This patch refactors things in the way I proposed in
<https://sourceware.org/ml/libc-alpha/2016-11/msg00745.html>. A new
header bits/flt-eval-method.h defines a single macro,
__GLIBC_FLT_EVAL_METHOD, which is then used by math.h to define
float_t and double_t. The default is based on __FLT_EVAL_METHOD__
(although actually a default to 0 would have the same effect for
current ports, because ports where values other than 0 or 16 are
possible all have their own headers).
To avoid changing the existing semantics in any case, including for
compilers not defining __FLT_EVAL_METHOD__, architecture-specific
files are then added for m68k, s390, x86 which replicate the existing
semantics. At least with __FLT_EVAL_METHOD__ values possible with
GCC, there should be no change to the choices of float_t and double_t
for any supported configuration.
Architecture maintainer notes:
* m68k: sysdeps/m68k/m680x0/bits/flt-eval-method.h always defines
__GLIBC_FLT_EVAL_METHOD to 2 to replicate the existing logic. But
actually GCC defines __FLT_EVAL_METHOD__ to 0 if TARGET_68040. It
might make sense to make the header prefer to base things on
__FLT_EVAL_METHOD__ if defined, like the x86 version, and so make
the choices of these types more accurate (with a NEWS entry as for
the other changes to these types on particular architectures).
* s390: sysdeps/s390/bits/flt-eval-method.h always defines
__GLIBC_FLT_EVAL_METHOD to 1 to replicate the existing logic. As
previously discussed, it might make sense in coordination with GCC
to eliminate the historic mistake, avoid excess precision in the
-fexcess-precision=standard case and make the typedefs match (with a
NEWS entry, again).
Tested for x86-64 and x86. Also did compilation-only testing with
build-many-glibcs.py.
* bits/flt-eval-method.h: New file.
* sysdeps/m68k/m680x0/bits/flt-eval-method.h: Likewise.
* sysdeps/s390/bits/flt-eval-method.h: Likewise.
* sysdeps/x86/bits/flt-eval-method.h: Likewise.
* math/Makefile (headers): Add bits/flt-eval-method.h.
* math/math.h: Include <bits/flt-eval-method.h>.
[__USE_ISOC99] (float_t): Define based on __GLIBC_FLT_EVAL_METHOD.
[__USE_ISOC99] (double_t): Likewise.
* bits/mathdef.h (float_t): Remove.
(double_t): Likewise.
* sysdeps/aarch64/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/alpha/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/arm/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/hppa/fpu/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/ia64/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/m68k/m680x0/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/mips/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/powerpc/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/s390/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/sh/sh4/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/sparc/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/tile/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
* sysdeps/x86/bits/mathdef.h (float_t): Likewise.
(double_t): Likewise.
|
|
This patch refactors some type-generic libm macros, in both math.h and
math_private.h, to be based on a common __MATH_TG macro rather than
all replicating similar logic to choose a function to call based on
the type of the argument.
This should serve to illustrate what I think float128 support for such
macros should look like: common macros such as __MATH_TG may need
different definitions depending on whether float128 is supported in
glibc, so that the individual macros themselves do not need
conditionals on float128 support.
Tested for x86_64, x86, mips64 and powerpc.
* math/math.h (__MATH_TG): New macro.
[__USE_ISOC99] (fpclassify): Define using __MATH_TG.
[__USE_ISOC99] (signbit): Likewise.
[__USE_ISOC99] (isfinite): Likewise.
[__USE_ISOC99] (isnan): Likewise.
[__USE_ISOC99] (isinf): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (issignaling): Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (__MATH_EVAL_FMT2): New macro.
[__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define using
__MATH_TG and __MATH_EVAL_FMT2.
* sysdeps/generic/math_private.h (fabs_tg): Define using
__MATH_TG.
* sysdeps/ieee754/ldbl-128ibm/bits/iscanonical.h
[!__NO_LONG_DOUBLE_MATH] (__iscanonicalf): New macro.
[!__NO_LONG_DOUBLE_MATH] (__iscanonical): Likewise.
[!__NO_LONG_DOUBLE_MATH] (iscanonical): Define using __MATH_TG.
* sysdeps/ieee754/ldbl-96/bits/iscanonical.h (__iscanonicalf): New
macro.
(__iscanonical): Likewise.
(iscanonical): Define using __MATH_TG.
|
|
TS 18661-1 defines SNAN macros for signaling NaN values, suitable for
use in static initializers. This patch adds them to glibc's <math.h>
(provided you are building with GCC 3.3 or later; no attempt is made
to provide any kind of nonconforming fallback for older compilers
without the __builtin_nans functions).
Tested for x86_64 and x86.
* math/math.h
[__GLIBC_USE (IEC_60559_BFP_EXT) && __GNUC_PREREQ (3, 3)] (SNANF):
New macro.
[__GLIBC_USE (IEC_60559_BFP_EXT) && __GNUC_PREREQ (3, 3)] (SNAN):
Likewise.
[__GLIBC_USE (IEC_60559_BFP_EXT) && __GNUC_PREREQ (3, 3)] (SNANL):
Likewise.
* manual/arith.texi (Infinity and NaN): Document SNANF, SNAN and
SNANL.
* math/test-double.h (snan_value_MACRO): New macro.
* math/test-float.h (snan_value_MACRO): Likewise.
* math/test-ldouble.h (snan_value_MACRO): Likewise.
* math/libm-test.inc (issignaling_test_data): Add tests of
snan_value_MACRO.
|
|
It is still common to include system header files in an extern "C"
block. This means that exiting <math.h>'s own extern "C" block
is not sufficient to get back to C++ mode. Use an extern "C++"
wrapper instead.
|
|
This increases compatibility with C++ code which is forced to
compile with _GNU_SOURCE.
|
|
iseqsig, like other type-generic comparison macros, should behave like
a comparison operator in not removing excess range and precision from
its arguments (see C11 F.10.11). This patch implements this by making
definitions of iseqsig appropriately conditional on
__FLT_EVAL_METHOD__ (including support for TS 18661-3 values of that
macro), with a corresponding testcase (that failed for 32-bit x86 in
the absence of the math.h changes) being added. (Of course the
definitions may need reworking when float128 support is added, just as
with other type-generic macros.)
Tested for x86_64 and x86.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): Define
conditional on value of [__FLT_EVAL_METHOD__].
* math/test-iseqsig-excess-precision.c: New file.
* math/Makefile (tests): Add test-iseqsig-excess-precision.
|
|
TS 18661-1 adds an iseqsig type-generic comparison macro to <math.h>.
This macro is like the == operator except that unordered operands
result in the "invalid" exception and errno being set to EDOM.
This patch implements this macro for glibc. Given the need to set
errno, this is implemented with out-of-line functions __iseqsigf,
__iseqsig and __iseqsigl (of which the last only exists at all if long
double is ABI-distinct from double, so no function aliases or compat
support are needed). The present patch ignores excess precision
issues; I intend to deal with those in a followup patch. (Like
comparison operators, type-generic comparison macros should *not*
convert operands to their semantic types but should preserve excess
range and precision, meaning that for some argument types and values
of FLT_EVAL_METHOD, an underlying function should be called for a
wider type than that of the arguments.)
The underlying functions are implemented with the type-generic
template machinery. Comparing x <= y && x >= y is sufficient in ISO C
to achieve an equality comparison with "invalid" raised for unordered
operands (and the results of those two comparisons can also be used to
tell whether errno needs to be set). However, some architectures have
GCC bugs meaning that unordered comparison instructions are used
instead of ordered ones. Thus, a mechanism is provided for
architectures to use an explicit call to feraiseexcept to raise
exceptions if required. If your architecture has such a bug you
should add a fix-fp-int-compare-invalid.h header for it, with a
comment pointing to the relevant GCC bug report; if such a GCC bug is
fixed, that header's contents should have a __GNUC_PREREQ conditional
added so that the workaround can eventually be removed for that
architecture.
Tested for x86_64, x86, mips64, arm and powerpc.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iseqsig): New
macro.
* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
(__iseqsig): New declaration.
* math/s_iseqsig_template.c: New file.
* math/Versions (__iseqsigf): New libm symbol at version
GLIBC_2.25.
(__iseqsig): Likewise.
(__iseqsigl): Likewise.
* math/libm-test.inc (iseqsig_test_data): New array.
(iseqsig_test): New function.
(main): Call iseqsig_test.
* math/Makefile (gen-libm-calls): Add s_iseqsigF.
* manual/arith.texi (FP Comparison Functions): Document iseqsig.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
* sysdeps/generic/fix-fp-int-compare-invalid.h: New file.
* sysdeps/powerpc/fpu/fix-fp-int-compare-invalid.h: Likewise.
* sysdeps/x86/fpu/fix-fp-int-compare-invalid.h: Likewise.
* sysdeps/nacl/libm.abilist: Update.
* sysdeps/unix/sysv/linux/aarch64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/alpha/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/arm/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/hppa/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/microblaze/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/nios2/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/s390/s390-32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sh/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist:
Likewise.
* sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
|
|
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.
|
|
Floating-point classification macros are supposed to remove any excess
range or precision from their arguments. This patch fixes the
non-sNaN version of iszero to do so, by casting the argument to its
own type. (This will of course work only for standard-conforming
excess precision, not for what GCC does on 32-bit x86 by default where
the back end hides excess precision from the front end; the same
applies to most of the classification macros in that case, as showed
up when we made them use GCC built-in functions.)
(iseqsig will have the reverse issue, needing to ensure that when an
underlying function is used it's for a type wide enough not to remove
any excess precision, since comparison macros must not remove excess
precision.)
Tested for x86_64 and x86.
* math/math.h
[__GLIBC_USE (IEC_60559_BFP_EXT) && !__SUPPORT_SNAN__] (iszero):
Cast argument to its own type.
* math/test-iszero-excess-precision.c: New file.
* math/Makefile (tests): Add test-iszero-excess-precision.
(CFLAGS-test-iszero-excess-precision.c): New variable.
|
|
TS 18661-1 adds an iszero classification macro to <math.h>. This
patch implements it for glibc. There are no new underlying functions
in libm because the implementation uses fpclassify when sNaN support
is required and a direct comparison otherwise; any optimizations for
this macro should be done through adding __builtin_iszero in GCC and
using it in the header for suitable GCC versions, not through adding
other optimized inline or out-of-line versions to glibc.
Tested for x86_64 and x86.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (iszero): New
macro.
* math/libm-test.inc (iszero_test_data): New array.
(iszero_test): New function.
(main): Call iszero_test.
* manual/arith.texi (Floating Point Classes): Document iszero.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
|
|
TS 18661-1 adds an issubnormal classification macro to <math.h>. This
patch implements it for glibc. There are no new underlying functions
in libm because the implementation uses fpclassify; any optimizations
for this macro should be done through adding __builtin_subnormal in
GCC and using it in the header for suitable GCC versions, not through
adding other optimized inline or out-of-line versions to glibc.
The intended structure of the NEWS entry for <math.h> features from TS
18661-1 is like:
* New <math.h> features are added from TS 18661-1:2014:
- Nearest integer functions: roundeven, roundevenf, roundevenl.
- Comparison macros: iseqsig.
- Classification macros: iscanonical, issubnormal, iszero.
(that is, following the grouping of interfaces in TS 18661-1:2014,
with any group where any interfaces are new in glibc 2.25 being listed
like that).
Tested for x86_64 and x86.
* math/math.h [__GLIBC_USE (IEC_60559_BFP_EXT)] (issubnormal): New
macro.
* math/libm-test.inc (issubnormal_test_data): New array.
(issubnormal_test): New function.
* manual/arith.texi (Floating Point Classes): Document
issubnormal.
* manual/libm-err-tab.pl: Update comment on interfaces without
ulps tabulated.
|
|
math.h has a comment about definitions from <bits/mathdef.h>. This
comment is in the wrong place in math.h, far below the inclusion of
<bits/mathdef.h>. It was originally above the inclusion, but the
inclusion was moved by
1998-11-05 Ulrich Drepper <drepper@cygnus.com>
* math/math.h: Unconditionally include bits/mathdef.h. Declare
long double functions only if __NO_LONG_DOUBLE_MATH is not
defined.
[...]
without moving the comment. Furthermore, the comment refers
incorrectly to FLT_EVAL_METHOD and DECIMAL_DIG, which are actually
<float.h> macros, and INFINITY, which is in <bits/inf.h>.
This patch moves the comment back above the include it refers to and
removes the description of macros not defined by the header.
Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).
* math/math.h: Move comment about <bits/mathdef.h> definitions
above inclusion of <bits/mathdef.h>. Do not mention
FLT_EVAL_METHOD, INFINITY or DECIMAL_DIG in that comment.
|
|
This patch implements support for the __STDC_WANT_IEC_60559_BFP_EXT__
feature test macro from ISO/IEC 18661-1:2014, following the
__GLIBC_USE approach now used for __STDC_WANT_LIB_EXT2__. For this
macro, the relevant consideration is whether it is defined or
undefined when an affected header is included (not what its value is
if defined, and not whether it's defined or undefined when any other
unaffected system header is included).
Currently this macro only affects the issignaling macro and the nextup
and nextdown functions (so they can be enabled by defining this macro,
not just by defining _GNU_SOURCE as previously). Any further features
from this TS added in future would also be conditioned on this macro.
Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).
* bits/libc-header-start.h (__GLIBC_USE_IEC_60559_BFP_EXT): New
macro.
* include/features.h (__STDC_WANT_IEC_60559_BFP_EXT__): Document.
* manual/arith.texi (issignaling): Document as ISO from TS
18661-1:2014.
(nextup): Likewise.
(nextupf): Likewise.
(nextupl): Likewise.
(nextdown): Likewise.
(nextdownf): Likewise.
(nextdownl): Likewise.
* manual/creature.texi (__STDC_WANT_IEC_60559_BFP_EXT__): Document
macro.
* math/math.h: Define
__GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION and include
<bits/libc-header-start.h> instead of including <features.h>.
(issignaling): Define if [__GLIBC_USE (IEC_60559_BFP_EXT)], not
[__USE_GNU].
* math/bits/mathcalls.h (nextdown): Declare if
[__GLIBC_USE (IEC_60559_BFP_EXT)], not [__USE_GNU].
(nextup): Likewise.
(__issignaling): Likewise.
|
|
|
|
isinf/isnan/signbit/isfinite/isnormal/fpclassify using GCC
built-ins when available. Since going through the PLT is expensive for these small functions,
inlining results in major speedups (about 7x on Cortex-A57 for isinf). The GCC built-ins are not
correct if signalling NaN support is required, and thus are turned off in that case (see GCC bug
66462). The test-snan.c tests sNaNs and so must be explicitly built with -fsignaling-nans.
2015-09-18 Wilco Dijkstra <wdijkstr@arm.com>
[BZ #15367]
[BZ #17441]
* math/Makefile: Build test-snan.c with -fsignaling-nans.
* math/math.h (fpclassify): Use __builtin_fpclassify when
available. (signbit): Use __builtin_signbit(f/l).
(isfinite): Use__builtin_isfinite. (isnormal): Use
__builtin_isnormal. (isnan): Use __builtin_isnan.
(isinf): Use __builtin_isinf_sign.
|
|
math.h incorrectly declares various functions for XSI POSIX 2001 and
2008 editions. gamma was removed in the 2001 edition but is still
declared, along with gammaf and gammal which were never standard
functions. isnan is still declared as a function, along with isnanf
and isnanl which were never standard functions, although in 2001 the
function was replaced by the type-generic macro. scalbf and scalbl
are declared although never standard, and scalb was removed in the
2008 edition but is still declared. The scalb type-generic macro in
tgmath.h shouldn't be present for any POSIX version, since POSIX never
had such a type-generic macro.
This patch disables all those declarations in the relevant cases (as a
minimal fix, it leaves them enabled for __USE_MISC). For the matter
of declaring scalb but not scalbf or scalbl for the 2001 edition, a
new macro __MATH_DECLARING_DOUBLE is added, defined by math.h around
includes of bits/mathcalls.h, for bits/mathcalls.h to use to test
which type's functions are being declared.
Tested for x86_64 and x86 (testsuite, and that installed stripped
shared libraries are unchanged by the patch).
[BZ #18967]
* math/math.h (__MATH_DECLARING_DOUBLE): New macro. Define and
undefine around includes of <bits/mathcalls.h>.
* math/bits/mathcalls.h [!__USE_MISC && __USE_XOPEN2K] (isnan): Do
not declare function.
[!__USE_MISC && __USE_XOPEN2K] (gamma): Likewise.
[!__USE_MISC && (!__MATH_DECLARING_DOUBLE || __USE_XOPEN2K8)]
(scalb): Likewise.
* math/tgmath.h [!__USE_MISC && __USE_XOPEN_EXTENDED] (scalb): Do
not define macro.
* conform/Makefile (test-xfail-XOPEN2K/math.h/conform): Remove
variable.
(test-xfail-XOPEN2K/tgmath.h/conform): Likewise.
(test-xfail-XOPEN2K8/math.h/conform): Likewise.
(test-xfail-XOPEN2K8/tgmath.h/conform): Likewise.
|
|
Here is implementation of vectorized sincos containing SSE, AVX,
AVX2 and AVX512 versions according to Vector ABI
<https://groups.google.com/forum/#!topic/x86-64-abi/LmppCfN1rZ4>.
* NEWS: Mention addition of x86_64 vector sincos.
* bits/libm-simd-decl-stubs.h: Added stubs for sincos.
* math/math.h (__MATHDECL_VEC): New macro.
* math/bits/mathcalls.h: Added sincos declaration with __MATHDECL_VEC.
* math/gen-libm-have-vector-test.sh: Added generation of sincos wrapper
declaration under condition.
* math/test-vec-loop.h (TEST_VEC_LOOP): Refactored.
* math/test-double-vlen2.h: Added wrapper for sincos tests, reflected
TEST_VEC_LOOP change.
* math/test-double-vlen4.h: Likewise.
* math/test-double-vlen8.h: Likewise.
* math/test-float-vlen16.h: Reflected TEST_VEC_LOOP change.
* math/test-float-vlen4.h: Likewise.
* math/test-float-vlen8.h: Likewise.
* sysdeps/unix/sysv/linux/x86_64/libmvec.abilist: New symbols added.
* sysdeps/x86/fpu/bits/math-vector.h: Added sincos SIMD declaration.
* sysdeps/x86_64/fpu/Makefile (libmvec-support): Added new files.
* sysdeps/x86_64/fpu/Versions: New versions added.
* sysdeps/x86_64/fpu/libm-test-ulps: Regenerated.
* sysdeps/x86_64/fpu/multiarch/Makefile (libmvec-sysdep_routines):
Added build of SSE, AVX2 and AVX512 IFUNC versions.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core.S: New file.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos2_core_sse4.S: New file.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core.S: New file.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos4_core_avx2.S: New file.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core.S: New file.
* sysdeps/x86_64/fpu/multiarch/svml_d_sincos8_core_avx512.S: New file.
* sysdeps/x86_64/fpu/svml_d_sincos2_core.S: New file.
* sysdeps/x86_64/fpu/svml_d_sincos4_core.S: New file.
* sysdeps/x86_64/fpu/svml_d_sincos4_core_avx.S: New file.
* sysdeps/x86_64/fpu/svml_d_sincos8_core.S: New file.
* sysdeps/x86_64/fpu/svml_d_sincos_data.S: New file.
* sysdeps/x86_64/fpu/svml_d_sincos_data.h: New file.
* sysdeps/x86_64/fpu/svml_d_wrapper_impl.h: Added wrappers for sincos.
* sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c: Vector sincos tests.
* sysdeps/x86_64/fpu/test-double-vlen2.c: Likewise.
* sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c: Likewise.
* sysdeps/x86_64/fpu/test-double-vlen4-avx2.c: Likewise.
* sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c: Likewise.
* sysdeps/x86_64/fpu/test-double-vlen4.c: Likewise.
* sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c: Likewise.
* sysdeps/x86_64/fpu/test-double-vlen8.c: Likewise.
|
|
declarations for math functions in math.h. Added new headers math-vector.h
(only generic version for now) and libm-simd-decl-stubs.h with empty
definitions required for proper unfolding of new macros __MATHCALL_VEC which
will be used for declaration of vector math functions.
2015-05-14 Andrew Senkevich <andrew.senkevich@intel.com>
* bits/math-vector.h: New file.
* bits/libm-simd-decl-stubs.h: New header.
* math/Makefile (headers): Added new header libm-simd-decl-stubs.h.
* math/math.h (__MATHCALL_VEC): New macro.
|
|
|
|
Building this test on ARM fails because the prototypes for the long
double variants of the math functions are unavailable.
Add an additional include guard to math.h that enables long double math
function declarations if _LIBC_TEST is defined and define _LIBC_TEST in
stdlib/tst-strtod-round.c.
ChangeLog:
2014-09-30 Will Newton <will.newton@linaro.org>
* math/math.h: Define long double math functions if
_LIBC_TEST is defined.
* stdlib/tst-strtod-round.c: Define _LIBC_TEST.
|
|
This patch completes the headers cleanup consequent on removal of
_BSD_SOURCE and _SVID_SOURCE (apart from any subsequent deprecations):
* #endif conditionals that referred to BSD or SVID are updated.
* Redundant __USE_* tests in cases involving __USE_MISC are removed.
This includes cases such as __USE_MISC || __USE_ISOC99, where
__USE_MISC is redundant (because __USE_MISC is only ever defined in
the default / _DEFAULT_SOURCE / _GNU_SOURCE case, when __USE_ISOC99
is also defined; the same applies to the non-XSI-extended POSIX
versions), and cases involving __USE_GNU, where __USE_GNU is
redundant (because if __USE_GNU is defined, so are the other __USE_*
macros). There may well be other cases of __USE_FOO || __USE_BAR
tests that could be simplified because one macro implies the other;
this patch only addresses cases involving __USE_MISC.
Tested x86_64.
* bits/fcntl.h [__USE_MISC]: Remove redundant conditionals.
* bits/sigaction.h [__USE_MISC]: Likewise.
* bits/waitstatus.h: Update #endif comments.
* ctype/ctype.h: Likewise.
* dirent/dirent.h: Likewise.
[__USE_MISC]: Remove redundant conditionals.
* grp/grp.h: Update #endif comments.
[__USE_GNU]: Remove redundant conditionals.
[__USE_MISC]: Likewise.
* inet/netinet/in.h [__USE_GNU]: Likewise.
* io/sys/stat.h [__USE_MISC]: Likewise.
* libio/bits/stdio-ldbl.h [__USE_MISC]: Likewise.
* libio/bits/stdio.h: Update #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* libio/bits/stdio2.h [__USE_MISC]: Likewise.
* libio/stdio.h: Update #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* math/bits/math-finite.h [__USE_MISC]: Likewise.
* math/bits/mathcalls.h [__USE_MISC]: Likewise.
* math/math.h: Update #else and #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* misc/sys/uio.h: Update #endif comments.
* posix/bits/unistd.h [__USE_MISC]: Remove redundant conditionals.
* posix/glob.h [__USE_MISC]: Likewise.
* posix/sys/types.h: Update #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* posix/sys/wait.h: Update #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* posix/unistd.h: Update #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* pwd/pwd.h [__USE_GNU]: Likewise.
[__USE_MISC]: Likewise.
* resolv/netdb.h [__USE_GNU]: Likewise.
* signal/signal.h: Update #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* stdlib/stdlib.h: Update #else and #endif comments.
[__USE_MISC]: Remove redundant conditionals.
[__USE_GNU]: Likewise.
* string/bits/string2.h [__USE_MISC]: Likewise.
* string/string.h: Update #endif comments.
[__USE_MISC]: Remove redundant conditionals.
* sysdeps/m68k/m680x0/fpu/bits/mathinline.h [__USE_MISC]:
Likewise.
* sysdeps/mach/hurd/bits/fcntl.h [__USE_MISC]: Likewise.
* sysdeps/mach/hurd/bits/stat.h [__USE_MISC]: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/sigaction.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/stat.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl-linux.h: Update #endif
comments.
[__USE_MISC]: Remove redundant conditionals.
* sysdeps/unix/sysv/linux/bits/in.h [__USE_GNU]: Likewise.
* sysdeps/unix/sysv/linux/bits/sigaction.h [__USE_MISC]: Likewise.
* sysdeps/unix/sysv/linux/bits/socket.h [__USE_GNU]: Likewise.
* sysdeps/unix/sysv/linux/bits/stat.h [__USE_MISC]: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigaction.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/m68k/bits/stat.h [__USE_MISC]: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/sigaction.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/mips/bits/stat.h [__USE_MISC]: Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/stat.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/s390/bits/sigaction.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/s390/bits/stat.h [__USE_MISC]: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/sigaction.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/stat.h [__USE_MISC]:
Likewise.
* sysdeps/unix/sysv/linux/x86/bits/stat.h [__USE_MISC]: Likewise.
* sysdeps/x86/bits/string.h: Update #endif comments.
* sysdeps/x86/fpu/bits/mathinline.h [__USE_MISC]: Remove redundant
conditionals.
* time/sys/time.h: Update #endif comments.
* time/time.h: Likewise.
[__USE_MISC]: Remove redundant conditionals.
|
|
This patch cleans up following the obsoletion of _BSD_SOURCE and
_SVID_SOURCE by combining __USE_BSD and __USE_SVID into __USE_MISC.
The only non-mechanical part of this patch is the changes to
features.h; everything else is simple substitution of __USE_MISC for
the old macros. Thus, this patch leaves obviously redundant
conditionals such as "defined __USE_MISC || defined __USE_MISC", and
does not update #endif comments where they referred to BSD or SVID in
words instead of the literal macro name. This is intended to
facilitate patch review by separating the less mechanical changes from
these purely mechanical changes into a separate patch. (I do intend
to integrate all the changes from
<https://sourceware.org/ml/libc-alpha/2013-12/msg00226.html>, which I
believe includes all the trailing comment updates, in subsequent
patches.)
Tested x86_64.
* include/features.h (__USE_BSD): Remove macro definitions.
(__USE_SVID): Likewise.
(_BSD_SOURCE): Likewise.
(_SVID_SOURCE): Likewise.
[!defined _BSD_SOURCE && !defined _SVID_SOURCE]: Remove condition
from definition of _DEFAULT_SOURCE.
[_BSD_SOURCE || _SVID_SOURCE]: Change condition to
[_DEFAULT_SOURCE].
* bits/fcntl.h [__USE_BSD]: Change condition to [__USE_MISC].
* bits/mman.h [__USE_BSD]: Likewise.
* bits/termios.h [__USE_BSD]: Likewise.
* bits/waitstatus.h [__USE_BSD]: Likewise.
* ctype/ctype.h [__USE_SVID]: Likewise.
* dirent/dirent.h [__USE_BSD]: Likewise.
* grp/grp.h [__USE_SVID]: Likewise.
[__USE_BSD]: Likewise.
* inet/netinet/igmp.h [__USE_BSD]: Likewise.
* io/fcntl.h [__USE_BSD]: Likewise.
* io/ftw.h [__USE_BSD]: Likewise.
* io/sys/stat.h [__USE_BSD]: Likewise.
* libio/bits/stdio-ldbl.h [__USE_BSD]: Likewise.
* libio/bits/stdio2.h [__USE_BSD]: Likewise.
* libio/stdio.h [__USE_SVID]: Likewise.
[__USE_BSD]: Likewise.
* math/math.h [__USE_SVID]: Likewise.
[__USE_BSD]: Likewise.
* misc/bits/syslog-ldbl.h [__USE_BSD]: Likewise.
* misc/bits/syslog.h [__USE_BSD]: Likewise.
* misc/search.h [__USE_SVID]: Likewise.
* misc/sys/mman.h [__USE_BSD]: Likewise.
* misc/sys/syslog.h [__USE_BSD]: Likewise.
* misc/sys/uio.h [__USE_BSD]: Likewise.
* posix/bits/unistd.h [__USE_BSD]: Likewise.
* posix/glob.h [__USE_BSD]: Likewise.
* posix/regex.h [__USE_BSD]: Likewise.
* posix/sys/types.h [__USE_BSD]: Likewise.
[__USE_SVID]: Likewise.
* posix/sys/utsname.h [__USE_SVID]: Likewise.
* posix/sys/wait.h [__USE_BSD]: Likewise.
[__USE_SVID]: Likewise.
* posix/unistd.h [__USE_BSD]: Likewise.
[__USE_SVID]: Likewise.
* pwd/pwd.h [__USE_SVID]: Likewise.
* resolv/netdb.h [__USE_BSD]: Likewise.
* setjmp/setjmp.h [__USE_BSD]: Likewise.
* signal/signal.h [__USE_BSD]: Likewise.
[__USE_SVID]: Likewise.
* socket/sys/socket.h [__USE_BSD]: Likewise.
* stdlib/fmtmsg.h [__USE_SVID]: Likewise.
* stdlib/stdlib.h [__USE_BSD]: Likewise.
[__USE_SVID]: Likewise.
* string/bits/string2.h [__USE_BSD]: Likewise.
[__USE_SVID]: Likewise.
* string/bits/string3.h [__USE_BSD]: Likewise.
* string/endian.h [__USE_BSD]: Likewise.
* string/string.h [__USE_SVID]: Likewise.
[__USE_BSD]: Likewise.
* string/strings.h [__USE_BSD]: Likewise.
* sysdeps/generic/netinet/ip.h [__USE_BSD]: Likewise.
* sysdeps/gnu/netinet/ip_icmp.h [__USE_BSD]: Likewise.
* sysdeps/mach/hurd/bits/fcntl.h [__USE_BSD]: Likewise.
* sysdeps/mach/hurd/bits/stat.h [__USE_BSD]: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/mman.h [__USE_BSD]: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/termios.h [__USE_BSD]:
Likewise.
* sysdeps/unix/sysv/linux/bits/fcntl-linux.h [__USE_BSD]:
Likewise.
* sysdeps/unix/sysv/linux/bits/mman-linux.h [__USE_BSD]: Likewise.
* sysdeps/unix/sysv/linux/bits/sys_errlist.h [__USE_BSD]:
Likewise.
* sysdeps/unix/sysv/linux/bits/termios.h [__USE_BSD]: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/termios.h [__USE_BSD]:
Likewise.
* sysdeps/unix/sysv/linux/netinet/if_ether.h [__USE_BSD]:
Likewise.
* sysdeps/unix/sysv/linux/netinet/if_fddi.h [__USE_BSD]: Likewise.
* sysdeps/unix/sysv/linux/netinet/if_tr.h [__USE_BSD]: Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/termios.h [__USE_BSD]:
Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/termios.h [__USE_BSD]:
Likewise.
* sysdeps/x86/bits/string.h [__USE_BSD]: Likewise.
* sysvipc/sys/ipc.h [__USE_SVID]: Likewise.
* termios/termios.h [__USE_BSD]: Likewise.
* time/sys/time.h [__USE_BSD]: Likewise.
* time/time.h [__USE_BSD]: Likewise.
[__USE_SVID]: Likewise.
* sysdeps/unix/sysv/linux/hppa/bits/mman.h [__USE_BSD]: Change
condition to [__USE_MISC].
|
|
|
|
It is based on draft TS 18661 and currently enabled as a GNU extension.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
libm is now somewhat integrated with gcc's -ffinite-math-only option
and lots of the wrapper functions have been optimized.
|
|
|
|
|
|
* math/math.h [__LDBL_COMPAT && __USE_ISOC99] (nexttowardl): New
prototype.
* math/math.h (__nldbl_nexttowardf): Put __THROW before
__attribute__ ((__const__)).
(__MATHDECL_2): Use __REDIRECT_NTH instead of __REDIRECT
followed by __THROW.
|
|
prototype.
(nexttowardf): Redirect to __nldbl_nexttowardf.
(nexttoward): Redirect to nextafter.
(__MATHDECL_2, __MATHDECL_1): Redirect *l functions to
non-*l versions if __LONG_DOUBLE_MATH_OPTIONAL and
__NO_LONG_DOUBLE_MATH.
* math/complex.h (__MATHDECL_1): Likewise.
* math/bits/mathcalls.h (nexttoward): Don't prototype if
__LDBL_COMPAT.
* misc/sys/cdefs.h: Include <bits/wordsize.h>.
(__LDBL_COMPAT, __LDBL_REDIR1, __LDBL_REDIR, __LDBL_REDIR1_NTH,
__LDBL_REDIR_NTH, __LDBL_REDIR_DECL): New macros.
* libio/bits/stdio-ldbl.h: New file.
* libio/Makefile (headers): Add it.
* libio/stdio.h [__LDBL_COMPAT]: #include it.
* libio/bits/libio-ldbl.h: New file.
* libio/Makefile (headers): Add it.
* libio/libio.h [__LDBL_COMPAT]: #include it.
* libio/libioP.h: Include <math_ldbl_opt.h>.
* include/wchar.h (__fwprintf, __vfwprintf): Fix commented out
attribute.
(__vfwprintf_chk): New prototype. Add libc_hidden_proto.
* wcsmbs/bits/wchar-ldbl.h: New file.
* wcsmbs/Makefile (headers): Add it.
* wcsmbs/wchar.h [__LDBL_COMPAT]: #include it.
* wcsmbs/bits/wchar2.h (__vswprintf_alias): Removed.
(vswprintf): Define as a macro rather than inline function.
* stdio-common/bits/printf-ldbl.h: New file.
* stdio-common/Makefile (headers): Add it.
* stdio-common/printf.h [__LDBL_COMPAT]: #include it.
* libio/fwprintf.c: Include libioP.h.
(fwprintf): Use ldbl_weak_alias instead of weak_alias.
* libio/fwscanf.c: Include libioP.h.
(fwscanf): Rename to __fwscanf and add ldbl_strong_alias.
* libio/iovdprintf.c (vdprintf): Use ldbl_weak_alias instead of
weak_alias.
* libio/iovsprintf.c (_IO_vsprintf): Rename to __IO_vsprintf,
add ldbl_strong_alias and use INTDEF2 instead of INTDEF.
(vsprintf): Use ldbl_weak_alias instead of weak_alias.
* libio/iovsscanf.c (__vsscanf, vsscanf): Use ldbl_weak_alias
instead of weak_alias.
* libio/iovswscanf.c (vswscanf): Rename to __vswscanf,
add ldbl_strong_alias and use ldbl_hidden_def instead of
libc_hidden_def.
* libio/obprintf.c (obstack_printf, obstack_vprintf): Use
ldbl_weak_alias instead of weak_alias.
* libio/swprintf.c: Include libioP.h.
(swprintf): Rename to __swprintf and add ldbl_strong_alias.
* libio/swscanf.c: Include libioP.h.
(swscanf): Rename to __swscanf and add ldbl_strong_alias.
* libio/vasprintf.c (vasprintf): Use ldbl_weak_alias instead of
weak_alias.
* libio/vscanf.c (vscanf): Use ldbl_weak_alias instead of
weak_alias.
* libio/vsnprintf.c (__vsnprintf, vsnprintf): Use ldbl_weak_alias
instead of weak_alias.
* libio/vswprintf.c (__vswprintf): Remove alias.
(vswprintf): Use ldbl_weak_alias instead of weak_alias.
* libio/vwprintf.c: Include libioP.h.
(vwprintf): Rename to __vwprintf and add ldbl_strong_alias.
* libio/vwscanf.c (vwscanf): Rename to __vwscanf and add
ldbl_strong_alias.
* libio/wprintf.c: Include libioP.h.
(wprintf): Rename to __wprintf and add ldbl_strong_alias.
* libio/wscanf.c: Include libioP.h.
(wscanf): Rename to __wscanf and add ldbl_strong_alias.
* stdio-common/asprintf.c (__asprintf): Rename to ___asprintf, add
ldbl_strong_alias and use INTDEF2 instead of INTDEF.
(asprintf): Use ldbl_weak_alias instead of weak_alias.
* stdio-common/dprintf.c (dprintf): Rename to __dprintf, add
ldbl_strong_alias and use ldbl_hidden_def instead of
libc_hidden_def.
* stdio-common/fprintf.c: Include libioP.h.
(fprintf): Rename to __fprintf, add ldbl_strong_alias and
use ldbl_hidden_def instead of libc_hidden_def.
(_IO_fprintf): Use ldbl_weak_alias instead of weak_alias.
* stdio-common/fscanf.c: Include libioP.h.
(fscanf): Rename to __fscanf and add ldbl_strong_alias.
* stdio-common/printf.c: Include libioP.h.
(printf): Rename to __printf and add ldbl_strong_alias.
(_IO_printf): Use ldbl_strong_alias instead of strong_alias.
* stdio-common/printf_fp.c (__printf_fp): Rename to __printf_fp, add
ldbl_strong_alias and use ldbl_hidden_def instead of
libc_hidden_def.
* stdio-common/printf_size.c (printf_size): Rename to __printf_size
and add ldbl_strong_alias.
* stdio-common/scanf.c (scanf): Rename to __scanf and add
ldbl_strong_alias.
* stdio-common/snprintf.c (snprintf): Use ldbl_weak_alias instead of
weak_alias.
* stdio-common/sprintf.c (sprintf): Rename to __sprintf, add
ldbl_strong_alias and use ldbl_hidden_def instead of
libc_hidden_def.
(_IO_sprintf): Use ldbl_strong_alias instead of strong_alias.
* stdio-common/sscanf.c: Include libioP.h instead of iolibio.h.
(sscanf): Rename to __sscanf and add ldbl_strong_alias.
* stdio-common/vfprintf.c (vfprintf): Define to
_IO_vfprintf_internal. Use ldbl_strong_alias instead. Use
ldbl_hidden_def instead of libc_hidden_def.
(_IO_vfprintf_internal): Clear is_long_double if __ldbl_is_dbl,
handle the argument as double if it is non-zero.
(vfwprintf): Use ldbl_weak_alias instead of weak_alias.
(_IO_vfprintf): Add ldbl_strong_alias.
* stdio-common/vfscanf.c (_IO_vfscanf): Rename to
_IO_vfscanf_internal, don't use strtold if __ldbl_is_dbl, add
ldbl_strong_alias.
(vfwscanf): Use ldbl_weak_alias instead of weak_alias.
(__vfscanf): Rename to ___vfscanf, add ldbl_strong_alias and
use ldbl_hidden_def instead of libc_hidden_def.
(vfscanf): Use ldbl_weak_alias instead of weak_alias.
* stdio-common/vprintf.c: Include libioP.h.
(vprintf): Rename to __vprintf and add ldbl_strong_alias.
* debug/fprintf_chk.c (__fprintf_chk): Rename to ___fprintf_chk
and add ldbl_strong_alias.
* debug/printf_chk.c (__printf_chk): Rename to ___printf_chk
and add ldbl_strong_alias.
* debug/snprintf_chk.c: Include libioP.h.
(__snprintf_chk): Rename to ___snprintf_chk and add ldbl_strong_alias.
* debug/sprintf_chk.c: Include libioP.h.
(__sprintf_chk): Rename to ___sprintf_chk and add ldbl_strong_alias.
* debug/vfprintf_chk.c (__vfprintf_chk): Rename to ___vfprintf_chk,
add ldbl_strong_alias and use ldbl_hidden_def instead of
libc_hidden_def.
* debug/vfwprintf_chk.c (__vfwprintf_chk): Add libc_hidden_def.
* debug/vprintf_chk.c (__vprintf_chk): Rename to ___vprintf_chk
and add ldbl_strong_alias.
* debug/vsnprintf_chk.c (__vsnprintf_chk): Rename to ___vsnprintf_chk,
add ldbl_strong_alias and use ldbl_hidden_def instead of
libc_hidden_def.
* debug/vsprintf_chk.c (__vsprintf_chk): Rename to ___vsprintf_chk,
add ldbl_strong_alias and use ldbl_hidden_def instead of
libc_hidden_def.
* stdlib/stdlib.h (strtold): Don't define inline if [!__LDBL_COMPAT].
* wcsmbs/wchar.h (wcstold): Likewise.
* stdlib/strtod_l.c: Include math_ldbl_opt.h.
(____STRTOF_INTERNAL): Define.
(INTERNAL (__STRTOF)): Rename to ____STRTOF_INTERNAL.
(__STRTOF): Call ____STRTOF_INTERNAL instead.
[LONG_DOUBLE_COMPAT] (strtold_l, wcstold_l, __strtold_l, __wcstold_l):
Add compatibility symbols.
* stdlib/strtod.c: Include math_ldbl_opt.h.
[LONG_DOUBLE_COMPAT] (strtold, wcstold, __strtold_internal,
__wcstold_internal): Add compatibility symbols.
* stdlib/strtold.c: Include bits/wordsize.h, wchar.h.
(NEW, NEW1): Define.
(__new_strtold, __new_wcstold): New prototypes.
(____new_strtold_internal, ____new_wcstold_internal): Likewise.
Add libc_hidden_proto.
(STRTOF): Define to NEW (*told).
[__LONG_DOUBLE_MATH_OPTIONAL] (wcstold, strtold): Add
long_double_symbol.
[__LONG_DOUBLE_MATH_OPTIONAL] (__wcstold_internal,
__strtold_internal): Likewise. Add libc_hidden_ver.
* stdlib/bits/stdlib-ldbl.h: New file.
* stdlib/Makefile (headers): Add it.
* stdlib/stdlib.h [__LDBL_COMPAT]: #include it.
* include/stdlib.h (ecvt_r, fcvt_r, qecvt_r, qfcvt_r): Remove
libc_hidden_proto.
(__ecvt, __fcvt, __gcvt, __ecvt_r, __fcvt_r, __qecvt, __qfcvt,
__qgcvt, __qecvt_r, __qfcvt_r): New prototypes.
* misc/efgcvt_r.c: Include shlib-compat.h.
(LONG_DOUBLE_CVT): Define.
(__APPEND, __APPEND2): Define.
(*fcvt_r): Use __APPEND instead of APPEND. Remove libc_hidden_def.
(*ecvt_r): Likewise.
(cvt_symbol): Define. Use it on fcvt_r and ecvt_r.
* misc/efgcvt.c: Include shlib-compat.h.
(LONG_DOUBLE_CVT): Define.
(__APPEND, __APPEND2): Define.
(fcvt): Use __APPEND instead of APPEND. Remove libc_hidden_def.
(ecvt, gcvt): Likewise.
(cvt_symbol): Define. Use it on fcvt, ecvt and gcvt.
* stdlib/bits/monetary-ldbl.h: New file.
* stdlib/Makefile (headers): Add it.
* stdlib/monetary.h [__LDBL_COMPAT]: #include it.
* stdlib/strfmon.c: Include math_ldbl_opt.h.
(strfmon): Rename to __strfmon and add ldbl_strong_alias.
* stdlib/strfmon_l.c: Remove all traces of [!USE_IN_LIBIO].
(__vstrfmon_l): Don't set is_long_double if __ldbl_is_dbl.
(__strfmon_l): Rename to ___strfmon_l and add ldbl_strong_alias.
(strfmon_l): Use ldbl_weak_alias instead of weak_alias.
* misc/bits/syslog-ldbl.h: New file.
* misc/Makefile (headers): Add it.
* misc/sys/syslog.h [__LDBL_COMPAT]: #include it.
* misc/syslog.c: Include math_ldbl_opt.h.
(syslog): Rename to __syslog and add ldbl_strong_alias,
use ldbl_hidden_def instead of libc_hidden_def.
(vsyslog): Rename to __vsyslog and add ldbl_strong_alias,
use ldbl_hidden_def instead of libc_hidden_def.
* sysdeps/generic/math_ldbl_opt.h: New file.
* math/w_j1l.c (j1l, y1l): Rename to __ prefixed variants.
Add weak_alias.
* math/w_j0l.c (j0l, y0l): Likewise.
* math/w_jnl.c (jnl, ynl): Likewise.
* sysdeps/ieee754/ldbl-96/s_nexttoward.c
(__nexttowardl): Remove strong_alias.
(nexttowardl): Remove weak_alias.
* sysdeps/ieee754/ldbl-96/s_erfl.c
(__erfl, __erfcl): Remove strong_alias.
(erfl, erfcl): Remove weak_alias.
* sysdeps/ieee754/ldbl-64-128/s_asinhl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_atanl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_cbrtl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_ceill.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_copysignl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_cosl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_erfl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_expm1l.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_fabsl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_finitel.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_floorl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_fpclassifyl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_frexpl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_ilogbl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_isinfl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_isnanl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_llrintl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_llroundl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_log1pl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_logbl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_lrintl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_lroundl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_modfl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_nearbyintl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_nextafterl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_nexttoward.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_nexttowardf.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_nexttowardfd.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_remquol.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_rintl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_roundl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_scalblnl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_scalbnl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_signbitl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_sincosl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_sinl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_tanhl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_tanl.c: New file.
* sysdeps/ieee754/ldbl-64-128/s_truncl.c: New file.
* sysdeps/ieee754/ldbl-64-128/strtold_l.c: New file.
* sysdeps/ieee754/ldbl-64-128/w_expl.c: New file.
* sysdeps/ieee754/ldbl-opt/configure.in: New file.
* sysdeps/ieee754/ldbl-opt/configure: New file.
* sysdeps/ieee754/ldbl-opt/Makefile: New file.
* sysdeps/ieee754/ldbl-opt/Versions: New file.
* sysdeps/ieee754/ldbl-opt/cabs.c: New file.
* sysdeps/ieee754/ldbl-opt/cabsl.c: New file.
* sysdeps/ieee754/ldbl-opt/carg.c: New file.
* sysdeps/ieee754/ldbl-opt/cargl.c: New file.
* sysdeps/ieee754/ldbl-opt/cimag.c: New file.
* sysdeps/ieee754/ldbl-opt/cimagl.c: New file.
* sysdeps/ieee754/ldbl-opt/conj.c: New file.
* sysdeps/ieee754/ldbl-opt/conjl.c: New file.
* sysdeps/ieee754/ldbl-opt/creal.c: New file.
* sysdeps/ieee754/ldbl-opt/creall.c: New file.
* sysdeps/ieee754/ldbl-opt/math_ldbl_opt.c: New file.
* sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-acos.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-acosh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-asin.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-asinh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-asprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-atan.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-atan2.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-atanh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cabs.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cacos.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cacosh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-carg.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-casin.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-casinh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-catan.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-catanh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cbrt.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-ccos.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-ccosh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-ceil.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cexp.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cimag.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-clog.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-clog10.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-compat.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-compat.h: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-conj.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-copysign.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cos.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cosh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cpow.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-cproj.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-creal.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-csin.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-csinh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-csqrt.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-ctan.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-ctanh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-dprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-drem.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-erf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-erfc.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-exp.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-exp10.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-exp2.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-expm1.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fabs.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fdim.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-finite.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-floor.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fma.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fmax.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fmin.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fmod.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-frexp.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fwprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fwprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-fwscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-gamma.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-hypot.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-ilogb.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-iovfscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-isinf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-isnan.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-j0.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-j1.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-jn.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-ldexp.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-lgamma.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-lgamma_r.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-llrint.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-llround.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-log.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-log10.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-log1p.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-log2.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-logb.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-lrint.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-lround.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-modf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-nan.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-nearbyint.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-nextafter.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-nexttoward.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-nexttowardf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-obstack_printf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-obstack_vprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-pow.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-pow10.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-printf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-printf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-printf_fp.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-printf_size.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-qecvt.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-qecvt_r.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-qfcvt.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-qfcvt_r.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-qgcvt.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-remainder.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-remquo.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-rint.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-round.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-scalb.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-scalbln.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-scalbn.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-scanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-signbit.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-significand.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-sin.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-sincos.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-sinh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-snprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-snprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-sprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-sprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-sqrt.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-sscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-strfmon.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-strtold.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-strtoldint.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-swprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-swprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-swscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-syslog.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-syslog_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-tan.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-tanh.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-tgamma.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-trunc.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vasprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vdprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vfprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vfprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vfscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vfwprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vfwscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vsnprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vsprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vsprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vsscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vswprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vswprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vswscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vsyslog.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vsyslog_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vwprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vwprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-vwscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-wcstold.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-wcstoldint.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-wprintf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-wprintf_chk.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-wscanf.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-y0.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-y1.c: New file.
* sysdeps/ieee754/ldbl-opt/nldbl-yn.c: New file.
* sysdeps/ieee754/ldbl-opt/s_asinh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_atan.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cacos.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cacosh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cacoshl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cacosl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_casin.c: New file.
* sysdeps/ieee754/ldbl-opt/s_casinh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_casinhl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_casinl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_catan.c: New file.
* sysdeps/ieee754/ldbl-opt/s_catanh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_catanhl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_catanl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cbrt.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ccos.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ccosh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ccoshl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ccosl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ceil.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cexp.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cexpl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_clog.c: New file.
* sysdeps/ieee754/ldbl-opt/s_clog10.c: New file.
* sysdeps/ieee754/ldbl-opt/s_clog10l.c: New file.
* sysdeps/ieee754/ldbl-opt/s_clogl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_copysign.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cpow.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cpowl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cproj.c: New file.
* sysdeps/ieee754/ldbl-opt/s_cprojl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_csin.c: New file.
* sysdeps/ieee754/ldbl-opt/s_csinh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_csinhl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_csinl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_csqrt.c: New file.
* sysdeps/ieee754/ldbl-opt/s_csqrtl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ctan.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ctanh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ctanhl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ctanl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_erf.c: New file.
* sysdeps/ieee754/ldbl-opt/s_expm1.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fabs.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fdim.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fdiml.c: New file.
* sysdeps/ieee754/ldbl-opt/s_finite.c: New file.
* sysdeps/ieee754/ldbl-opt/s_floor.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fma.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fmal.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fmax.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fmaxl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fmin.c: New file.
* sysdeps/ieee754/ldbl-opt/s_fminl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_frexp.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ilogb.c: New file.
* sysdeps/ieee754/ldbl-opt/s_isinf.c: New file.
* sysdeps/ieee754/ldbl-opt/s_isnan.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ldexp.c: New file.
* sysdeps/ieee754/ldbl-opt/s_ldexpl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_llrint.c: New file.
* sysdeps/ieee754/ldbl-opt/s_llround.c: New file.
* sysdeps/ieee754/ldbl-opt/s_log1p.c: New file.
* sysdeps/ieee754/ldbl-opt/s_logb.c: New file.
* sysdeps/ieee754/ldbl-opt/s_lrint.c: New file.
* sysdeps/ieee754/ldbl-opt/s_lround.c: New file.
* sysdeps/ieee754/ldbl-opt/s_modf.c: New file.
* sysdeps/ieee754/ldbl-opt/s_nan.c: New file.
* sysdeps/ieee754/ldbl-opt/s_nanl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_nearbyint.c: New file.
* sysdeps/ieee754/ldbl-opt/s_nextafter.c: New file.
* sysdeps/ieee754/ldbl-opt/s_remquo.c: New file.
* sysdeps/ieee754/ldbl-opt/s_rint.c: New file.
* sysdeps/ieee754/ldbl-opt/s_round.c: New file.
* sysdeps/ieee754/ldbl-opt/s_scalbln.c: New file.
* sysdeps/ieee754/ldbl-opt/s_scalbn.c: New file.
* sysdeps/ieee754/ldbl-opt/s_significand.c: New file.
* sysdeps/ieee754/ldbl-opt/s_significandl.c: New file.
* sysdeps/ieee754/ldbl-opt/s_sin.c: New file.
* sysdeps/ieee754/ldbl-opt/s_sincos.c: New file.
* sysdeps/ieee754/ldbl-opt/s_tan.c: New file.
* sysdeps/ieee754/ldbl-opt/s_tanh.c: New file.
* sysdeps/ieee754/ldbl-opt/s_trunc.c: New file.
* sysdeps/ieee754/ldbl-opt/w_acos.c: New file.
* sysdeps/ieee754/ldbl-opt/w_acosh.c: New file.
* sysdeps/ieee754/ldbl-opt/w_acoshl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_acosl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_asin.c: New file.
* sysdeps/ieee754/ldbl-opt/w_asinl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_atan2.c: New file.
* sysdeps/ieee754/ldbl-opt/w_atan2l.c: New file.
* sysdeps/ieee754/ldbl-opt/w_atanh.c: New file.
* sysdeps/ieee754/ldbl-opt/w_atanhl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_cosh.c: New file.
* sysdeps/ieee754/ldbl-opt/w_coshl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_drem.c: New file.
* sysdeps/ieee754/ldbl-opt/w_dreml.c: New file.
* sysdeps/ieee754/ldbl-opt/w_exp.c: New file.
* sysdeps/ieee754/ldbl-opt/w_exp10.c: New file.
* sysdeps/ieee754/ldbl-opt/w_exp10l.c: New file.
* sysdeps/ieee754/ldbl-opt/w_fmod.c: New file.
* sysdeps/ieee754/ldbl-opt/w_fmodl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_hypot.c: New file.
* sysdeps/ieee754/ldbl-opt/w_hypotl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_j0.c: New file.
* sysdeps/ieee754/ldbl-opt/w_j0l.c: New file.
* sysdeps/ieee754/ldbl-opt/w_j1.c: New file.
* sysdeps/ieee754/ldbl-opt/w_j1l.c: New file.
* sysdeps/ieee754/ldbl-opt/w_jn.c: New file.
* sysdeps/ieee754/ldbl-opt/w_jnl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_lgamma.c: New file.
* sysdeps/ieee754/ldbl-opt/w_lgamma_r.c: New file.
* sysdeps/ieee754/ldbl-opt/w_lgammal.c: New file.
* sysdeps/ieee754/ldbl-opt/w_lgammal_r.c: New file.
* sysdeps/ieee754/ldbl-opt/w_log.c: New file.
* sysdeps/ieee754/ldbl-opt/w_log10.c: New file.
* sysdeps/ieee754/ldbl-opt/w_log10l.c: New file.
* sysdeps/ieee754/ldbl-opt/w_log2.c: New file.
* sysdeps/ieee754/ldbl-opt/w_log2l.c: New file.
* sysdeps/ieee754/ldbl-opt/w_logl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_pow.c: New file.
* sysdeps/ieee754/ldbl-opt/w_powl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_remainder.c: New file.
* sysdeps/ieee754/ldbl-opt/w_remainderl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_scalb.c: New file.
* sysdeps/ieee754/ldbl-opt/w_scalbl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_sinh.c: New file.
* sysdeps/ieee754/ldbl-opt/w_sinhl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_sqrt.c: New file.
* sysdeps/ieee754/ldbl-opt/w_sqrtl.c: New file.
* sysdeps/ieee754/ldbl-opt/w_tgamma.c: New file.
* sysdeps/ieee754/ldbl-opt/w_tgammal.c: New file.
* sysdeps/unix/sysv/linux/sparc/bits/wordsize.h: New file.
* sysdeps/unix/sysv/linux/sparc/sparc32/Implies: New file.
* sysdeps/sparc/sparc32/Implies: Move ldbl-128 first and flt-32
after dbl-64.
* sysdeps/unix/sysv/linux/sparc/sparc32/Versions (NLDBL_VERSION):
%define this to to GLIBC_2.4.
* sysdeps/sparc/sparc32/fpu/e_sqrtl.c: New file.
* sysdeps/sparc/sparc32/fpu/s_fabs.c: New file.
* sysdeps/sparc/sparc32/fpu/s_fabsf.S: New file.
* sysdeps/sparc/sparc32/fpu/s_fabsl.c: New file.
* sysdeps/sparc/sparc32/soft-fp/q_qtoui.c: Removed.
* sysdeps/sparc/sparc32/soft-fp/q_qtoux.c: Removed.
* sysdeps/sparc/sparc32/soft-fp/q_qtox.c: Removed.
* sysdeps/sparc/sparc32/soft-fp/q_uitoq.c: Removed.
* sysdeps/sparc/sparc32/soft-fp/q_uxtoq.c: Removed.
* sysdeps/sparc/sparc32/soft-fp/q_xtoq.c: Removed.
* sysdeps/sparc/sparc32/soft-fp/q_lltoq.c: New file.
* sysdeps/sparc/sparc32/soft-fp/q_qtoll.c: New file.
* sysdeps/sparc/sparc32/soft-fp/q_qtou.c: New file.
* sysdeps/sparc/sparc32/soft-fp/q_qtoull.c: New file.
* sysdeps/sparc/sparc32/soft-fp/q_ulltoq.c: New file.
* sysdeps/sparc/sparc32/soft-fp/q_utoq.c: New file.
* sysdeps/sparc/sparc32/soft-fp/Versions: New file.
* sysdeps/sparc/fpu/bits/mathinline.h (__unordered_cmp,
__unordered_v9cmp): Define differently depending on
-m32 -mlong-double-{64,128}.
(__signbitl, sqrtl, __ieee754_sqrtl): New inlines.
* sysdeps/sparc/fpu/bits/mathdef.h (__NO_LONG_DOUBLE_MATH): Remove.
* sysdeps/sparc/sparc32/soft-fp/Makefile (sparc32-quad-routines):
Set.
(sysdep-routines): Add sparc32-quad-routines.
* sysdeps/sparc/sparc32/soft-fp/sfp-machine.h: Include stdlib.h.
(FP_HANDLE_EXCEPTIONS): Call ___Q_simulate_exceptions as a normal
function.
* sysdeps/sparc/sparc32/soft-fp/q_sqrt.c (__ieee754_sqrtl): New
alias to _Q_sqrt.
* sysdeps/sparc/sparc32/soft-fp/q_div.c (_Q_div): Fix a typo.
* sysdeps/sparc/sparc64/soft-fp/sfp-machine.h: Include stdlib.h.
* sysdeps/sparc/sparc32/fpu/libm-test-ulps: Update.
* libio/libio.h (_IO_vfscanf, _IO_vfprintf): Remove __THROW.
(_IO_vfwscanf, _IO_vfwprintf): Likewise.
* libio/libioP.h (_IO_vdprintf): Likewise.
|
|
|
|
|
|
|
|
and bits/inf.h. * math/math.h: Include them.
* sysdeps/alpha/fpu/bits/mathdef.h, sysdeps/arm/fpu/bits/mathdef.h,
sysdeps/generic/bits/mathdef.h, sysdeps/i386/fpu/bits/mathdef.h,
sysdeps/ia64/fpu/bits/mathdef.h, sysdeps/m68k/fpu/bits/mathdef.h,
sysdeps/mips/fpu/bits/mathdef.h, sysdeps/powerpc/fpu/bits/mathdef.h,
sysdeps/sh/sh4/fpu/bits/mathdef.h, sysdeps/sparc/fpu/bits/mathdef.h,
sysdeps/x86_64/fpu/bits/mathdef.h: Remove INFINITY.
* sysdeps/arm/bits/huge_val.h (HUGE_VAL): Use __builtin_huge_val.
(HUGE_VALF, HUGE_VALL): Remove.
* sysdeps/ieee754/bits/huge_val.h: Likewise.
* sysdeps/sh/bits/huge_val.h: Likewise.
* sysdeps/generic/bits/huge_val.h (HUGE_VAL): Use __builtin_huge_val.
* sysdeps/generic/bits/huge_valf.h: New file.
* sysdeps/generic/bits/huge_vall.h: New file.
* sysdeps/generic/bits/inf.h: New file.
* sysdeps/ieee754/bits/huge_valf.h: New file.
* sysdeps/ieee754/bits/inf.h: New file.
* sysdeps/i386/bits/huge_val.h: Remove file.
* sysdeps/i386/bits/huge_vall.h: New file.
* sysdeps/ia64/bits/huge_val.h: Remove file.
* sysdeps/ia64/bits/huge_vall.h: New file.
* sysdeps/ieee754/ldbl-128/bits/huge_vall.h: New file.
* sysdeps/m68k/bits/huge_val.h: Remove file.
* sysdeps/m68k/bits/huge_vall.h: New file.
* sysdeps/s390/bits/huge_val.h: Remove file.
* sysdeps/sh/sh4/fpu/bits/huge_val.h: Remove file.
* sysdeps/sparc/bits/huge_vall.h: New file.
* sysdeps/sparc/sparc32/fpu/bits/huge_val.h: Remove file.
* sysdeps/sparc/sparc64/fpu/bits/huge_val.h: Remove file.
* sysdeps/ieee754/bits/nan.h (NAN): Use __builtin_nanf.
* sysdeps/mips/bits/nan.h (NAN): Likewise.
2004-03-15 Richard Henderson <rth@redhat.com>
* math/Makefile (headers): Add bits/huge_valf.h, bits/huge_vall.h,
and bits/inf.h.
* math/math.h: Include them.
* sysdeps/alpha/fpu/bits/mathdef.h, sysdeps/arm/fpu/bits/mathdef.h,
sysdeps/generic/bits/mathdef.h, sysdeps/i386/fpu/bits/mathdef.h,
sysdeps/ia64/fpu/bits/mathdef.h, sysdeps/m68k/fpu/bits/mathdef.h,
sysdeps/mips/fpu/bits/mathdef.h, sysdeps/powerpc/fpu/bits/mathdef.h,
sysdeps/sh/sh4/fpu/bits/mathdef.h, sysdeps/sparc/fpu/bits/mathdef.h,
sysdeps/x86_64/fpu/bits/mathdef.h: Remove INFINITY.
* sysdeps/arm/bits/huge_val.h (HUGE_VAL): Use __builtin_huge_val.
(HUGE_VALF, HUGE_VALL): Remove.
* sysdeps/ieee754/bits/huge_val.h: Likewise.
* sysdeps/sh/bits/huge_val.h: Likewise.
* sysdeps/generic/bits/huge_val.h (HUGE_VAL): Use __builtin_huge_val.
* sysdeps/generic/bits/huge_valf.h: New file.
* sysdeps/generic/bits/huge_vall.h: New file.
* sysdeps/generic/bits/inf.h: New file.
* sysdeps/ieee754/bits/huge_valf.h: New file.
* sysdeps/ieee754/bits/inf.h: New file.
* sysdeps/i386/bits/huge_val.h: Remove file.
* sysdeps/i386/bits/huge_vall.h: New file.
* sysdeps/ia64/bits/huge_val.h: Remove file.
* sysdeps/ia64/bits/huge_vall.h: New file.
* sysdeps/ieee754/ldbl-128/bits/huge_vall.h: New file.
* sysdeps/m68k/bits/huge_val.h: Remove file.
* sysdeps/m68k/bits/huge_vall.h: New file.
* sysdeps/s390/bits/huge_val.h: Remove file.
* sysdeps/sh/sh4/fpu/bits/huge_val.h: Remove file.
* sysdeps/sparc/bits/huge_vall.h: New file.
* sysdeps/sparc/sparc32/fpu/bits/huge_val.h: Remove file.
* sysdeps/sparc/sparc64/fpu/bits/huge_val.h: Remove file.
* sysdeps/ieee754/bits/nan.h (NAN): Use __builtin_nanf.
* sysdeps/mips/bits/nan.h (NAN): Likewise.
|
|
2004-03-09 Richard Henderson <rth@redhat.com>
* math/math.h (isgreater, isgreaterequal, isless, islessequal,
islessgreater, isunordered): Use builtins if available.
* sysdeps/i386/fpu/bits/mathinline.h: Don't define via builtins.
* sysdeps/m68k/fpu/bits/mathinline.h: Likewise.
* sysdeps/powerpc/fpu/bits/mathinline.h: Likewise.
* sysdeps/sparc/fpu/bits/mathinline.h: Likewise.
* sysdeps/x86_64/fpu/bits/mathinline.h: Likewise.
* sysdeps/alpha/fpu/bits/mathinline.h (isgreater, isgreaterequal,
isless, islessequal, islessgreater): Remove; use default.
(isunordered): Convert inputs to double.
|
|
From Stephen L Moshier <steve@moshier.net>.
|
|
|
|
2001-07-06 Paul Eggert <eggert@twinsun.com>
* manual/argp.texi: Remove ignored LGPL copyright notice; it's
not appropriate for documentation anyway.
* manual/libc-texinfo.sh: "Library General Public License" ->
"Lesser General Public License".
2001-07-06 Andreas Jaeger <aj@suse.de>
* All files under GPL/LGPL version 2: Place under LGPL version
2.1.
|
|
* conform/conformtest.pl: Implement optional-macro.
* conform/data/math.h-data: Update for XPG6.
* math/math.h (HUGE): Define as FLT_MAX value but don't use
FLT_MAX. Don't include <float.h>.
(MAXFLOAT): Likewise.
* math/math.h: Define MATH_ERRNO and MATH_ERREXCEPT.
|