mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Add float128 support for x86_64, x86.
This patch enables float128 support for x86_64 and x86. All GCC versions that can build glibc provide the required support, but since GCC 6 and before don't provide __builtin_nanq / __builtin_nansq, sNaN tests and some tests of NaN payloads need to be disabled with such compilers (this does not affect the generated glibc binaries at all, just the tests). bits/floatn.h declares float128 support to be available for GCC versions that provide the required libgcc support (4.3 for x86_64, 4.4 for i386 GNU/Linux, 4.5 for i386 GNU/Hurd); compilation-only support was present some time before then, but not really useful without the libgcc functions. fenv_private.h needed updating to avoid trying to put _Float128 values in registers. I make no assertion of optimality of the math_opt_barrier / math_force_eval definitions for this case; they are simply intended to be sufficient to work correctly. Tested for x86_64 and x86, with GCC 7 and GCC 6. (Testing for x32 was compilation tests only with build-many-glibcs.py to verify the ABI baseline updates. I have not done any testing for Hurd, although the float128 support is enabled there as for GNU/Linux.) * sysdeps/i386/Implies: Add ieee754/float128. * sysdeps/x86_64/Implies: Likewise. * sysdeps/x86/bits/floatn.h: New file. * sysdeps/x86/float128-abi.h: Likewise. * manual/math.texi (Mathematics): Document support for _Float128 on x86_64 and x86. * sysdeps/i386/fpu/fenv_private.h: Include <bits/floatn.h>. (math_opt_barrier): Do not put _Float128 values in floating-point registers. (math_force_eval): Likewise. [__x86_64__] (SET_RESTORE_ROUNDF128): New macro. * sysdeps/x86/fpu/Makefile [$(subdir) = math] (CPPFLAGS): Append to Makefile variable. * sysdeps/x86/fpu/e_sqrtf128.c: New file. * sysdeps/x86/fpu/sfp-machine.h: Likewise. Based on libgcc. * sysdeps/x86/math-tests.h: New file. * math/libm-test-support.h (XFAIL_FLOAT128_PAYLOAD): New macro. * math/libm-test-getpayload.inc (getpayload_test_data): Use XFAIL_FLOAT128_PAYLOAD. * math/libm-test-setpayload.inc (setpayload_test_data): Likewise. * math/libm-test-totalorder.inc (totalorder_test_data): Likewise. * math/libm-test-totalordermag.inc (totalordermag_test_data): Likewise. * sysdeps/unix/sysv/linux/i386/libc.abilist: Update. * sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise. * sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
This commit is contained in:
parent
3f823e87cc
commit
c86ed71d63
35
ChangeLog
35
ChangeLog
@ -1,3 +1,38 @@
|
||||
2017-06-26 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* sysdeps/i386/Implies: Add ieee754/float128.
|
||||
* sysdeps/x86_64/Implies: Likewise.
|
||||
* sysdeps/x86/bits/floatn.h: New file.
|
||||
* sysdeps/x86/float128-abi.h: Likewise.
|
||||
* manual/math.texi (Mathematics): Document support for _Float128
|
||||
on x86_64 and x86.
|
||||
* sysdeps/i386/fpu/fenv_private.h: Include <bits/floatn.h>.
|
||||
(math_opt_barrier): Do not put _Float128 values in floating-point
|
||||
registers.
|
||||
(math_force_eval): Likewise.
|
||||
[__x86_64__] (SET_RESTORE_ROUNDF128): New macro.
|
||||
* sysdeps/x86/fpu/Makefile [$(subdir) = math] (CPPFLAGS): Append
|
||||
to Makefile variable.
|
||||
* sysdeps/x86/fpu/e_sqrtf128.c: New file.
|
||||
* sysdeps/x86/fpu/sfp-machine.h: Likewise. Based on libgcc.
|
||||
* sysdeps/x86/math-tests.h: New file.
|
||||
* math/libm-test-support.h (XFAIL_FLOAT128_PAYLOAD): New macro.
|
||||
* math/libm-test-getpayload.inc (getpayload_test_data): Use
|
||||
XFAIL_FLOAT128_PAYLOAD.
|
||||
* math/libm-test-setpayload.inc (setpayload_test_data): Likewise.
|
||||
* math/libm-test-totalorder.inc (totalorder_test_data): Likewise.
|
||||
* math/libm-test-totalordermag.inc (totalordermag_test_data):
|
||||
Likewise.
|
||||
* sysdeps/unix/sysv/linux/i386/libc.abilist: Update.
|
||||
* sysdeps/unix/sysv/linux/i386/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/64/libm.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist: Likewise.
|
||||
* sysdeps/i386/fpu/libm-test-ulps: Likewise.
|
||||
* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Likewise.
|
||||
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
|
||||
|
||||
2017-06-26 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
[BZ #21512]
|
||||
|
14
NEWS
14
NEWS
@ -121,13 +121,13 @@ Version 2.26
|
||||
C Library is GCC 4.9. Older GCC versions, and non-GNU compilers, can
|
||||
still be used to compile programs using the GNU C Library.
|
||||
|
||||
* Support is added, on powerpc64le, for interfaces supporting the _Float128
|
||||
type from ISO/IEC TS 18661-3:2015. Most of the interfaces are taken from
|
||||
TS 18661-3. The type-generic macros in <math.h> support this type, but
|
||||
those in <tgmath.h> do not. The GNU C Library now requires GCC 6.2 or
|
||||
later to build for powerpc64le. When used with GCC versions before GCC
|
||||
7, these interfaces may be used with the type under the non-standard name
|
||||
__float128.
|
||||
* Support is added, on powerpc64le, x86_64 and x86, for interfaces
|
||||
supporting the _Float128 type from ISO/IEC TS 18661-3:2015. Most of the
|
||||
interfaces are taken from TS 18661-3. The type-generic macros in <math.h>
|
||||
support this type, but those in <tgmath.h> do not. The GNU C Library now
|
||||
requires GCC 6.2 or later to build for powerpc64le. When used with GCC
|
||||
versions before GCC 7, these interfaces may be used with the type under
|
||||
the non-standard name __float128.
|
||||
|
||||
New <stdlib.h> functions from ISO/IEC TS 18661-3:
|
||||
|
||||
|
@ -67,7 +67,7 @@ these functions are described along with the @code{double},
|
||||
|
||||
Currently, support for @code{_Float@var{N}} or @code{_Float@var{N}x}
|
||||
types is only provided for @code{_Float128} on powerpc64le (PowerPC
|
||||
64-bits little-endian).
|
||||
64-bits little-endian), x86_64 and x86.
|
||||
|
||||
@menu
|
||||
* Mathematical Constants:: Precise numeric values for often-used
|
||||
|
@ -38,35 +38,35 @@ static const struct test_f_f_data getpayload_test_data[] =
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x0"), plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x0"), plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x1"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x2"), 2, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x3fffff"), 0x3fffff, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
#if PAYLOAD_DIG >= 51
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x7ffffffffffff"), 0x7ffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 62
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x3fffffffffffffff"), 0x3fffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 111
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_fp_f (getpayload, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -qnan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_fp_f (getpayload, -snan_value_pl ("0x7fffffffffffffffffffffffffff"), 0x7fffffffffffffffffffffffffffp0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -25,21 +25,21 @@ static const struct test_Ff_b1_data setpayload_test_data[] =
|
||||
#else
|
||||
TEST_Ff_b1 (setpayload, plus_zero, 0, qnan_value_pl ("0x0"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
#endif
|
||||
TEST_Ff_b1 (setpayload, 0x1p0, 0, qnan_value_pl ("0x1"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x2p0, 0, qnan_value_pl ("0x2"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x3fffffp0, 0, qnan_value_pl ("0x3fffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x1p0, 0, qnan_value_pl ("0x1"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x2p0, 0, qnan_value_pl ("0x2"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x3fffffp0, 0, qnan_value_pl ("0x3fffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
#if PAYLOAD_DIG >= 51
|
||||
TEST_Ff_b1 (setpayload, 0x7ffffffffffffp0, 0, qnan_value_pl ("0x7ffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x7ffffffffffffp0, 0, qnan_value_pl ("0x7ffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
#else
|
||||
TEST_Ff_b1 (setpayload, 0x7ffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 62
|
||||
TEST_Ff_b1 (setpayload, 0x3fffffffffffffffp0, 0, qnan_value_pl ("0x3fffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x3fffffffffffffffp0, 0, qnan_value_pl ("0x3fffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
#else
|
||||
TEST_Ff_b1 (setpayload, 0x3fffffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 111
|
||||
TEST_Ff_b1 (setpayload, 0x7fffffffffffffffffffffffffffp0, 0, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x7fffffffffffffffffffffffffffp0, 0, qnan_value_pl ("0x7fffffffffffffffffffffffffff"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
#else
|
||||
TEST_Ff_b1 (setpayload, 0x7fffffffffffffffffffffffffffp0, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
@ -74,17 +74,17 @@ static const struct test_Ff_b1_data setpayload_test_data[] =
|
||||
TEST_Ff_b1 (setpayload, 0x1ffffffffffffffffffffffffffffp-1, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 23
|
||||
TEST_Ff_b1 (setpayload, 0x1p22, 0, qnan_value_pl ("0x400000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x1p22, 0, qnan_value_pl ("0x400000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
#else
|
||||
TEST_Ff_b1 (setpayload, 0x1p22, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 52
|
||||
TEST_Ff_b1 (setpayload, 0x1p51, 0, qnan_value_pl ("0x8000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x1p51, 0, qnan_value_pl ("0x8000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
#else
|
||||
TEST_Ff_b1 (setpayload, 0x1p51, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 63
|
||||
TEST_Ff_b1 (setpayload, 0x1p62, 0, qnan_value_pl ("0x4000000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD),
|
||||
TEST_Ff_b1 (setpayload, 0x1p62, 0, qnan_value_pl ("0x4000000000000000"), NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|TEST_NAN_SIGN|TEST_NAN_PAYLOAD|XFAIL_FLOAT128_PAYLOAD),
|
||||
#else
|
||||
TEST_Ff_b1 (setpayload, 0x1p62, 1, plus_zero, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
|
@ -115,6 +115,15 @@ extern const char doc[];
|
||||
appropriately for each rounding mode. */
|
||||
#define XFAIL_IBM128_LIBGCC (TEST_COND_ibm128_libgcc ? XFAIL_TEST : 0)
|
||||
|
||||
/* On some architectures, glibc can be built with compilers that do
|
||||
not have suitable built-in functions for setting the payload of a
|
||||
_Float128 NaN. */
|
||||
#if (defined __x86_64__ || defined __i386__) && !__GNUC_PREREQ (7, 0)
|
||||
# define XFAIL_FLOAT128_PAYLOAD (TEST_COND_binary128 ? XFAIL_TEST : 0)
|
||||
#else
|
||||
# define XFAIL_FLOAT128_PAYLOAD 0
|
||||
#endif
|
||||
|
||||
/* Number of bits in NaN payload. */
|
||||
#if TEST_COND_ibm128
|
||||
# define PAYLOAD_DIG (DBL_MANT_DIG - 2)
|
||||
|
@ -212,22 +212,22 @@ static const struct test_ff_i_data totalorder_test_data[] =
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0x200000000"), -snan_value_pl ("0x100000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 66
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalorder, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
#endif
|
||||
TEST_ff_b (totalorder, 1, 0x1.000002p0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalorder, 0x1.000002p0, 1, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
|
@ -212,22 +212,22 @@ static const struct test_ff_i_data totalordermag_test_data[] =
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0x200000000"), -snan_value_pl ("0x100000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
#endif
|
||||
#if PAYLOAD_DIG >= 66
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0xffffffffffffffff"), qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0xffffffffffffffff"), -qnan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0xffffffffffffffff"), snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0xffffffffffffffff"), -snan_value_pl ("0x10000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0xffffffffffffffff"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0x10000000000000000"), qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0x10000000000000000"), -qnan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, qnan_value_pl ("0x20000000000000000"), qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -qnan_value_pl ("0x20000000000000000"), -qnan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0x10000000000000000"), snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0x10000000000000000"), -snan_value_pl ("0x20000000000000000"), 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, snan_value_pl ("0x20000000000000000"), snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
TEST_ff_b (totalordermag, -snan_value_pl ("0x20000000000000000"), -snan_value_pl ("0x10000000000000000"), 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED|XFAIL_FLOAT128_PAYLOAD),
|
||||
#endif
|
||||
TEST_ff_b (totalordermag, 1, 0x1.000002p0, 1, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
TEST_ff_b (totalordermag, 0x1.000002p0, 1, 0, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
|
||||
|
@ -1,5 +1,6 @@
|
||||
x86
|
||||
wordsize-32
|
||||
ieee754/float128
|
||||
ieee754/ldbl-96
|
||||
ieee754/dbl-64
|
||||
ieee754/flt-32
|
||||
|
@ -1,36 +1,46 @@
|
||||
#ifndef FENV_PRIVATE_H
|
||||
#define FENV_PRIVATE_H 1
|
||||
|
||||
#include <bits/floatn.h>
|
||||
#include <fenv.h>
|
||||
#include <fpu_control.h>
|
||||
|
||||
#ifdef __SSE2_MATH__
|
||||
# define math_opt_barrier(x) \
|
||||
({ __typeof(x) __x; \
|
||||
if (sizeof (x) <= sizeof (double)) \
|
||||
__asm ("" : "=x" (__x) : "0" (x)); \
|
||||
else \
|
||||
__asm ("" : "=t" (__x) : "0" (x)); \
|
||||
# define math_opt_barrier(x) \
|
||||
({ __typeof(x) __x; \
|
||||
if (sizeof (x) <= sizeof (double) \
|
||||
|| __builtin_types_compatible_p (__typeof (x), _Float128)) \
|
||||
__asm ("" : "=x" (__x) : "0" (x)); \
|
||||
else \
|
||||
__asm ("" : "=t" (__x) : "0" (x)); \
|
||||
__x; })
|
||||
# define math_force_eval(x) \
|
||||
do { \
|
||||
if (sizeof (x) <= sizeof (double)) \
|
||||
__asm __volatile ("" : : "x" (x)); \
|
||||
else \
|
||||
__asm __volatile ("" : : "f" (x)); \
|
||||
# define math_force_eval(x) \
|
||||
do { \
|
||||
if (sizeof (x) <= sizeof (double) \
|
||||
|| __builtin_types_compatible_p (__typeof (x), _Float128)) \
|
||||
__asm __volatile ("" : : "x" (x)); \
|
||||
else \
|
||||
__asm __volatile ("" : : "f" (x)); \
|
||||
} while (0)
|
||||
#else
|
||||
# define math_opt_barrier(x) \
|
||||
({ __typeof (x) __x; \
|
||||
__asm ("" : "=t" (__x) : "0" (x)); \
|
||||
# define math_opt_barrier(x) \
|
||||
({ __typeof (x) __x; \
|
||||
if (__builtin_types_compatible_p (__typeof (x), _Float128)) \
|
||||
{ \
|
||||
__x = (x); \
|
||||
__asm ("" : "+m" (__x)); \
|
||||
} \
|
||||
else \
|
||||
__asm ("" : "=t" (__x) : "0" (x)); \
|
||||
__x; })
|
||||
# define math_force_eval(x) \
|
||||
do { \
|
||||
__typeof (x) __x = (x); \
|
||||
if (sizeof (x) <= sizeof (double)) \
|
||||
__asm __volatile ("" : : "m" (__x)); \
|
||||
else \
|
||||
__asm __volatile ("" : : "f" (__x)); \
|
||||
# define math_force_eval(x) \
|
||||
do { \
|
||||
__typeof (x) __x = (x); \
|
||||
if (sizeof (x) <= sizeof (double) \
|
||||
|| __builtin_types_compatible_p (__typeof (x), _Float128)) \
|
||||
__asm __volatile ("" : : "m" (__x)); \
|
||||
else \
|
||||
__asm __volatile ("" : : "f" (__x)); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
@ -322,6 +332,13 @@ libc_feresetround_387 (fenv_t *e)
|
||||
# define libc_feholdsetround_53bit libc_feholdsetround_387_53bit
|
||||
#endif
|
||||
|
||||
#ifdef __x86_64__
|
||||
/* The SSE rounding mode is used by soft-fp (libgcc and glibc) on
|
||||
x86_64, so that must be set for float128 computations. */
|
||||
# define SET_RESTORE_ROUNDF128(RM) \
|
||||
SET_RESTORE_ROUND_GENERIC (RM, libc_feholdsetround_sse, libc_feresetround_sse)
|
||||
#endif
|
||||
|
||||
/* We have support for rounding mode context. */
|
||||
#define HAVE_RM_CTX 1
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -2021,11 +2021,18 @@ GLIBC_2.25 strfromd F
|
||||
GLIBC_2.25 strfromf F
|
||||
GLIBC_2.25 strfroml F
|
||||
GLIBC_2.26 GLIBC_2.26 A
|
||||
GLIBC_2.26 __strtof128_internal F
|
||||
GLIBC_2.26 __wcstof128_internal F
|
||||
GLIBC_2.26 preadv2 F
|
||||
GLIBC_2.26 preadv64v2 F
|
||||
GLIBC_2.26 pwritev2 F
|
||||
GLIBC_2.26 pwritev64v2 F
|
||||
GLIBC_2.26 reallocarray F
|
||||
GLIBC_2.26 strfromf128 F
|
||||
GLIBC_2.26 strtof128 F
|
||||
GLIBC_2.26 strtof128_l F
|
||||
GLIBC_2.26 wcstof128 F
|
||||
GLIBC_2.26 wcstof128_l F
|
||||
GLIBC_2.3 GLIBC_2.3 A
|
||||
GLIBC_2.3 __ctype_b_loc F
|
||||
GLIBC_2.3 __ctype_tolower_loc F
|
||||
|
@ -473,4 +473,142 @@ GLIBC_2.25 ufromfpl F
|
||||
GLIBC_2.25 ufromfpx F
|
||||
GLIBC_2.25 ufromfpxf F
|
||||
GLIBC_2.25 ufromfpxl F
|
||||
GLIBC_2.26 GLIBC_2.26 A
|
||||
GLIBC_2.26 __acosf128_finite F
|
||||
GLIBC_2.26 __acoshf128_finite F
|
||||
GLIBC_2.26 __asinf128_finite F
|
||||
GLIBC_2.26 __atan2f128_finite F
|
||||
GLIBC_2.26 __atanhf128_finite F
|
||||
GLIBC_2.26 __coshf128_finite F
|
||||
GLIBC_2.26 __exp10f128_finite F
|
||||
GLIBC_2.26 __exp2f128_finite F
|
||||
GLIBC_2.26 __expf128_finite F
|
||||
GLIBC_2.26 __finitef128 F
|
||||
GLIBC_2.26 __fmodf128_finite F
|
||||
GLIBC_2.26 __fpclassifyf128 F
|
||||
GLIBC_2.26 __gammaf128_r_finite F
|
||||
GLIBC_2.26 __hypotf128_finite F
|
||||
GLIBC_2.26 __iseqsigf128 F
|
||||
GLIBC_2.26 __isinff128 F
|
||||
GLIBC_2.26 __isnanf128 F
|
||||
GLIBC_2.26 __issignalingf128 F
|
||||
GLIBC_2.26 __j0f128_finite F
|
||||
GLIBC_2.26 __j1f128_finite F
|
||||
GLIBC_2.26 __jnf128_finite F
|
||||
GLIBC_2.26 __lgammaf128_r_finite F
|
||||
GLIBC_2.26 __log10f128_finite F
|
||||
GLIBC_2.26 __log2f128_finite F
|
||||
GLIBC_2.26 __logf128_finite F
|
||||
GLIBC_2.26 __powf128_finite F
|
||||
GLIBC_2.26 __remainderf128_finite F
|
||||
GLIBC_2.26 __signbitf128 F
|
||||
GLIBC_2.26 __sinhf128_finite F
|
||||
GLIBC_2.26 __sqrtf128_finite F
|
||||
GLIBC_2.26 __y0f128_finite F
|
||||
GLIBC_2.26 __y1f128_finite F
|
||||
GLIBC_2.26 __ynf128_finite F
|
||||
GLIBC_2.26 acosf128 F
|
||||
GLIBC_2.26 acoshf128 F
|
||||
GLIBC_2.26 asinf128 F
|
||||
GLIBC_2.26 asinhf128 F
|
||||
GLIBC_2.26 atan2f128 F
|
||||
GLIBC_2.26 atanf128 F
|
||||
GLIBC_2.26 atanhf128 F
|
||||
GLIBC_2.26 cabsf128 F
|
||||
GLIBC_2.26 cacosf128 F
|
||||
GLIBC_2.26 cacoshf128 F
|
||||
GLIBC_2.26 canonicalizef128 F
|
||||
GLIBC_2.26 cargf128 F
|
||||
GLIBC_2.26 casinf128 F
|
||||
GLIBC_2.26 casinhf128 F
|
||||
GLIBC_2.26 catanf128 F
|
||||
GLIBC_2.26 catanhf128 F
|
||||
GLIBC_2.26 cbrtf128 F
|
||||
GLIBC_2.26 ccosf128 F
|
||||
GLIBC_2.26 ccoshf128 F
|
||||
GLIBC_2.26 ceilf128 F
|
||||
GLIBC_2.26 cexpf128 F
|
||||
GLIBC_2.26 cimagf128 F
|
||||
GLIBC_2.26 clog10f128 F
|
||||
GLIBC_2.26 clogf128 F
|
||||
GLIBC_2.26 conjf128 F
|
||||
GLIBC_2.26 copysignf128 F
|
||||
GLIBC_2.26 cosf128 F
|
||||
GLIBC_2.26 coshf128 F
|
||||
GLIBC_2.26 cpowf128 F
|
||||
GLIBC_2.26 cprojf128 F
|
||||
GLIBC_2.26 crealf128 F
|
||||
GLIBC_2.26 csinf128 F
|
||||
GLIBC_2.26 csinhf128 F
|
||||
GLIBC_2.26 csqrtf128 F
|
||||
GLIBC_2.26 ctanf128 F
|
||||
GLIBC_2.26 ctanhf128 F
|
||||
GLIBC_2.26 erfcf128 F
|
||||
GLIBC_2.26 erff128 F
|
||||
GLIBC_2.26 exp10f128 F
|
||||
GLIBC_2.26 exp2f128 F
|
||||
GLIBC_2.26 expf128 F
|
||||
GLIBC_2.26 expm1f128 F
|
||||
GLIBC_2.26 fabsf128 F
|
||||
GLIBC_2.26 fdimf128 F
|
||||
GLIBC_2.26 floorf128 F
|
||||
GLIBC_2.26 fmaf128 F
|
||||
GLIBC_2.26 fmaxf128 F
|
||||
GLIBC_2.26 fmaxmagf128 F
|
||||
GLIBC_2.26 fminf128 F
|
||||
GLIBC_2.26 fminmagf128 F
|
||||
GLIBC_2.26 fmodf128 F
|
||||
GLIBC_2.26 frexpf128 F
|
||||
GLIBC_2.26 fromfpf128 F
|
||||
GLIBC_2.26 fromfpxf128 F
|
||||
GLIBC_2.26 getpayloadf128 F
|
||||
GLIBC_2.26 hypotf128 F
|
||||
GLIBC_2.26 ilogbf128 F
|
||||
GLIBC_2.26 j0f128 F
|
||||
GLIBC_2.26 j1f128 F
|
||||
GLIBC_2.26 jnf128 F
|
||||
GLIBC_2.26 ldexpf128 F
|
||||
GLIBC_2.26 lgammaf128 F
|
||||
GLIBC_2.26 lgammaf128_r F
|
||||
GLIBC_2.26 llogbf128 F
|
||||
GLIBC_2.26 llrintf128 F
|
||||
GLIBC_2.26 llroundf128 F
|
||||
GLIBC_2.26 log10f128 F
|
||||
GLIBC_2.26 log1pf128 F
|
||||
GLIBC_2.26 log2f128 F
|
||||
GLIBC_2.26 logbf128 F
|
||||
GLIBC_2.26 logf128 F
|
||||
GLIBC_2.26 lrintf128 F
|
||||
GLIBC_2.26 lroundf128 F
|
||||
GLIBC_2.26 modff128 F
|
||||
GLIBC_2.26 nanf128 F
|
||||
GLIBC_2.26 nearbyintf128 F
|
||||
GLIBC_2.26 nextafterf128 F
|
||||
GLIBC_2.26 nextdownf128 F
|
||||
GLIBC_2.26 nextupf128 F
|
||||
GLIBC_2.26 powf128 F
|
||||
GLIBC_2.26 remainderf128 F
|
||||
GLIBC_2.26 remquof128 F
|
||||
GLIBC_2.26 rintf128 F
|
||||
GLIBC_2.26 roundevenf128 F
|
||||
GLIBC_2.26 roundf128 F
|
||||
GLIBC_2.26 scalblnf128 F
|
||||
GLIBC_2.26 scalbnf128 F
|
||||
GLIBC_2.26 setpayloadf128 F
|
||||
GLIBC_2.26 setpayloadsigf128 F
|
||||
GLIBC_2.26 sincosf128 F
|
||||
GLIBC_2.26 sinf128 F
|
||||
GLIBC_2.26 sinhf128 F
|
||||
GLIBC_2.26 sqrtf128 F
|
||||
GLIBC_2.26 tanf128 F
|
||||
GLIBC_2.26 tanhf128 F
|
||||
GLIBC_2.26 tgammaf128 F
|
||||
GLIBC_2.26 totalorderf128 F
|
||||
GLIBC_2.26 totalordermagf128 F
|
||||
GLIBC_2.26 truncf128 F
|
||||
GLIBC_2.26 ufromfpf128 F
|
||||
GLIBC_2.26 ufromfpxf128 F
|
||||
GLIBC_2.26 y0f128 F
|
||||
GLIBC_2.26 y1f128 F
|
||||
GLIBC_2.26 ynf128 F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -1862,11 +1862,18 @@ GLIBC_2.25 strfromd F
|
||||
GLIBC_2.25 strfromf F
|
||||
GLIBC_2.25 strfroml F
|
||||
GLIBC_2.26 GLIBC_2.26 A
|
||||
GLIBC_2.26 __strtof128_internal F
|
||||
GLIBC_2.26 __wcstof128_internal F
|
||||
GLIBC_2.26 preadv2 F
|
||||
GLIBC_2.26 preadv64v2 F
|
||||
GLIBC_2.26 pwritev2 F
|
||||
GLIBC_2.26 pwritev64v2 F
|
||||
GLIBC_2.26 reallocarray F
|
||||
GLIBC_2.26 strfromf128 F
|
||||
GLIBC_2.26 strtof128 F
|
||||
GLIBC_2.26 strtof128_l F
|
||||
GLIBC_2.26 wcstof128 F
|
||||
GLIBC_2.26 wcstof128_l F
|
||||
GLIBC_2.3 GLIBC_2.3 A
|
||||
GLIBC_2.3 __ctype_b_loc F
|
||||
GLIBC_2.3 __ctype_tolower_loc F
|
||||
|
@ -462,4 +462,142 @@ GLIBC_2.25 ufromfpl F
|
||||
GLIBC_2.25 ufromfpx F
|
||||
GLIBC_2.25 ufromfpxf F
|
||||
GLIBC_2.25 ufromfpxl F
|
||||
GLIBC_2.26 GLIBC_2.26 A
|
||||
GLIBC_2.26 __acosf128_finite F
|
||||
GLIBC_2.26 __acoshf128_finite F
|
||||
GLIBC_2.26 __asinf128_finite F
|
||||
GLIBC_2.26 __atan2f128_finite F
|
||||
GLIBC_2.26 __atanhf128_finite F
|
||||
GLIBC_2.26 __coshf128_finite F
|
||||
GLIBC_2.26 __exp10f128_finite F
|
||||
GLIBC_2.26 __exp2f128_finite F
|
||||
GLIBC_2.26 __expf128_finite F
|
||||
GLIBC_2.26 __finitef128 F
|
||||
GLIBC_2.26 __fmodf128_finite F
|
||||
GLIBC_2.26 __fpclassifyf128 F
|
||||
GLIBC_2.26 __gammaf128_r_finite F
|
||||
GLIBC_2.26 __hypotf128_finite F
|
||||
GLIBC_2.26 __iseqsigf128 F
|
||||
GLIBC_2.26 __isinff128 F
|
||||
GLIBC_2.26 __isnanf128 F
|
||||
GLIBC_2.26 __issignalingf128 F
|
||||
GLIBC_2.26 __j0f128_finite F
|
||||
GLIBC_2.26 __j1f128_finite F
|
||||
GLIBC_2.26 __jnf128_finite F
|
||||
GLIBC_2.26 __lgammaf128_r_finite F
|
||||
GLIBC_2.26 __log10f128_finite F
|
||||
GLIBC_2.26 __log2f128_finite F
|
||||
GLIBC_2.26 __logf128_finite F
|
||||
GLIBC_2.26 __powf128_finite F
|
||||
GLIBC_2.26 __remainderf128_finite F
|
||||
GLIBC_2.26 __signbitf128 F
|
||||
GLIBC_2.26 __sinhf128_finite F
|
||||
GLIBC_2.26 __sqrtf128_finite F
|
||||
GLIBC_2.26 __y0f128_finite F
|
||||
GLIBC_2.26 __y1f128_finite F
|
||||
GLIBC_2.26 __ynf128_finite F
|
||||
GLIBC_2.26 acosf128 F
|
||||
GLIBC_2.26 acoshf128 F
|
||||
GLIBC_2.26 asinf128 F
|
||||
GLIBC_2.26 asinhf128 F
|
||||
GLIBC_2.26 atan2f128 F
|
||||
GLIBC_2.26 atanf128 F
|
||||
GLIBC_2.26 atanhf128 F
|
||||
GLIBC_2.26 cabsf128 F
|
||||
GLIBC_2.26 cacosf128 F
|
||||
GLIBC_2.26 cacoshf128 F
|
||||
GLIBC_2.26 canonicalizef128 F
|
||||
GLIBC_2.26 cargf128 F
|
||||
GLIBC_2.26 casinf128 F
|
||||
GLIBC_2.26 casinhf128 F
|
||||
GLIBC_2.26 catanf128 F
|
||||
GLIBC_2.26 catanhf128 F
|
||||
GLIBC_2.26 cbrtf128 F
|
||||
GLIBC_2.26 ccosf128 F
|
||||
GLIBC_2.26 ccoshf128 F
|
||||
GLIBC_2.26 ceilf128 F
|
||||
GLIBC_2.26 cexpf128 F
|
||||
GLIBC_2.26 cimagf128 F
|
||||
GLIBC_2.26 clog10f128 F
|
||||
GLIBC_2.26 clogf128 F
|
||||
GLIBC_2.26 conjf128 F
|
||||
GLIBC_2.26 copysignf128 F
|
||||
GLIBC_2.26 cosf128 F
|
||||
GLIBC_2.26 coshf128 F
|
||||
GLIBC_2.26 cpowf128 F
|
||||
GLIBC_2.26 cprojf128 F
|
||||
GLIBC_2.26 crealf128 F
|
||||
GLIBC_2.26 csinf128 F
|
||||
GLIBC_2.26 csinhf128 F
|
||||
GLIBC_2.26 csqrtf128 F
|
||||
GLIBC_2.26 ctanf128 F
|
||||
GLIBC_2.26 ctanhf128 F
|
||||
GLIBC_2.26 erfcf128 F
|
||||
GLIBC_2.26 erff128 F
|
||||
GLIBC_2.26 exp10f128 F
|
||||
GLIBC_2.26 exp2f128 F
|
||||
GLIBC_2.26 expf128 F
|
||||
GLIBC_2.26 expm1f128 F
|
||||
GLIBC_2.26 fabsf128 F
|
||||
GLIBC_2.26 fdimf128 F
|
||||
GLIBC_2.26 floorf128 F
|
||||
GLIBC_2.26 fmaf128 F
|
||||
GLIBC_2.26 fmaxf128 F
|
||||
GLIBC_2.26 fmaxmagf128 F
|
||||
GLIBC_2.26 fminf128 F
|
||||
GLIBC_2.26 fminmagf128 F
|
||||
GLIBC_2.26 fmodf128 F
|
||||
GLIBC_2.26 frexpf128 F
|
||||
GLIBC_2.26 fromfpf128 F
|
||||
GLIBC_2.26 fromfpxf128 F
|
||||
GLIBC_2.26 getpayloadf128 F
|
||||
GLIBC_2.26 hypotf128 F
|
||||
GLIBC_2.26 ilogbf128 F
|
||||
GLIBC_2.26 j0f128 F
|
||||
GLIBC_2.26 j1f128 F
|
||||
GLIBC_2.26 jnf128 F
|
||||
GLIBC_2.26 ldexpf128 F
|
||||
GLIBC_2.26 lgammaf128 F
|
||||
GLIBC_2.26 lgammaf128_r F
|
||||
GLIBC_2.26 llogbf128 F
|
||||
GLIBC_2.26 llrintf128 F
|
||||
GLIBC_2.26 llroundf128 F
|
||||
GLIBC_2.26 log10f128 F
|
||||
GLIBC_2.26 log1pf128 F
|
||||
GLIBC_2.26 log2f128 F
|
||||
GLIBC_2.26 logbf128 F
|
||||
GLIBC_2.26 logf128 F
|
||||
GLIBC_2.26 lrintf128 F
|
||||
GLIBC_2.26 lroundf128 F
|
||||
GLIBC_2.26 modff128 F
|
||||
GLIBC_2.26 nanf128 F
|
||||
GLIBC_2.26 nearbyintf128 F
|
||||
GLIBC_2.26 nextafterf128 F
|
||||
GLIBC_2.26 nextdownf128 F
|
||||
GLIBC_2.26 nextupf128 F
|
||||
GLIBC_2.26 powf128 F
|
||||
GLIBC_2.26 remainderf128 F
|
||||
GLIBC_2.26 remquof128 F
|
||||
GLIBC_2.26 rintf128 F
|
||||
GLIBC_2.26 roundevenf128 F
|
||||
GLIBC_2.26 roundf128 F
|
||||
GLIBC_2.26 scalblnf128 F
|
||||
GLIBC_2.26 scalbnf128 F
|
||||
GLIBC_2.26 setpayloadf128 F
|
||||
GLIBC_2.26 setpayloadsigf128 F
|
||||
GLIBC_2.26 sincosf128 F
|
||||
GLIBC_2.26 sinf128 F
|
||||
GLIBC_2.26 sinhf128 F
|
||||
GLIBC_2.26 sqrtf128 F
|
||||
GLIBC_2.26 tanf128 F
|
||||
GLIBC_2.26 tanhf128 F
|
||||
GLIBC_2.26 tgammaf128 F
|
||||
GLIBC_2.26 totalorderf128 F
|
||||
GLIBC_2.26 totalordermagf128 F
|
||||
GLIBC_2.26 truncf128 F
|
||||
GLIBC_2.26 ufromfpf128 F
|
||||
GLIBC_2.26 ufromfpxf128 F
|
||||
GLIBC_2.26 y0f128 F
|
||||
GLIBC_2.26 y1f128 F
|
||||
GLIBC_2.26 ynf128 F
|
||||
GLIBC_2.4 GLIBC_2.4 A
|
||||
|
@ -2105,8 +2105,15 @@ GLIBC_2.25 strfromd F
|
||||
GLIBC_2.25 strfromf F
|
||||
GLIBC_2.25 strfroml F
|
||||
GLIBC_2.26 GLIBC_2.26 A
|
||||
GLIBC_2.26 __strtof128_internal F
|
||||
GLIBC_2.26 __wcstof128_internal F
|
||||
GLIBC_2.26 preadv2 F
|
||||
GLIBC_2.26 preadv64v2 F
|
||||
GLIBC_2.26 pwritev2 F
|
||||
GLIBC_2.26 pwritev64v2 F
|
||||
GLIBC_2.26 reallocarray F
|
||||
GLIBC_2.26 strfromf128 F
|
||||
GLIBC_2.26 strtof128 F
|
||||
GLIBC_2.26 strtof128_l F
|
||||
GLIBC_2.26 wcstof128 F
|
||||
GLIBC_2.26 wcstof128_l F
|
||||
|
@ -461,3 +461,141 @@ GLIBC_2.25 ufromfpl F
|
||||
GLIBC_2.25 ufromfpx F
|
||||
GLIBC_2.25 ufromfpxf F
|
||||
GLIBC_2.25 ufromfpxl F
|
||||
GLIBC_2.26 GLIBC_2.26 A
|
||||
GLIBC_2.26 __acosf128_finite F
|
||||
GLIBC_2.26 __acoshf128_finite F
|
||||
GLIBC_2.26 __asinf128_finite F
|
||||
GLIBC_2.26 __atan2f128_finite F
|
||||
GLIBC_2.26 __atanhf128_finite F
|
||||
GLIBC_2.26 __coshf128_finite F
|
||||
GLIBC_2.26 __exp10f128_finite F
|
||||
GLIBC_2.26 __exp2f128_finite F
|
||||
GLIBC_2.26 __expf128_finite F
|
||||
GLIBC_2.26 __finitef128 F
|
||||
GLIBC_2.26 __fmodf128_finite F
|
||||
GLIBC_2.26 __fpclassifyf128 F
|
||||
GLIBC_2.26 __gammaf128_r_finite F
|
||||
GLIBC_2.26 __hypotf128_finite F
|
||||
GLIBC_2.26 __iseqsigf128 F
|
||||
GLIBC_2.26 __isinff128 F
|
||||
GLIBC_2.26 __isnanf128 F
|
||||
GLIBC_2.26 __issignalingf128 F
|
||||
GLIBC_2.26 __j0f128_finite F
|
||||
GLIBC_2.26 __j1f128_finite F
|
||||
GLIBC_2.26 __jnf128_finite F
|
||||
GLIBC_2.26 __lgammaf128_r_finite F
|
||||
GLIBC_2.26 __log10f128_finite F
|
||||
GLIBC_2.26 __log2f128_finite F
|
||||
GLIBC_2.26 __logf128_finite F
|
||||
GLIBC_2.26 __powf128_finite F
|
||||
GLIBC_2.26 __remainderf128_finite F
|
||||
GLIBC_2.26 __signbitf128 F
|
||||
GLIBC_2.26 __sinhf128_finite F
|
||||
GLIBC_2.26 __sqrtf128_finite F
|
||||
GLIBC_2.26 __y0f128_finite F
|
||||
GLIBC_2.26 __y1f128_finite F
|
||||
GLIBC_2.26 __ynf128_finite F
|
||||
GLIBC_2.26 acosf128 F
|
||||
GLIBC_2.26 acoshf128 F
|
||||
GLIBC_2.26 asinf128 F
|
||||
GLIBC_2.26 asinhf128 F
|
||||
GLIBC_2.26 atan2f128 F
|
||||
GLIBC_2.26 atanf128 F
|
||||
GLIBC_2.26 atanhf128 F
|
||||
GLIBC_2.26 cabsf128 F
|
||||
GLIBC_2.26 cacosf128 F
|
||||
GLIBC_2.26 cacoshf128 F
|
||||
GLIBC_2.26 canonicalizef128 F
|
||||
GLIBC_2.26 cargf128 F
|
||||
GLIBC_2.26 casinf128 F
|
||||
GLIBC_2.26 casinhf128 F
|
||||
GLIBC_2.26 catanf128 F
|
||||
GLIBC_2.26 catanhf128 F
|
||||
GLIBC_2.26 cbrtf128 F
|
||||
GLIBC_2.26 ccosf128 F
|
||||
GLIBC_2.26 ccoshf128 F
|
||||
GLIBC_2.26 ceilf128 F
|
||||
GLIBC_2.26 cexpf128 F
|
||||
GLIBC_2.26 cimagf128 F
|
||||
GLIBC_2.26 clog10f128 F
|
||||
GLIBC_2.26 clogf128 F
|
||||
GLIBC_2.26 conjf128 F
|
||||
GLIBC_2.26 copysignf128 F
|
||||
GLIBC_2.26 cosf128 F
|
||||
GLIBC_2.26 coshf128 F
|
||||
GLIBC_2.26 cpowf128 F
|
||||
GLIBC_2.26 cprojf128 F
|
||||
GLIBC_2.26 crealf128 F
|
||||
GLIBC_2.26 csinf128 F
|
||||
GLIBC_2.26 csinhf128 F
|
||||
GLIBC_2.26 csqrtf128 F
|
||||
GLIBC_2.26 ctanf128 F
|
||||
GLIBC_2.26 ctanhf128 F
|
||||
GLIBC_2.26 erfcf128 F
|
||||
GLIBC_2.26 erff128 F
|
||||
GLIBC_2.26 exp10f128 F
|
||||
GLIBC_2.26 exp2f128 F
|
||||
GLIBC_2.26 expf128 F
|
||||
GLIBC_2.26 expm1f128 F
|
||||
GLIBC_2.26 fabsf128 F
|
||||
GLIBC_2.26 fdimf128 F
|
||||
GLIBC_2.26 floorf128 F
|
||||
GLIBC_2.26 fmaf128 F
|
||||
GLIBC_2.26 fmaxf128 F
|
||||
GLIBC_2.26 fmaxmagf128 F
|
||||
GLIBC_2.26 fminf128 F
|
||||
GLIBC_2.26 fminmagf128 F
|
||||
GLIBC_2.26 fmodf128 F
|
||||
GLIBC_2.26 frexpf128 F
|
||||
GLIBC_2.26 fromfpf128 F
|
||||
GLIBC_2.26 fromfpxf128 F
|
||||
GLIBC_2.26 getpayloadf128 F
|
||||
GLIBC_2.26 hypotf128 F
|
||||
GLIBC_2.26 ilogbf128 F
|
||||
GLIBC_2.26 j0f128 F
|
||||
GLIBC_2.26 j1f128 F
|
||||
GLIBC_2.26 jnf128 F
|
||||
GLIBC_2.26 ldexpf128 F
|
||||
GLIBC_2.26 lgammaf128 F
|
||||
GLIBC_2.26 lgammaf128_r F
|
||||
GLIBC_2.26 llogbf128 F
|
||||
GLIBC_2.26 llrintf128 F
|
||||
GLIBC_2.26 llroundf128 F
|
||||
GLIBC_2.26 log10f128 F
|
||||
GLIBC_2.26 log1pf128 F
|
||||
GLIBC_2.26 log2f128 F
|
||||
GLIBC_2.26 logbf128 F
|
||||
GLIBC_2.26 logf128 F
|
||||
GLIBC_2.26 lrintf128 F
|
||||
GLIBC_2.26 lroundf128 F
|
||||
GLIBC_2.26 modff128 F
|
||||
GLIBC_2.26 nanf128 F
|
||||
GLIBC_2.26 nearbyintf128 F
|
||||
GLIBC_2.26 nextafterf128 F
|
||||
GLIBC_2.26 nextdownf128 F
|
||||
GLIBC_2.26 nextupf128 F
|
||||
GLIBC_2.26 powf128 F
|
||||
GLIBC_2.26 remainderf128 F
|
||||
GLIBC_2.26 remquof128 F
|
||||
GLIBC_2.26 rintf128 F
|
||||
GLIBC_2.26 roundevenf128 F
|
||||
GLIBC_2.26 roundf128 F
|
||||
GLIBC_2.26 scalblnf128 F
|
||||
GLIBC_2.26 scalbnf128 F
|
||||
GLIBC_2.26 setpayloadf128 F
|
||||
GLIBC_2.26 setpayloadsigf128 F
|
||||
GLIBC_2.26 sincosf128 F
|
||||
GLIBC_2.26 sinf128 F
|
||||
GLIBC_2.26 sinhf128 F
|
||||
GLIBC_2.26 sqrtf128 F
|
||||
GLIBC_2.26 tanf128 F
|
||||
GLIBC_2.26 tanhf128 F
|
||||
GLIBC_2.26 tgammaf128 F
|
||||
GLIBC_2.26 totalorderf128 F
|
||||
GLIBC_2.26 totalordermagf128 F
|
||||
GLIBC_2.26 truncf128 F
|
||||
GLIBC_2.26 ufromfpf128 F
|
||||
GLIBC_2.26 ufromfpxf128 F
|
||||
GLIBC_2.26 y0f128 F
|
||||
GLIBC_2.26 y1f128 F
|
||||
GLIBC_2.26 ynf128 F
|
||||
|
96
sysdeps/x86/bits/floatn.h
Normal file
96
sysdeps/x86/bits/floatn.h
Normal file
@ -0,0 +1,96 @@
|
||||
/* Macros to control TS 18661-3 glibc features on x86.
|
||||
Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _BITS_FLOATN_H
|
||||
#define _BITS_FLOATN_H
|
||||
|
||||
#include <features.h>
|
||||
|
||||
/* Defined to 1 if the current compiler invocation provides a
|
||||
floating-point type with the IEEE 754 binary128 format, and this
|
||||
glibc includes corresponding *f128 interfaces for it. The required
|
||||
libgcc support was added some time after the basic compiler
|
||||
support, for x86_64 and x86. */
|
||||
#if (defined __x86_64__ \
|
||||
? __GNUC_PREREQ (4, 3) \
|
||||
: (defined __GNU__ ? __GNUC_PREREQ (4, 5) : __GNUC_PREREQ (4, 4)))
|
||||
# define __HAVE_FLOAT128 1
|
||||
#else
|
||||
# define __HAVE_FLOAT128 0
|
||||
#endif
|
||||
|
||||
/* Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct
|
||||
from the default float, double and long double types in this glibc. */
|
||||
#if __HAVE_FLOAT128
|
||||
# define __HAVE_DISTINCT_FLOAT128 1
|
||||
#else
|
||||
# define __HAVE_DISTINCT_FLOAT128 0
|
||||
#endif
|
||||
|
||||
/* Defined to concatenate the literal suffix to be used with _Float128
|
||||
types, if __HAVE_FLOAT128 is 1. */
|
||||
#if __HAVE_FLOAT128
|
||||
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
/* The literal suffix f128 exists only since GCC 7.0. */
|
||||
# define __f128(x) x##q
|
||||
# else
|
||||
# define __f128(x) x##f128
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Defined to a complex binary128 type if __HAVE_FLOAT128 is 1. */
|
||||
#if __HAVE_FLOAT128
|
||||
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
/* Add a typedef for older GCC compilers which don't natively support
|
||||
_Complex _Float128. */
|
||||
typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
|
||||
# define __CFLOAT128 __cfloat128
|
||||
# else
|
||||
# define __CFLOAT128 _Complex _Float128
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* The remaining of this file provides support for older compilers. */
|
||||
#if __HAVE_FLOAT128
|
||||
|
||||
/* The type _Float128 exists only since GCC 7.0. */
|
||||
# if !__GNUC_PREREQ (7, 0) || defined __cplusplus
|
||||
typedef __float128 _Float128;
|
||||
# endif
|
||||
|
||||
/* __builtin_huge_valf128 doesn't exist before GCC 7.0. */
|
||||
# if !__GNUC_PREREQ (7, 0)
|
||||
# define __builtin_huge_valf128() ((_Float128) __builtin_huge_val ())
|
||||
# endif
|
||||
|
||||
/* Older GCC has only a subset of built-in functions for _Float128 on
|
||||
x86, and __builtin_infq is not usable in static initializers.
|
||||
Converting a narrower sNaN to _Float128 produces a quiet NaN, so
|
||||
attempts to use _Float128 sNaNs will not work properly with older
|
||||
compilers. */
|
||||
# if !__GNUC_PREREQ (7, 0)
|
||||
# define __builtin_copysignf128 __builtin_copysignq
|
||||
# define __builtin_fabsf128 __builtin_fabsq
|
||||
# define __builtin_inff128() ((_Float128) __builtin_inf ())
|
||||
# define __builtin_nanf128(x) ((_Float128) __builtin_nan (x))
|
||||
# define __builtin_nansf128(x) ((_Float128) __builtin_nans (x))
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _BITS_FLOATN_H */
|
2
sysdeps/x86/float128-abi.h
Normal file
2
sysdeps/x86/float128-abi.h
Normal file
@ -0,0 +1,2 @@
|
||||
/* ABI version for _Float128 ABI introduction. */
|
||||
#define FLOAT128_VERSION GLIBC_2.26
|
@ -1,4 +1,7 @@
|
||||
ifeq ($(subdir),math)
|
||||
# sqrtf128 requires soft-fp.
|
||||
CPPFLAGS += -I../soft-fp
|
||||
|
||||
libm-support += powl_helper
|
||||
tests += test-fenv-sse test-fenv-clear-sse test-fenv-x87 test-fenv-sse-2 \
|
||||
test-flt-eval-method-387 test-flt-eval-method-sse
|
||||
|
47
sysdeps/x86/fpu/e_sqrtf128.c
Normal file
47
sysdeps/x86/fpu/e_sqrtf128.c
Normal file
@ -0,0 +1,47 @@
|
||||
/* soft-fp sqrt for _Float128
|
||||
Return sqrt(a)
|
||||
Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
In addition to the permissions in the GNU Lesser General Public
|
||||
License, the Free Software Foundation gives you unlimited
|
||||
permission to link the compiled version of this file into
|
||||
combinations with other programs, and to distribute those
|
||||
combinations without any restriction coming from the use of this
|
||||
file. (The Lesser General Public License restrictions do apply in
|
||||
other respects; for example, they cover modification of the file,
|
||||
and distribution when not linked into a combine executable.)
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <soft-fp.h>
|
||||
#include <quad.h>
|
||||
|
||||
__float128
|
||||
__ieee754_sqrtf128 (__float128 a)
|
||||
{
|
||||
FP_DECL_EX;
|
||||
FP_DECL_Q (A);
|
||||
FP_DECL_Q (R);
|
||||
__float128 r;
|
||||
|
||||
FP_INIT_ROUNDMODE;
|
||||
FP_UNPACK_Q (A, a);
|
||||
FP_SQRT_Q (R, A);
|
||||
FP_PACK_Q (r, R);
|
||||
FP_HANDLE_EXCEPTIONS;
|
||||
return r;
|
||||
}
|
||||
strong_alias (__ieee754_sqrtf128, __sqrtf128_finite)
|
209
sysdeps/x86/fpu/sfp-machine.h
Normal file
209
sysdeps/x86/fpu/sfp-machine.h
Normal file
@ -0,0 +1,209 @@
|
||||
/* Configure soft-fp for building sqrtf128. Based on sfp-machine.h in
|
||||
libgcc, with soft-float and other irrelevant parts removed. */
|
||||
|
||||
/* The type of the result of a floating point comparison. This must
|
||||
match `__libgcc_cmp_return__' in GCC for the target. */
|
||||
typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
|
||||
#define CMPtype __gcc_CMPtype
|
||||
|
||||
#ifdef __x86_64__
|
||||
# define _FP_W_TYPE_SIZE 64
|
||||
# define _FP_W_TYPE unsigned long long
|
||||
# define _FP_WS_TYPE signed long long
|
||||
# define _FP_I_TYPE long long
|
||||
|
||||
typedef int TItype __attribute__ ((mode (TI)));
|
||||
typedef unsigned int UTItype __attribute__ ((mode (TI)));
|
||||
|
||||
# define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
|
||||
|
||||
# define _FP_MUL_MEAT_Q(R,X,Y) \
|
||||
_FP_MUL_MEAT_2_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
|
||||
|
||||
# define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
|
||||
|
||||
# define _FP_NANFRAC_S _FP_QNANBIT_S
|
||||
# define _FP_NANFRAC_D _FP_QNANBIT_D
|
||||
# define _FP_NANFRAC_E _FP_QNANBIT_E, 0
|
||||
# define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0
|
||||
|
||||
# define FP_EX_SHIFT 7
|
||||
|
||||
# define _FP_DECL_EX \
|
||||
unsigned int _fcw __attribute__ ((unused)) = FP_RND_NEAREST;
|
||||
|
||||
# define FP_RND_NEAREST 0
|
||||
# define FP_RND_ZERO 0x6000
|
||||
# define FP_RND_PINF 0x4000
|
||||
# define FP_RND_MINF 0x2000
|
||||
|
||||
# define FP_RND_MASK 0x6000
|
||||
|
||||
# define FP_INIT_ROUNDMODE \
|
||||
do { \
|
||||
__asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (_fcw)); \
|
||||
} while (0)
|
||||
#else
|
||||
# define _FP_W_TYPE_SIZE 32
|
||||
# define _FP_W_TYPE unsigned int
|
||||
# define _FP_WS_TYPE signed int
|
||||
# define _FP_I_TYPE int
|
||||
|
||||
# define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
|
||||
__asm__ ("add{l} {%11,%3|%3,%11}\n\t" \
|
||||
"adc{l} {%9,%2|%2,%9}\n\t" \
|
||||
"adc{l} {%7,%1|%1,%7}\n\t" \
|
||||
"adc{l} {%5,%0|%0,%5}" \
|
||||
: "=r" ((USItype) (r3)), \
|
||||
"=&r" ((USItype) (r2)), \
|
||||
"=&r" ((USItype) (r1)), \
|
||||
"=&r" ((USItype) (r0)) \
|
||||
: "%0" ((USItype) (x3)), \
|
||||
"g" ((USItype) (y3)), \
|
||||
"%1" ((USItype) (x2)), \
|
||||
"g" ((USItype) (y2)), \
|
||||
"%2" ((USItype) (x1)), \
|
||||
"g" ((USItype) (y1)), \
|
||||
"%3" ((USItype) (x0)), \
|
||||
"g" ((USItype) (y0)))
|
||||
# define __FP_FRAC_ADD_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
|
||||
__asm__ ("add{l} {%8,%2|%2,%8}\n\t" \
|
||||
"adc{l} {%6,%1|%1,%6}\n\t" \
|
||||
"adc{l} {%4,%0|%0,%4}" \
|
||||
: "=r" ((USItype) (r2)), \
|
||||
"=&r" ((USItype) (r1)), \
|
||||
"=&r" ((USItype) (r0)) \
|
||||
: "%0" ((USItype) (x2)), \
|
||||
"g" ((USItype) (y2)), \
|
||||
"%1" ((USItype) (x1)), \
|
||||
"g" ((USItype) (y1)), \
|
||||
"%2" ((USItype) (x0)), \
|
||||
"g" ((USItype) (y0)))
|
||||
# define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
|
||||
__asm__ ("sub{l} {%11,%3|%3,%11}\n\t" \
|
||||
"sbb{l} {%9,%2|%2,%9}\n\t" \
|
||||
"sbb{l} {%7,%1|%1,%7}\n\t" \
|
||||
"sbb{l} {%5,%0|%0,%5}" \
|
||||
: "=r" ((USItype) (r3)), \
|
||||
"=&r" ((USItype) (r2)), \
|
||||
"=&r" ((USItype) (r1)), \
|
||||
"=&r" ((USItype) (r0)) \
|
||||
: "0" ((USItype) (x3)), \
|
||||
"g" ((USItype) (y3)), \
|
||||
"1" ((USItype) (x2)), \
|
||||
"g" ((USItype) (y2)), \
|
||||
"2" ((USItype) (x1)), \
|
||||
"g" ((USItype) (y1)), \
|
||||
"3" ((USItype) (x0)), \
|
||||
"g" ((USItype) (y0)))
|
||||
# define __FP_FRAC_SUB_3(r2,r1,r0,x2,x1,x0,y2,y1,y0) \
|
||||
__asm__ ("sub{l} {%8,%2|%2,%8}\n\t" \
|
||||
"sbb{l} {%6,%1|%1,%6}\n\t" \
|
||||
"sbb{l} {%4,%0|%0,%4}" \
|
||||
: "=r" ((USItype) (r2)), \
|
||||
"=&r" ((USItype) (r1)), \
|
||||
"=&r" ((USItype) (r0)) \
|
||||
: "0" ((USItype) (x2)), \
|
||||
"g" ((USItype) (y2)), \
|
||||
"1" ((USItype) (x1)), \
|
||||
"g" ((USItype) (y1)), \
|
||||
"2" ((USItype) (x0)), \
|
||||
"g" ((USItype) (y0)))
|
||||
# define __FP_FRAC_ADDI_4(x3,x2,x1,x0,i) \
|
||||
__asm__ ("add{l} {%4,%3|%3,%4}\n\t" \
|
||||
"adc{l} {$0,%2|%2,0}\n\t" \
|
||||
"adc{l} {$0,%1|%1,0}\n\t" \
|
||||
"adc{l} {$0,%0|%0,0}" \
|
||||
: "+r" ((USItype) (x3)), \
|
||||
"+&r" ((USItype) (x2)), \
|
||||
"+&r" ((USItype) (x1)), \
|
||||
"+&r" ((USItype) (x0)) \
|
||||
: "g" ((USItype) (i)))
|
||||
|
||||
|
||||
# define _FP_MUL_MEAT_S(R,X,Y) \
|
||||
_FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
|
||||
# define _FP_MUL_MEAT_D(R,X,Y) \
|
||||
_FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
|
||||
# define _FP_MUL_MEAT_Q(R,X,Y) \
|
||||
_FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
|
||||
|
||||
# define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y)
|
||||
# define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
|
||||
# define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
|
||||
|
||||
# define _FP_NANFRAC_S _FP_QNANBIT_S
|
||||
# define _FP_NANFRAC_D _FP_QNANBIT_D, 0
|
||||
/* Even if XFmode is 12byte, we have to pad it to
|
||||
16byte since soft-fp emulation is done in 16byte. */
|
||||
# define _FP_NANFRAC_E _FP_QNANBIT_E, 0, 0, 0
|
||||
# define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
|
||||
|
||||
# define FP_EX_SHIFT 0
|
||||
|
||||
# define _FP_DECL_EX \
|
||||
unsigned short _fcw __attribute__ ((unused)) = FP_RND_NEAREST;
|
||||
|
||||
# define FP_RND_NEAREST 0
|
||||
# define FP_RND_ZERO 0xc00
|
||||
# define FP_RND_PINF 0x800
|
||||
# define FP_RND_MINF 0x400
|
||||
|
||||
# define FP_RND_MASK 0xc00
|
||||
|
||||
# define FP_INIT_ROUNDMODE \
|
||||
do { \
|
||||
__asm__ __volatile__ ("fnstcw\t%0" : "=m" (_fcw)); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define _FP_KEEPNANFRACP 1
|
||||
#define _FP_QNANNEGATEDP 0
|
||||
|
||||
#define _FP_NANSIGN_S 1
|
||||
#define _FP_NANSIGN_D 1
|
||||
#define _FP_NANSIGN_E 1
|
||||
#define _FP_NANSIGN_Q 1
|
||||
|
||||
/* Here is something Intel misdesigned: the specs don't define
|
||||
the case where we have two NaNs with same mantissas, but
|
||||
different sign. Different operations pick up different NaNs. */
|
||||
#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \
|
||||
do { \
|
||||
if (_FP_FRAC_GT_##wc(X, Y) \
|
||||
|| (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*'))) \
|
||||
{ \
|
||||
R##_s = X##_s; \
|
||||
_FP_FRAC_COPY_##wc(R,X); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
R##_s = Y##_s; \
|
||||
_FP_FRAC_COPY_##wc(R,Y); \
|
||||
} \
|
||||
R##_c = FP_CLS_NAN; \
|
||||
} while (0)
|
||||
|
||||
#define FP_EX_INVALID 0x01
|
||||
#define FP_EX_DENORM 0x02
|
||||
#define FP_EX_DIVZERO 0x04
|
||||
#define FP_EX_OVERFLOW 0x08
|
||||
#define FP_EX_UNDERFLOW 0x10
|
||||
#define FP_EX_INEXACT 0x20
|
||||
#define FP_EX_ALL \
|
||||
(FP_EX_INVALID | FP_EX_DENORM | FP_EX_DIVZERO | FP_EX_OVERFLOW \
|
||||
| FP_EX_UNDERFLOW | FP_EX_INEXACT)
|
||||
|
||||
void __sfp_handle_exceptions (int);
|
||||
|
||||
#define FP_HANDLE_EXCEPTIONS \
|
||||
do { \
|
||||
if (__builtin_expect (_fex, 0)) \
|
||||
__sfp_handle_exceptions (_fex); \
|
||||
} while (0);
|
||||
|
||||
#define FP_TRAPPING_EXCEPTIONS ((~_fcw >> FP_EX_SHIFT) & FP_EX_ALL)
|
||||
|
||||
#define FP_ROUNDMODE (_fcw & FP_RND_MASK)
|
||||
|
||||
#define _FP_TININESS_AFTER_ROUNDING 1
|
25
sysdeps/x86/math-tests.h
Normal file
25
sysdeps/x86/math-tests.h
Normal file
@ -0,0 +1,25 @@
|
||||
/* Configuration for math tests. x86 version.
|
||||
Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Before GCC 7, there is no built-in function to provide a __float128
|
||||
sNaN, so most sNaN tests for this type cannot work. */
|
||||
#if !__GNUC_PREREQ (7, 0)
|
||||
# define SNAN_TESTS_float128 0
|
||||
#endif
|
||||
|
||||
#include_next <math-tests.h>
|
@ -1,4 +1,5 @@
|
||||
x86
|
||||
ieee754/float128
|
||||
ieee754/ldbl-96
|
||||
ieee754/dbl-64/wordsize-64
|
||||
ieee754/dbl-64
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user