aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu/s_tanl.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2009-04-26 05:42:49 +0000
committerUlrich Drepper <drepper@redhat.com>2009-04-26 05:42:49 +0000
commit337c270829f7088949ba0c96fffa6326fde17f78 (patch)
tree156108c0cf719838f421f4b30116ad8f3181056f /sysdeps/i386/fpu/s_tanl.S
parent002a604fd61d1d3b8d82a5a85959ba4ebd210aec (diff)
downloadglibc-337c270829f7088949ba0c96fffa6326fde17f78.tar
glibc-337c270829f7088949ba0c96fffa6326fde17f78.tar.gz
glibc-337c270829f7088949ba0c96fffa6326fde17f78.tar.bz2
glibc-337c270829f7088949ba0c96fffa6326fde17f78.zip
* sysdeps/i386/fpu/s_tan.S: Set errno for ±Inf.
* sysdeps/i386/fpu/s_tanf.S: Likewise. * sysdeps/i386/fpu/s_tanl.S: Likewise. * sysdeps/ieee754/dbl-64/s_tan.c: Likewise. * sysdeps/ieee754/flt-32/s_tanf.c: Likewise. * sysdeps/x86_64/fpu/s_tanl.S: Likewise. * math/libm-test.inc: Add tests for errno after tan calls with ±Inf.
Diffstat (limited to 'sysdeps/i386/fpu/s_tanl.S')
-rw-r--r--sysdeps/i386/fpu/s_tanl.S29
1 files changed, 26 insertions, 3 deletions
diff --git a/sysdeps/i386/fpu/s_tanl.S b/sysdeps/i386/fpu/s_tanl.S
index f2bdd6a605..151b77113f 100644
--- a/sysdeps/i386/fpu/s_tanl.S
+++ b/sysdeps/i386/fpu/s_tanl.S
@@ -3,15 +3,22 @@
* Public domain.
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
-RCSID("$NetBSD: $")
-
ENTRY(__tanl)
fldt 4(%esp)
- fptan
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fptan
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -28,5 +35,21 @@ ENTRY(__tanl)
fptan
fstp %st(0)
ret
+3:
+#ifdef PIC
+ pushl %ebx
+ cfi_adjust_cfa_offset (4)
+ cfi_rel_offset (ebx, 0)
+ LOAD_PIC_REG (bx)
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+ popl %ebx
+ cfi_adjust_cfa_offset (-4)
+ cfi_restore (ebx)
+#else
+ call __errno_location@PLT
+ movl $EDOM, (%eax)
+#endif
+ jmp 4b
END (__tanl)
weak_alias (__tanl, tanl)