Go to file
Joseph Myers ace614b8a5 soft-fp: support after-rounding tininess detection.
IEEE 754-2008 defines two ways in which tiny results can be detected,
"before rounding" (based on the infinite-precision result) and "after
rounding" (based on the result when rounded to normal precision as if
the exponent range were unbounded).  All binary operations on an
architecture must use the same choice of how tininess is detected.

soft-fp has so far implemented only before-rounding tininess
detection.  This patch adds support for after-rounding tininess
detection.  A new macro _FP_TININESS_AFTER_ROUNDING is added that
sfp-machine.h must define (soft-fp is meant to be self-contained so
the existing tininess.h files aren't used here, though the information
going in sfp-machine.h has been taken from them).  The soft-fp macros
dealing with raising underflow exceptions then handle the cases where
the choice matters specially, rounding a copy of the input to the
appropriate precision to see if a value that's tiny before rounding
isn't tiny after rounding.

Tested for mips64 using GCC trunk (which now uses soft-fp on MIPS, so
supporting exceptions and rounding modes for long double where not
previously supported - this is the immediate motivation for doing this
patch now) together with (a) a patch to sysdeps/mips/math-tests.h to
enable exceptions / rounding modes tests for long double for GCC 4.9
and later, and (b) corresponding changes applied to libgcc's soft-fp
and sfp-machine.h files.  In the libgcc context this is also tested on
x86_64 (also an after-rounding architecture) with testcases for
__float128 that I intend to add to the GCC testsuite when updating
soft-fp there.

(To be clear: this patch does not fix any glibc bugs that were
user-visible in past releases, since after-rounding architectures
didn't use soft-fp in any affected case with support for
floating-point exceptions - so there is no corresponding Bugzilla bug.
Rather, it works together with the GCC changes to use soft-fp on MIPS
to allow previously absent long double functionality to work properly,
and allows soft-fp to be used in glibc on after-rounding architectures
in cases where it couldn't previously be used.)

	* soft-fp/op-common.h (_FP_DECL): Mark exponent as possibly
	unused.
	(_FP_PACK_SEMIRAW): Determine tininess based on rounding shifted
	value if _FP_TININESS_AFTER_ROUNDING and unrounded value is in
	subnormal range.
	(_FP_PACK_CANONICAL): Determine tininess based on rounding to
	normal precision if _FP_TININESS_AFTER_ROUNDING and unrounded
	value has largest subnormal exponent.
	* soft-fp/soft-fp.h [FP_NO_EXCEPTIONS]
	(_FP_TININESS_AFTER_ROUNDING): Undefine and redefine to 0.
	* sysdeps/aarch64/soft-fp/sfp-machine.h
	(_FP_TININESS_AFTER_ROUNDING): New macro.
	* sysdeps/alpha/soft-fp/sfp-machine.h
	(_FP_TININESS_AFTER_ROUNDING): Likewise.
	* sysdeps/arm/soft-fp/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* sysdeps/mips/mips64/soft-fp/sfp-machine.h
	(_FP_TININESS_AFTER_ROUNDING): Likewise.
	* sysdeps/mips/soft-fp/sfp-machine.h
	(_FP_TININESS_AFTER_ROUNDING): Likewise.
	* sysdeps/powerpc/soft-fp/sfp-machine.h
	(_FP_TININESS_AFTER_ROUNDING): Likewise.
	* sysdeps/sh/soft-fp/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
	* sysdeps/sparc/sparc32/soft-fp/sfp-machine.h
	(_FP_TININESS_AFTER_ROUNDING): Likewise.
	* sysdeps/sparc/sparc64/soft-fp/sfp-machine.h
	(_FP_TININESS_AFTER_ROUNDING): Likewise.
	* sysdeps/tile/sfp-machine.h (_FP_TININESS_AFTER_ROUNDING):
	Likewise.
2014-02-12 18:27:12 +00:00
argp Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
assert Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
benchtests Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
bits Avoid comma operator warnings. 2014-02-07 15:26:28 -08:00
catgets Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
conf
conform Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
crypt Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
csu Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
ctype Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
debug Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
dirent Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
dlfcn Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
elf Merge MIPS dl-lookup.c into generic file. 2014-02-11 22:33:07 +00:00
gmon Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
gnulib Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
grp Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
gshadow Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
hesiod Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
hurd Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
iconv Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
iconvdata Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
include Remove _BSD_SOURCE and _SVID_SOURCE. 2014-02-11 23:40:07 +00:00
inet Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
intl Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
io Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
libidn Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
libio Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
locale Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
localedata Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
login Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
mach Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
malloc malloc/mtrace.c: Cosmetic cleanup. 2014-02-11 10:02:57 +00:00
manual Remove _BSD_SOURCE and _SVID_SOURCE. 2014-02-11 23:40:07 +00:00
math Remove _BSD_SOURCE and _SVID_SOURCE. 2014-02-11 23:40:07 +00:00
misc Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
nis Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
nptl Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
nptl_db Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
nscd Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
nss Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
po Update Slovenian translations 2014-02-03 10:12:05 +10:00
ports Relocate alpha from ports to libc 2014-02-12 07:00:06 -08:00
posix Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
pwd Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
resolv Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
resource Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
rt Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
scripts scripts/update-copyrights: adjust configure input file suffix 2014-01-01 22:10:54 +10:00
setjmp Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
shadow Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
signal Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
socket Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
soft-fp soft-fp: support after-rounding tininess detection. 2014-02-12 18:27:12 +00:00
stdio-common Fix tst-sscanf and tst-swscanf on 64-bit. 2014-02-11 00:37:53 -08:00
stdlib Remove unused variable from stdlib/setenv.c 2014-02-11 12:43:49 +01:00
streams Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
string Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
sunrpc Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
sysdeps soft-fp: support after-rounding tininess detection. 2014-02-12 18:27:12 +00:00
sysvipc Remove _BSD_SOURCE and _SVID_SOURCE. 2014-02-11 23:40:07 +00:00
termios Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
time Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
timezone tzselect: stop requiring ksh 2014-02-08 06:47:58 -05:00
wcsmbs Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
wctype Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
.gitattributes exempt timezone files from the no-bad-whitespace policy 2009-06-15 18:15:54 +02:00
.gitignore ignore gdb related files 2013-12-27 16:30:50 -05:00
abi-tags * abi-tags (*-.*-syllable.*): New match, with ABI value 5. 2006-01-04 17:14:58 +00:00
aclocal.m4 rename configure.in to configure.ac 2013-10-30 17:32:08 +10:00
BUGS [BZ #5222] 2007-10-28 08:24:07 +00:00
CANCEL-FCT-WAIVE
CANCEL-FILE-WAIVE
ChangeLog soft-fp: support after-rounding tininess detection. 2014-02-12 18:27:12 +00:00
ChangeLog.1
ChangeLog.2
ChangeLog.3
ChangeLog.4
ChangeLog.5 * sysdeps/posix/getaddrinfo.c: Implement configuration file 2006-05-04 06:38:07 +00:00
ChangeLog.6
ChangeLog.7
ChangeLog.8
ChangeLog.9
ChangeLog.10
ChangeLog.11 2.5-18.1 2007-07-12 18:26:36 +00:00
ChangeLog.12 2.5-18.1 2007-07-12 18:26:36 +00:00
ChangeLog.13
ChangeLog.14 Update. 2004-04-20 04:28:00 +00:00
ChangeLog.15 Split out ChangeLog.15 at 2.3 branch point 2005-02-16 07:34:17 +00:00
ChangeLog.16 Fix typo in name 2012-06-21 16:45:27 +02:00
ChangeLog.17 Revert "Sun agreed to a change of the license for the RPC code to a BSD-like license." 2010-06-27 19:34:03 -07:00
config.h.in tst-fanotify: switch to AC_DEFINE 2014-01-04 08:34:01 -05:00
config.make.in Remove --disable-versioning. 2013-09-04 15:25:42 +00:00
configure Set AUTOCONF variable when maintainer-mode is not used 2013-12-16 21:45:27 +10:00
configure.ac Set AUTOCONF variable when maintainer-mode is not used 2013-12-16 21:45:27 +10:00
CONFORMANCE Move __STDC_* predefined macros from features.h to stdc-predef.h. 2012-02-22 12:53:04 +00:00
COPYING Update to latest versions of GPL-2.0 and LGPL-2.1 2013-09-09 12:52:48 +10:00
COPYING.LIB Update to latest versions of GPL-2.0 and LGPL-2.1 2013-09-09 12:52:48 +10:00
cppflags-iterator.mk 2004-03-11 Jeroen Dekkers <jeroen@dekkers.cx> 2004-03-14 19:13:17 +00:00
extra-lib.mk Remove --disable-versioning. 2013-09-04 15:25:42 +00:00
extra-modules.mk
INSTALL Stop partial menu generation in INSTALL file 2013-12-19 11:54:06 +10:00
libc-abis A few more archs have IFUNC support. 2010-03-17 02:43:12 -07:00
LICENSES Expand LICENSES file. 2012-12-05 21:56:15 +00:00
Makeconfig Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
Makefile Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
Makefile.in Add target bench-clean 2013-04-16 14:07:21 +05:30
Makerules abilist-pattern configurability 2014-02-04 09:48:47 -02:00
NAMESPACE
NEWS Update x86_64 libm-test-ulps on AMD family 21h model 1 (bug 16545). 2014-02-12 15:55:10 +00:00
o-iterator.mk
PROJECTS Update. 2004-10-12 06:19:23 +00:00
README Relocate alpha from ports to libc 2014-02-12 07:00:06 -08:00
Rules Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
shlib-versions PowerPC: Change powerpc64le start ABI to 2.17. 2014-02-04 09:49:08 -02:00
test-skeleton.c tests: unify fortification handler logic 2014-02-08 06:58:43 -05:00
version.h Open development for 2.20 2014-02-08 08:10:29 +10:00
Versions.def S/390: Make jmp_buf extendible. 2014-01-07 09:36:31 +01:00
WUR-REPORT * posix/unistd.h (setuid, setreuid, seteuid, setresuid): 2012-08-01 18:12:58 +02:00

This directory contains the sources of the GNU C Library.
See the file "version.h" for what release version you have.

The GNU C Library is the standard system C library for all GNU systems,
and is an important part of what makes up a GNU system.  It provides the
system API for all programs written in C and C-compatible languages such
as C++ and Objective C; the runtime facilities of other programming
languages use the C library to access the underlying operating system.

In GNU/Linux systems, the C library works with the Linux kernel to
implement the operating system behavior seen by user applications.
In GNU/Hurd systems, it works with a microkernel and Hurd servers.

The GNU C Library implements much of the POSIX.1 functionality in the
GNU/Hurd system, using configurations i[4567]86-*-gnu.  The current
GNU/Hurd support requires out-of-tree patches that will eventually be
incorporated into an official GNU C Library release.

When working with Linux kernels, this version of the GNU C Library
requires Linux kernel version 2.6.16 or later.

Also note that the shared version of the libgcc_s library must be
installed for the pthread library to work correctly.

The GNU C Library supports these configurations for using Linux kernels:

	aarch64*-*-linux-gnu
	alpha*-*-linux-gnu
	arm-*-linux-gnueabi
	i[4567]86-*-linux-gnu
	x86_64-*-linux-gnu	Can build either x86_64 or x32
	m68k-*-linux-gnu
	mips-*-linux-gnu
	mips64-*-linux-gnu
	powerpc-*-linux-gnu	Hardware or software floating point, BE only.
	powerpc64*-*-linux-gnu	Big-endian and little-endian.
	s390-*-linux-gnu
	s390x-*-linux-gnu
	sh[34]-*-linux-gnu
	sparc*-*-linux-gnu
	sparc64*-*-linux-gnu
	tilegx-*-linux-gnu
	tilepro-*-linux-gnu

The code for other CPU configurations supported by volunteers outside of
the core glibc maintenance effort is contained in the `ports' add-on,
located in the `ports' subdirectory of the source tree.

	hppa-*-linux-gnu	Not currently functional without patches.
	ia64-*-linux-gnu

If you are interested in doing a port, please contact the glibc
maintainers; see http://www.gnu.org/software/libc/ for more
information.

See the file INSTALL to find out how to configure, build, and install
the GNU C Library.  You might also consider reading the WWW pages for
the C library at http://www.gnu.org/software/libc/.

The GNU C Library is (almost) completely documented by the Texinfo manual
found in the `manual/' subdirectory.  The manual is still being updated
and contains some known errors and omissions; we regret that we do not
have the resources to work on the manual as much as we would like.  For
corrections to the manual, please file a bug in the `manual' component,
following the bug-reporting instructions below.  Please be sure to check
the manual in the current development sources to see if your problem has
already been corrected.

Please see http://www.gnu.org/software/libc/bugs.html for bug reporting
information.  We are now using the Bugzilla system to track all bug reports.
This web page gives detailed information on how to report bugs properly.

The GNU C Library is free software.  See the file COPYING.LIB for copying
conditions, and LICENSES for notices about a few contributions that require
these additional notices to be distributed.  License copyright years may be
listed using range notation, e.g., 2000-2013, indicating that every year in
the range, inclusive, is a copyrightable year that would otherwise be listed
individually.