This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.10-358-gb7805d0
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 20 Oct 2009 04:23:46 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.10-358-gb7805d0
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via b7805d0ba8948fcf5e406bf52530d9aba99f5954 (commit)
from a0902db9fe8f4cfc6b0b0344558166f5b230b806 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b7805d0ba8948fcf5e406bf52530d9aba99f5954
commit b7805d0ba8948fcf5e406bf52530d9aba99f5954
Author: Andreas Schwab <schwab@redhat.com>
Date: Mon Oct 19 21:23:15 2009 -0700
Correct errno handling in expm1.
diff --git a/ChangeLog b/ChangeLog
index 700e346..2857d88 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-10-19 Andreas Schwab <schwab@redhat.com>
+
+ * include/math.h: Add hidden protos for __exp/__expf/__expl.
+ * sysdeps/ieee754/dbl-64/w_exp.c: Add hidden alias.
+ * sysdeps/ieee754/flt-32/w_expf.c: Likewise.
+ * sysdeps/ieee754/ldbl-96/w_expl.c: Likewise.
+ * sysdeps/i386/fpu/s_expm1.S: Call __exp to handle overflow.
+ * sysdeps/i386/fpu/s_expm1f.S: Call __expf to handle overflow.
+ * sysdeps/i386/fpu/s_expm1l.S: Call __expl instead of
+ __ieee751_expl to handle overflow.
+
2009-10-14 David S. Miller <davem@davemloft.net>
* sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S: New file.
diff --git a/include/math.h b/include/math.h
index 1005804..eb29ef1 100644
--- a/include/math.h
+++ b/include/math.h
@@ -22,9 +22,12 @@ hidden_proto (__isnanl)
libm_hidden_proto (__fpclassify)
libm_hidden_proto (__fpclassifyf)
+libm_hidden_proto (__exp)
+libm_hidden_proto (__expf)
# ifndef __NO_LONG_DOUBLE_MATH
libm_hidden_proto (__fpclassifyl)
+libm_hidden_proto (__expl)
libm_hidden_proto (__expm1l)
# endif
diff --git a/sysdeps/i386/fpu/s_expm1.S b/sysdeps/i386/fpu/s_expm1.S
index e761183..c690a45 100644
--- a/sysdeps/i386/fpu/s_expm1.S
+++ b/sysdeps/i386/fpu/s_expm1.S
@@ -22,6 +22,7 @@
/* Using: e^x - 1 = 2^(x * log2(e)) - 1 */
+#include <sysdep.h>
#include <machine/asm.h>
#ifdef __ELF__
@@ -48,6 +49,11 @@ l2e: .tfloat 1.442695040888963407359924681002
.text
ENTRY(__expm1)
+ movzwl 4+6(%esp), %eax
+ xorb $0x80, %ah // invert sign bit (now 1 is "positive")
+ cmpl $0xc086, %eax // is num >= 704?
+ jae HIDDEN_JUMPTARGET (__exp)
+
fldl 4(%esp) // x
fxam // Is NaN or +-Inf?
fstsw %ax
diff --git a/sysdeps/i386/fpu/s_expm1f.S b/sysdeps/i386/fpu/s_expm1f.S
index 88adb75..8645107 100644
--- a/sysdeps/i386/fpu/s_expm1f.S
+++ b/sysdeps/i386/fpu/s_expm1f.S
@@ -22,6 +22,7 @@
/* Using: e^x - 1 = 2^(x * log2(e)) - 1 */
+#include <sysdep.h>
#include <machine/asm.h>
#ifdef __ELF__
@@ -48,6 +49,11 @@ l2e: .tfloat 1.442695040888963407359924681002
.text
ENTRY(__expm1f)
+ movzwl 4+2(%esp), %eax
+ xorb $0x80, %ah // invert sign bit (now 1 is "positive")
+ cmpl $0xc2b1, %eax // is num >= 88.5?
+ jae HIDDEN_JUMPTARGET (__expf)
+
flds 4(%esp) // x
fxam // Is NaN or +-Inf?
fstsw %ax
diff --git a/sysdeps/i386/fpu/s_expm1l.S b/sysdeps/i386/fpu/s_expm1l.S
index b69b22b..60b5b82 100644
--- a/sysdeps/i386/fpu/s_expm1l.S
+++ b/sysdeps/i386/fpu/s_expm1l.S
@@ -22,6 +22,7 @@
/* Using: e^x - 1 = 2^(x * log2(e)) - 1 */
+#include <sysdep.h>
#include <machine/asm.h>
#ifdef __ELF__
@@ -51,7 +52,7 @@ 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)
+ jae HIDDEN_JUMPTARGET (__expl) // (if num is denormal, it is at least >= 64.0)
fldt 4(%esp) // x
fxam // Is NaN or +-Inf?
diff --git a/sysdeps/ieee754/dbl-64/w_exp.c b/sysdeps/ieee754/dbl-64/w_exp.c
index 445c578..1216492 100644
--- a/sysdeps/ieee754/dbl-64/w_exp.c
+++ b/sysdeps/ieee754/dbl-64/w_exp.c
@@ -51,6 +51,7 @@ u_threshold= -7.45133219101941108420e+02; /* 0xc0874910, 0xD52D3051 */
return z;
#endif
}
+hidden_def (__exp)
weak_alias (__exp, exp)
#ifdef NO_LONG_DOUBLE
strong_alias (__exp, __expl)
diff --git a/sysdeps/ieee754/flt-32/w_expf.c b/sysdeps/ieee754/flt-32/w_expf.c
index 4ba21c7..83b268f 100644
--- a/sysdeps/ieee754/flt-32/w_expf.c
+++ b/sysdeps/ieee754/flt-32/w_expf.c
@@ -56,4 +56,5 @@ u_threshold= -1.0397208405e+02; /* 0xc2cff1b5 */
return z;
#endif
}
+hidden_def (__expf)
weak_alias (__expf, expf)
diff --git a/sysdeps/ieee754/ldbl-96/w_expl.c b/sysdeps/ieee754/ldbl-96/w_expl.c
index b8152ce..53bb143 100644
--- a/sysdeps/ieee754/ldbl-96/w_expl.c
+++ b/sysdeps/ieee754/ldbl-96/w_expl.c
@@ -57,4 +57,5 @@ u_threshold= -1.140019167866942050398521670162263001513e4;
return z;
#endif
}
+hidden_def (__expl)
weak_alias (__expl, expl)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 11 +++++++++++
include/math.h | 3 +++
sysdeps/i386/fpu/s_expm1.S | 6 ++++++
sysdeps/i386/fpu/s_expm1f.S | 6 ++++++
sysdeps/i386/fpu/s_expm1l.S | 3 ++-
sysdeps/ieee754/dbl-64/w_exp.c | 1 +
sysdeps/ieee754/flt-32/w_expf.c | 1 +
sysdeps/ieee754/ldbl-96/w_expl.c | 1 +
8 files changed, 31 insertions(+), 1 deletions(-)
hooks/post-receive
--
GNU C Library master sources