about summary refs log tree commit diff
path: root/sysdeps/i386/fpu/s_tanf.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/fpu/s_tanf.S')
-rw-r--r--sysdeps/i386/fpu/s_tanf.S27
1 files changed, 26 insertions, 1 deletions
diff --git a/sysdeps/i386/fpu/s_tanf.S b/sysdeps/i386/fpu/s_tanf.S
index 355dff9c8d..74bc22fceb 100644
--- a/sysdeps/i386/fpu/s_tanf.S
+++ b/sysdeps/i386/fpu/s_tanf.S
@@ -1,15 +1,24 @@
 /*
  * Written by J.T. Conklin <jtc@netbsd.org>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
  * Public domain.
  */
 
+#define __need_Emath
+#include <bits/errno.h>
 #include <machine/asm.h>
 
 RCSID("$NetBSD: s_tanf.S,v 1.3 1995/05/09 00:31:09 jtc Exp $")
 
 ENTRY(__tanf)
 	flds	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
@@ -26,5 +35,21 @@ ENTRY(__tanf)
 	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 (__tanf)
 weak_alias (__tanf, tanf)