diff options
Diffstat (limited to 'sysdeps/i386/fpu/s_sinf.S')
-rw-r--r-- | sysdeps/i386/fpu/s_sinf.S | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/sysdeps/i386/fpu/s_sinf.S b/sysdeps/i386/fpu/s_sinf.S index 5ca45f52e2..67621f70f2 100644 --- a/sysdeps/i386/fpu/s_sinf.S +++ b/sysdeps/i386/fpu/s_sinf.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_sinf.S,v 1.3 1995/05/09 00:27:53 jtc Exp $") ENTRY(__sinf) flds 4(%esp) - fsin + fxam + fstsw %ax + movb $0x45, %dh + andb %ah, %dh + cmpb $0x05, %dh + je 3f +4: fsin fnstsw %ax testl $0x400,%eax jnz 1f @@ -25,5 +34,21 @@ ENTRY(__sinf) fstp %st(1) fsin 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 (__sinf) weak_alias (__sinf, sinf) |