about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2008-08-05 22:08:42 +0000
committerUlrich Drepper <drepper@redhat.com>2008-08-05 22:08:42 +0000
commit9523fd28069af5a1045360cdb990257b595006ee (patch)
tree79ea9dd83fe4a7a994c976ed78d372a969a494a8 /sysdeps
parentc400c931b8285d05c8b99918e7bab2d6b3f21f30 (diff)
downloadglibc-9523fd28069af5a1045360cdb990257b595006ee.tar.gz
glibc-9523fd28069af5a1045360cdb990257b595006ee.tar.xz
glibc-9523fd28069af5a1045360cdb990257b595006ee.zip
* sysdeps/i386/fpu/s_expm1l.S: Simply use exp implementation for large
	parameters.
	* sysdeps/x86_64/fpu/s_expm1l.S: Likewise.
	Patch by Denys Vlasenko <dvlasenk@redhat.com>.

	* nscd/connections.c (nscd_init): Typo in preprocessor directive.
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/i386/fpu/s_expm1l.S7
-rw-r--r--sysdeps/unix/sysv/linux/clock_getres.c6
-rw-r--r--sysdeps/x86_64/fpu/s_expm1l.S7
3 files changed, 15 insertions, 5 deletions
diff --git a/sysdeps/i386/fpu/s_expm1l.S b/sysdeps/i386/fpu/s_expm1l.S
index 2dc379b790..b69b22bc62 100644
--- a/sysdeps/i386/fpu/s_expm1l.S
+++ b/sysdeps/i386/fpu/s_expm1l.S
@@ -1,5 +1,5 @@
 /* ix87 specific implementation of exp(x)-1.
-   Copyright (C) 1996, 1997, 2002, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 2002, 2005, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
    Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
@@ -48,6 +48,11 @@ l2e:	.tfloat 1.442695040888963407359924681002
 
 	.text
 ENTRY(__expm1l)
+	movzwl	4+8(%esp), %eax	// load sign bit and 15-bit exponent
+	xorb	$0x80, %ah	// invert sign bit (now 1 is "positive")
+	cmpl	$0xc006, %eax	// is num positive and exp >= 6 (number is >= 128.0)?
+	jae     __ieee754_expl	// (if num is denormal, it is at least >= 64.0)
+
 	fldt	4(%esp)		// x
 	fxam			// Is NaN or +-Inf?
 	fstsw	%ax
diff --git a/sysdeps/unix/sysv/linux/clock_getres.c b/sysdeps/unix/sysv/linux/clock_getres.c
index 813d3ebbf9..581ff22c7c 100644
--- a/sysdeps/unix/sysv/linux/clock_getres.c
+++ b/sysdeps/unix/sysv/linux/clock_getres.c
@@ -1,5 +1,5 @@
 /* clock_getres -- Get the resolution of a POSIX clockid_t.  Linux version.
-   Copyright (C) 2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 2003,2004,2005,2006, 2008 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
@@ -121,7 +121,7 @@ maybe_syscall_getres_cpu (clockid_t clock_id, struct timespec *res)
 	return 0;
 
       e = INTERNAL_SYSCALL_ERRNO (r, err);
-# ifndef __ASSUME_POSIX_TIMERS
+#  ifndef __ASSUME_POSIX_TIMERS
       if (e == ENOSYS)
 	{
 	  __libc_missing_posix_timers = 1;
@@ -129,7 +129,7 @@ maybe_syscall_getres_cpu (clockid_t clock_id, struct timespec *res)
 	  e = EINVAL;
 	}
       else
-# endif
+#  endif
 	{
 	  if (e == EINVAL)
 	    {
diff --git a/sysdeps/x86_64/fpu/s_expm1l.S b/sysdeps/x86_64/fpu/s_expm1l.S
index b4f5a3efda..05a1bfcce1 100644
--- a/sysdeps/x86_64/fpu/s_expm1l.S
+++ b/sysdeps/x86_64/fpu/s_expm1l.S
@@ -1,5 +1,5 @@
 /* ix87 specific implementation of exp(x)-1.
-   Copyright (C) 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 2001, 2002, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
    Based on code by John C. Bowman <bowman@ipp-garching.mpg.de>.
@@ -48,6 +48,11 @@ l2e:	.tfloat 1.442695040888963407359924681002
 
 	.text
 ENTRY(__expm1l)
+	movzwl	8+8(%rsp), %eax	// load sign bit and 15-bit exponent
+	xorb	$0x80, %ah	// invert sign bit (now 1 is "positive")
+	cmpl	$0xc006, %eax	// is num positive and exp >= 6 (number is >= 128.0)?
+	jae     __ieee754_expl	// (if num is denormal, it is at least >= 64.0)
+
 	fldt	8(%rsp)		// x
 	fxam			// Is NaN or +-Inf?
 	fstsw	%ax