glibc/sysdeps/powerpc/powerpc32
Joseph Myers 0c25f5b5bb Fix powerpc32 lround, lroundf spurious exceptions (bug 19134).
The powerpc32 implementation of lround and lroundf can produce
spurious exceptions from adding 0.5 then converting to integer.  This
includes "inexact" from the conversion to integer (not allowed for
integer arguments to these functions), and, for larger integer
arguments, "inexact", and "overflow" when rounding upward, from the
addition.  In addition, "inexact" is not allowed together with
"invalid" and so inexact addition must be avoided when the integer
will be out of range of 32-bit long, whether or not the argument is an
integer.

This patch fixes these problems.  As in the powerpc64 llround
implementation, a check is added for too-large arguments; in the
powerpc64 case that means arguments at least 2^52 in magnitude (so
that 0.5 cannot be added exactly), while in this case it means
arguments for which the result would overflow "long".  In those cases
a suitable overflowing value is used for the integer conversion
without adding 0.5, while for smaller arguments it's tested whether
the argument is an integer (by adding and subtracting 2^52 to the
absolute value and comparing with the original absolute value) to
avoid adding 0.5 to integers and generating spurious "inexact".

This code is not used when the power5+ sysdeps directories are used,
as there's a separate power5+ version of these functions..

Tested for powerpc.  This gets test-float (for a default powerpc32
hard-float build without any --with-cpu) back to the point where it
should pass once powerpc ulps are regenerated; test-double still needs
another problem with exceptions fixed to get back to that point (and I
haven't looked lately at what default powerpc64 results are like).

	[BZ #19134]
	* sysdeps/powerpc/powerpc32/fpu/s_lround.S (.LC1): New object.
	(.LC2): Likewise.
	(.LC3): Likewise.
	(__lround): Do not add 0.5 to integer or out-of-range arguments.
2015-10-14 21:13:42 +00:00
..
405 Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
440 Move powerpc ports pieces to libc. 2013-10-04 16:02:33 +00:00
464 Move powerpc ports pieces to libc. 2013-10-04 16:02:33 +00:00
476 Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
970 powerpc: Re-work the Implies structure 2010-06-30 09:57:38 -07:00
a2 Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bits Move bits/atomic.h to atomic-machine.h (bug 14912). 2015-09-11 20:00:19 +00:00
cell Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
e500/nofpu Fix libm feupdateenv namespace (bug 17748). 2015-01-07 19:01:20 +00:00
fpu Fix powerpc32 lround, lroundf spurious exceptions (bug 19134). 2015-10-14 21:13:42 +00:00
power4 powerpc: Fix memchr for powerpc32. 2015-08-21 17:06:06 -03:00
power5 Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
power5+ Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
power6 Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
power6x Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
power7 Use libc_hidden_proto / libc_hidden_def with __strnlen. 2015-06-02 20:24:25 +00:00
power8 PowerPC: Adjust multiarch Implies for PowerPC32 2013-12-06 05:47:05 -06:00
__longjmp-common.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
__longjmp.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
add_n.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
addmul_1.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
atomic-machine.h Move bits/atomic.h to atomic-machine.h (bug 14912). 2015-09-11 20:00:19 +00:00
backtrace.c libc-vdso.h place consolidation 2015-04-20 08:51:17 -03:00
bsd-_setjmp.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bsd-setjmp.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
bzero.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
compat-ppc-mcount.S Fix missing _mcount@GLIBC_2.0 on powerpc32 2012-07-06 23:43:56 +02:00
configure powerpc: drop R_PPC_REL16 check 2015-02-10 06:09:22 -05:00
configure.ac powerpc: drop R_PPC_REL16 check 2015-02-10 06:09:22 -05:00
crti.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
crtn.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-dtprocnum.h * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_runtime_setup): 2005-06-17 23:11:35 +00:00
dl-irel.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-machine.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-machine.h powerpc __tls_get_addr call optimization 2015-03-25 15:53:47 +10:30
dl-start.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-trampoline.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
gprrest0.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
gprrest1.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
gprsave0.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
gprsave1.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Implies 2006-01-27 Dwayne Grant McConnell <decimal@us.ibm.com> 2006-01-28 00:15:15 +00:00
libgcc-compat.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
lshift.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Makefile Move powerpc ports pieces to libc. 2013-10-04 16:02:33 +00:00
mcount.c PowerPC ugly symbol versioning 2013-10-04 10:38:28 +09:30
memset.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
mul_1.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ppc-mcount.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
register-dump.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
rshift.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
rtld-memset.c powerpc: Use generic memset for RTLD for ppc32/64 2010-09-29 12:21:14 -04:00
setjmp-common.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setjmp.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
stackguard-macros.h BZ #15754: CVE-2013-4788 2013-09-23 00:52:09 -04:00
start.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
stpcpy.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strchr.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcmp.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strcpy.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strlen.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
strncmp.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sub_n.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
submul_1.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sysdep.h powerpc: Fix tabort usage in syscalls 2015-08-25 13:45:56 -03:00
tls-macros.h Remove HAVE_ASM_PPC_REL16 references 2015-03-23 15:33:59 +10:30
tst-audit.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Versions Move __mcount_internal from GLIBC_PRIVATE to GLIBC_2.16 2012-06-02 21:21:15 +02:00