diff options
author | Roland McGrath <roland@gnu.org> | 1996-06-05 01:07:21 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-06-05 01:07:21 +0000 |
commit | ee188d555b8c32ad9704a7440cab400af967292f (patch) | |
tree | 037a4821d35c11f2bbf89e7e71dc43dada67b166 /sysdeps/libm-i387 | |
parent | f68b86cc7bdcee246296d49f3a3318c1b97693f0 (diff) | |
download | glibc-ee188d555b8c32ad9704a7440cab400af967292f.zip glibc-ee188d555b8c32ad9704a7440cab400af967292f.tar.gz glibc-ee188d555b8c32ad9704a7440cab400af967292f.tar.bz2 |
Tue Jun 4 21:01:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/getlogin_r.c: New file.
Wed Jun 5 02:11:30 1996 Ulrich Drepper <drepper@cygnus.com>
* io/Makefile (routines): Add ttyname_r.
* resolv/res_debug.c, resolv/resolv.h: Update from bind-4.3.4-T4A.
* sysdeps/libm-i387/e_asinl.S, sysdeps/libm-i387/e_atan2l.S,
sysdeps/libm-i387/e_expl.S, sysdeps/libm-i387/e_fmodl.S,
sysdeps/libm-i387/e_log10l.S, sysdeps/libm-i387/e_logl.S,
sysdeps/libm-i387/e_remainderl.S, sysdeps/libm-i387/e_scalbl.S,
sysdeps/libm-i387/e_sqrtl.S, sysdeps/libm-i387/s_atanl.S,
sysdeps/libm-i387/s_cosl.S, sysdeps/libm-i387/s_ilogbl.S,
sysdeps/libm-i387/s_log1pl.S, sysdeps/libm-i387/s_logbl.S,
sysdeps/libm-i387/s_scalbnl.S, sysdeps/libm-i387/s_sinl.S,
sysdeps/libm-i387/s_tanl.S: New files. i387 assembler versions
of `long double' math functions.
* sysdeps/libm-ieee754/k_standard.c: Add handling for errors
in long double functions.
* sysdeps/libm-ieee754/s_ilogbl.c, sysdeps/libm-ieee754/s_logbl.c,
sysdeps/libm-ieee754/s_modfl.c: New files. Generic versions
of `long double' math functions.
* sysdeps/libm-ieee754/s_isinf.c [NO_LONG_DOUBLE]: Add string
alias for __isinfl.
* sysdeps/libm-ieee754/w_acoshl.c, sysdeps/libm-ieee754/w_acosl.c,
sysdeps/libm-ieee754/w_asinl.c, sysdeps/libm-ieee754/w_atan2l.c,
sysdeps/libm-ieee754/w_atanhl.c, sysdeps/libm-ieee754/w_cabsl.c,
sysdeps/libm-ieee754/w_coshl.c, sysdeps/libm-ieee754/w_dreml.c,
sysdeps/libm-ieee754/w_expl.c, sysdeps/libm-ieee754/w_fmodl.c,
sysdeps/libm-ieee754/w_gammal.c, sysdeps/libm-ieee754/w_gammal_r.c,
sysdeps/libm-ieee754/w_hypotl.c, sysdeps/libm-ieee754/w_j0l.c,
sysdeps/libm-ieee754/w_j1l.c, sysdeps/libm-ieee754/w_jnl.c,
sysdeps/libm-ieee754/w_lgammal.c, sysdeps/libm-ieee754/w_lgammal_r.c,
sysdeps/libm-ieee754/w_log10l.c, sysdeps/libm-ieee754/w_logl.c,
sysdeps/libm-ieee754/w_powl.c, sysdeps/libm-ieee754/w_remainderl.c,
sysdeps/libm-ieee754/w_scalbl.c, sysdeps/libm-ieee754/w_sinhl.c,
sysdeps/libm-ieee754/w_sqrtl.c: New files. Wrapper functions
around long double function implementations.
* sysdeps/posix/ttyname_r.c (ttyname_r): Use _D_EXACT_NAMLEN
to determine length of directory entry name.
* posix/Makefile (routines): Add getlogin_r.
* posix/unistd.h: Add prototype for getlogin_r.
* sysdeps/stub/getlogin_r.c: New file. Reentrant version of
getlogin function, specified in P1003.1c/D6. Stub version.
* sysdeps/unix/getlogin.c (getlogin): Use ttyname_r instead of
ttyname. This avoids saving and restoring the old content.
Also use setutent_r, getutline_r and endutent_r instead of
accing UTMP file directly.
* sysdeps/unix/getlogin_r.c: New file. Reentrant version of
getlogin function, specified in P1003.1c/D6.
Tue Jun 4 20:10:09 1996 J.T. Conklin <jtc@cygnus.com>
* sysdeps/libm-i387/s_finitef.S: Fix mask for exponent.
* elf/dl-lookup.c (_dl_lookup_symbol): Grok magical undefined symbols
_GNU_libc_dl_{open,close,symbol} and resolve them to dl functions.
* elf/rtld.c (rtld_map): Renamed to _dl_rtld_map, made global.
* elf/link.h: Declare _dl_rtld_map.
* elf/dl-lookup.c (_dl_symbol_value): New function.
* elf/link.h: Declare it.
stdio-common/vfscanf.c: Prepare for reentrant libio.
Used in reentrant libio.
Diffstat (limited to 'sysdeps/libm-i387')
-rw-r--r-- | sysdeps/libm-i387/e_asinl.S | 21 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_atan2l.S | 16 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_expl.S | 40 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_fmodl.S | 20 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_log10l.S | 16 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_logl.S | 16 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_remainderl.S | 19 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_scalbl.S | 16 | ||||
-rw-r--r-- | sysdeps/libm-i387/e_sqrtl.S | 15 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_atanl.S | 17 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_cosl.S | 29 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_finitef.S | 6 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_ilogbl.S | 24 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_log1pl.S | 25 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_logbl.S | 15 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_scalbnl.S | 16 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_sinl.S | 29 | ||||
-rw-r--r-- | sysdeps/libm-i387/s_tanl.S | 31 |
18 files changed, 368 insertions, 3 deletions
diff --git a/sysdeps/libm-i387/e_asinl.S b/sysdeps/libm-i387/e_asinl.S new file mode 100644 index 0000000..7a90c3e --- /dev/null +++ b/sysdeps/libm-i387/e_asinl.S @@ -0,0 +1,21 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +/* asinl = atanl (x / sqrtl(1 - x^2)) */ +ENTRY(__ieee754_asinl) + fldt 4(%esp) /* x */ + fst %st(1) + fmul %st(0) /* x^2 */ + fld1 + fsubp /* 1 - x^2 */ + fsqrt /* sqrt (1 - x^2) */ + fpatan + ret diff --git a/sysdeps/libm-i387/e_atan2l.S b/sysdeps/libm-i387/e_atan2l.S new file mode 100644 index 0000000..748571e --- /dev/null +++ b/sysdeps/libm-i387/e_atan2l.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ieee754_atan2l) + fldt 4(%esp) + fldt 16(%esp) + fpatan + ret diff --git a/sysdeps/libm-i387/e_expl.S b/sysdeps/libm-i387/e_expl.S new file mode 100644 index 0000000..d140898 --- /dev/null +++ b/sysdeps/libm-i387/e_expl.S @@ -0,0 +1,40 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +/* e^x = 2^(x * log2l(e)) */ +ENTRY(__ieee754_expl) + fldt 4(%esp) +/* I added the following ugly construct because expl(+-Inf) resulted + in NaN. The ugliness results from the bright minds at Intel. + -- drepper@cygnus.com. */ + fxam /* Is NaN or +-Inf? */ + fstsw %ax + sahf + jnc .LnoInfNaN /* No, jump. */ + jp .LisInf /* Is +-Inf, jump. */ +.LnoInfNaN: + fldl2e + fmulp /* x * log2(e) */ + fstl %st(1) + frndint /* int(x * log2(e)) */ + fstl %st(2) + fsubrp /* fract(x * log2(e)) */ + f2xm1 /* 2^(fract(x * log2(e))) - 1 */ + fld1 + faddp /* 2^(fract(x * log2(e))) */ + fscale /* e^x */ + ret + +.LisInf: + andb $2, %ah /* Test sign. */ + jz .LpInf /* If positive, jump. */ + fldz /* Set result to 0. */ +.LpInf: ret diff --git a/sysdeps/libm-i387/e_fmodl.S b/sysdeps/libm-i387/e_fmodl.S new file mode 100644 index 0000000..75ed17b --- /dev/null +++ b/sysdeps/libm-i387/e_fmodl.S @@ -0,0 +1,20 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ieee754_fmodl) + fldt 16(%esp) + fldt 4(%esp) +1: fprem + fstsw %ax + sahf + jp 1b + fstpl %st(1) + ret diff --git a/sysdeps/libm-i387/e_log10l.S b/sysdeps/libm-i387/e_log10l.S new file mode 100644 index 0000000..0a19256 --- /dev/null +++ b/sysdeps/libm-i387/e_log10l.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ieee754_log10l) + fldlg2 + fldt 4(%esp) + fyl2x + ret diff --git a/sysdeps/libm-i387/e_logl.S b/sysdeps/libm-i387/e_logl.S new file mode 100644 index 0000000..2575d6c --- /dev/null +++ b/sysdeps/libm-i387/e_logl.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ieee754_logl) + fldln2 + fldt 4(%esp) + fyl2x + ret diff --git a/sysdeps/libm-i387/e_remainderl.S b/sysdeps/libm-i387/e_remainderl.S new file mode 100644 index 0000000..ce98515 --- /dev/null +++ b/sysdeps/libm-i387/e_remainderl.S @@ -0,0 +1,19 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ieee754_remainderl) + fldt 16(%esp) + fldt 4(%esp) +1: fprem1 + fstsw %ax + sahf + jp 1b + ret diff --git a/sysdeps/libm-i387/e_scalbl.S b/sysdeps/libm-i387/e_scalbl.S new file mode 100644 index 0000000..8d5cd3b --- /dev/null +++ b/sysdeps/libm-i387/e_scalbl.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ieee754_scalbl) + fldt 16(%esp) + fldt 4(%esp) + fscale + ret diff --git a/sysdeps/libm-i387/e_sqrtl.S b/sysdeps/libm-i387/e_sqrtl.S new file mode 100644 index 0000000..88e5f82 --- /dev/null +++ b/sysdeps/libm-i387/e_sqrtl.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ieee754_sqrtl) + fldt 4(%esp) + fsqrt + ret diff --git a/sysdeps/libm-i387/s_atanl.S b/sysdeps/libm-i387/s_atanl.S new file mode 100644 index 0000000..867e60b --- /dev/null +++ b/sysdeps/libm-i387/s_atanl.S @@ -0,0 +1,17 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__atanl) + fldt 4(%esp) + fld1 + fpatan + ret +weak_alias (__atanl, atanl) diff --git a/sysdeps/libm-i387/s_cosl.S b/sysdeps/libm-i387/s_cosl.S new file mode 100644 index 0000000..e2c2242 --- /dev/null +++ b/sysdeps/libm-i387/s_cosl.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__cosl) + fldt 4(%esp) + fcos + fnstsw %ax + andw $0x400,%ax + jnz 1f + ret +1: fldpi + fadd %st(0) + fxch %st(1) +2: fprem1 + fnstsw %ax + andw $0x400,%ax + jnz 2b + fstp %st(1) + fcos + ret +weak_alias (__cosl, cosl) diff --git a/sysdeps/libm-i387/s_finitef.S b/sysdeps/libm-i387/s_finitef.S index f842d46..28a0a40 100644 --- a/sysdeps/libm-i387/s_finitef.S +++ b/sysdeps/libm-i387/s_finitef.S @@ -9,9 +9,9 @@ RCSID("$NetBSD: s_finitef.S,v 1.3 1995/05/09 00:00:02 jtc Exp $") ENTRY(__finitef) movl 4(%esp),%eax - andl $0x7ff00000, %eax - cmpl $0x7ff00000, %eax - setnel %al + andl $0x7f800000, %eax + cmpl $0x7f800000, %eax + setne %al andl $0x000000ff, %eax ret weak_alias (__finitef, finitef) diff --git a/sysdeps/libm-i387/s_ilogbl.S b/sysdeps/libm-i387/s_ilogbl.S new file mode 100644 index 0000000..11c8101 --- /dev/null +++ b/sysdeps/libm-i387/s_ilogbl.S @@ -0,0 +1,24 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Changes for long double by Ulrich Drepper <drepper@cygnus.com> + * Public domain. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__ilogbl) + pushl %ebp + movl %esp,%ebp + subl $4,%esp + + fldt 8(%ebp) + fxtract + + fistpl -4(%ebp) + movl -4(%ebp),%eax + + leave + ret +weak_alias (__ilogbl, ilogbl) diff --git a/sysdeps/libm-i387/s_log1pl.S b/sysdeps/libm-i387/s_log1pl.S new file mode 100644 index 0000000..4a9faf7 --- /dev/null +++ b/sysdeps/libm-i387/s_log1pl.S @@ -0,0 +1,25 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +/* + * Since the fyl2xp1 instruction has such a limited range: + * -(1 - (sqrt(2) / 2)) <= x <= sqrt(2) - 1 + * it's not worth trying to use it. + */ + +ENTRY(__log1pl) + fldln2 + fldt 4(%esp) + fld1 + faddp + fyl2x + ret +weak_alias (__log1pl, log1pl) diff --git a/sysdeps/libm-i387/s_logbl.S b/sysdeps/libm-i387/s_logbl.S new file mode 100644 index 0000000..e72b1fb --- /dev/null +++ b/sysdeps/libm-i387/s_logbl.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Changes for long double by Ulrich Drepper <drepper@cygnus.com> + * Public domain. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__logbl) + fldt 4(%esp) + fxtract + ret +weak_alias (__logbl, logbl) diff --git a/sysdeps/libm-i387/s_scalbnl.S b/sysdeps/libm-i387/s_scalbnl.S new file mode 100644 index 0000000..b5fdf82 --- /dev/null +++ b/sysdeps/libm-i387/s_scalbnl.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Changes for long double by Ulrich Drepper <drepper@cygnus.com> + * Public domain. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__scalbnl) + fildl 16(%esp) + fldt 4(%esp) + fscale + ret +weak_alias (__scalbnl, scalbnl) diff --git a/sysdeps/libm-i387/s_sinl.S b/sysdeps/libm-i387/s_sinl.S new file mode 100644 index 0000000..03c9c87 --- /dev/null +++ b/sysdeps/libm-i387/s_sinl.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__sinl) + fldt 4(%esp) + fsin + fnstsw %ax + andw $0x400,%ax + jnz 1f + ret +1: fldpi + fadd %st(0) + fxch %st(1) +2: fprem1 + fnstsw %ax + andw $0x400,%ax + jnz 2b + fstp %st(1) + fsin + ret +weak_alias (__sinl, sinl) diff --git a/sysdeps/libm-i387/s_tanl.S b/sysdeps/libm-i387/s_tanl.S new file mode 100644 index 0000000..6b1532a --- /dev/null +++ b/sysdeps/libm-i387/s_tanl.S @@ -0,0 +1,31 @@ +/* + * Written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>. + */ + +#include <machine/asm.h> + +RCSID("$NetBSD: $") + +ENTRY(__tanl) + fldt 4(%esp) + fptan + fnstsw %ax + andw $0x400,%ax + jnz 1f + fstp %st(0) + ret +1: fldpi + fadd %st(0) + fxch %st(1) +2: fprem1 + fstsw %ax + andw $0x400,%ax + jnz 2b + fstp %st(1) + fptan + fstp %st(0) + ret +weak_alias (__tanl, tanl) |