aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu/s_tanl.S
diff options
context:
space:
mode:
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)