aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/x86_64')
-rw-r--r--sysdeps/x86_64/fpu/s_cosl.S16
-rw-r--r--sysdeps/x86_64/fpu/s_sinl.S14
2 files changed, 26 insertions, 4 deletions
diff --git a/sysdeps/x86_64/fpu/s_cosl.S b/sysdeps/x86_64/fpu/s_cosl.S
index 6636fb5ec6..6921cda567 100644
--- a/sysdeps/x86_64/fpu/s_cosl.S
+++ b/sysdeps/x86_64/fpu/s_cosl.S
@@ -4,15 +4,22 @@
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
* Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
-RCSID("$NetBSD: $")
-
ENTRY(__cosl)
fldt 8(%rsp)
- fcos
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fcos
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -28,5 +35,8 @@ ENTRY(__cosl)
fstp %st(1)
fcos
ret
+3: call __errno_location@PLT
+ movl $EDOM, (%rax)
+ jmp 4b
END (__cosl)
weak_alias (__cosl, cosl)
diff --git a/sysdeps/x86_64/fpu/s_sinl.S b/sysdeps/x86_64/fpu/s_sinl.S
index 181f112f4f..79fc4af95b 100644
--- a/sysdeps/x86_64/fpu/s_sinl.S
+++ b/sysdeps/x86_64/fpu/s_sinl.S
@@ -4,13 +4,22 @@
*
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
* Adapted for x86-64 by Andreas Jaeger <aj@suse.de>.
+ * Fixed errno handling by Ulrich Drepper <drepper@redhat.com>.
*/
+#define __need_Emath
+#include <bits/errno.h>
#include <machine/asm.h>
ENTRY(__sinl)
fldt 8(%rsp)
- fsin
+ fxam
+ fstsw %ax
+ movb $0x45, %dh
+ andb %ah, %dh
+ cmpb $0x05, %dh
+ je 3f
+4: fsin
fnstsw %ax
testl $0x400,%eax
jnz 1f
@@ -26,5 +35,8 @@ ENTRY(__sinl)
fstp %st(1)
fsin
ret
+3: call __errno_location@PLT
+ movl $EDOM, (%rax)
+ jmp 4b
END (__sinl)
weak_alias (__sinl, sinl)