summaryrefslogtreecommitdiff
path: root/sysdeps/i386/fpu/s_cosf.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/i386/fpu/s_cosf.S')
-rw-r--r--sysdeps/i386/fpu/s_cosf.S27
1 files changed, 26 insertions, 1 deletions
diff --git a/sysdeps/i386/fpu/s_cosf.S b/sysdeps/i386/fpu/s_cosf.S
index 21f87aa874..578967ad3c 100644
--- a/sysdeps/i386/fpu/s_cosf.S
+++ b/sysdeps/i386/fpu/s_cosf.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_cosf.S,v 1.3 1995/05/08 23:55:16 jtc Exp $")
ENTRY(__cosf)
flds 4(%esp)
- fcos
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fcos
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -25,5 +34,21 @@ ENTRY(__cosf)
fstp %st(1)
fcos
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 (__cosf)
weak_alias (__cosf, cosf)