From ee188d555b8c32ad9704a7440cab400af967292f Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 5 Jun 1996 01:07:21 +0000 Subject: Tue Jun 4 21:01:20 1996 Roland McGrath * sysdeps/mach/hurd/getlogin_r.c: New file. Wed Jun 5 02:11:30 1996 Ulrich Drepper * 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 * 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. --- sysdeps/libm-i387/e_asinl.S | 21 +++++++++++++++++++++ sysdeps/libm-i387/e_atan2l.S | 16 ++++++++++++++++ sysdeps/libm-i387/e_expl.S | 40 ++++++++++++++++++++++++++++++++++++++++ sysdeps/libm-i387/e_fmodl.S | 20 ++++++++++++++++++++ sysdeps/libm-i387/e_log10l.S | 16 ++++++++++++++++ sysdeps/libm-i387/e_logl.S | 16 ++++++++++++++++ sysdeps/libm-i387/e_remainderl.S | 19 +++++++++++++++++++ sysdeps/libm-i387/e_scalbl.S | 16 ++++++++++++++++ sysdeps/libm-i387/e_sqrtl.S | 15 +++++++++++++++ sysdeps/libm-i387/s_atanl.S | 17 +++++++++++++++++ sysdeps/libm-i387/s_cosl.S | 29 +++++++++++++++++++++++++++++ sysdeps/libm-i387/s_finitef.S | 6 +++--- sysdeps/libm-i387/s_ilogbl.S | 24 ++++++++++++++++++++++++ sysdeps/libm-i387/s_log1pl.S | 25 +++++++++++++++++++++++++ sysdeps/libm-i387/s_logbl.S | 15 +++++++++++++++ sysdeps/libm-i387/s_scalbnl.S | 16 ++++++++++++++++ sysdeps/libm-i387/s_sinl.S | 29 +++++++++++++++++++++++++++++ sysdeps/libm-i387/s_tanl.S | 31 +++++++++++++++++++++++++++++++ 18 files changed, 368 insertions(+), 3 deletions(-) create mode 100644 sysdeps/libm-i387/e_asinl.S create mode 100644 sysdeps/libm-i387/e_atan2l.S create mode 100644 sysdeps/libm-i387/e_expl.S create mode 100644 sysdeps/libm-i387/e_fmodl.S create mode 100644 sysdeps/libm-i387/e_log10l.S create mode 100644 sysdeps/libm-i387/e_logl.S create mode 100644 sysdeps/libm-i387/e_remainderl.S create mode 100644 sysdeps/libm-i387/e_scalbl.S create mode 100644 sysdeps/libm-i387/e_sqrtl.S create mode 100644 sysdeps/libm-i387/s_atanl.S create mode 100644 sysdeps/libm-i387/s_cosl.S create mode 100644 sysdeps/libm-i387/s_ilogbl.S create mode 100644 sysdeps/libm-i387/s_log1pl.S create mode 100644 sysdeps/libm-i387/s_logbl.S create mode 100644 sysdeps/libm-i387/s_scalbnl.S create mode 100644 sysdeps/libm-i387/s_sinl.S create mode 100644 sysdeps/libm-i387/s_tanl.S (limited to 'sysdeps/libm-i387') diff --git a/sysdeps/libm-i387/e_asinl.S b/sysdeps/libm-i387/e_asinl.S new file mode 100644 index 0000000000..7a90c3e63a --- /dev/null +++ b/sysdeps/libm-i387/e_asinl.S @@ -0,0 +1,21 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..748571e38e --- /dev/null +++ b/sysdeps/libm-i387/e_atan2l.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..d14089828d --- /dev/null +++ b/sysdeps/libm-i387/e_expl.S @@ -0,0 +1,40 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..75ed17b9e5 --- /dev/null +++ b/sysdeps/libm-i387/e_fmodl.S @@ -0,0 +1,20 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..0a19256933 --- /dev/null +++ b/sysdeps/libm-i387/e_log10l.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..2575d6c6e8 --- /dev/null +++ b/sysdeps/libm-i387/e_logl.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..ce98515167 --- /dev/null +++ b/sysdeps/libm-i387/e_remainderl.S @@ -0,0 +1,19 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..8d5cd3b429 --- /dev/null +++ b/sysdeps/libm-i387/e_scalbl.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..88e5f82a0c --- /dev/null +++ b/sysdeps/libm-i387/e_sqrtl.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..867e60b1c2 --- /dev/null +++ b/sysdeps/libm-i387/s_atanl.S @@ -0,0 +1,17 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..e2c22428b2 --- /dev/null +++ b/sysdeps/libm-i387/s_cosl.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 f842d468b9..28a0a40308 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 0000000000..11c81011c6 --- /dev/null +++ b/sysdeps/libm-i387/s_ilogbl.S @@ -0,0 +1,24 @@ +/* + * Written by J.T. Conklin . + * Changes for long double by Ulrich Drepper + * Public domain. + */ + +#include + +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 0000000000..4a9faf7ba4 --- /dev/null +++ b/sysdeps/libm-i387/s_log1pl.S @@ -0,0 +1,25 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..e72b1fb941 --- /dev/null +++ b/sysdeps/libm-i387/s_logbl.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Changes for long double by Ulrich Drepper + * Public domain. + */ + +#include + +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 0000000000..b5fdf820d3 --- /dev/null +++ b/sysdeps/libm-i387/s_scalbnl.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin . + * Changes for long double by Ulrich Drepper + * Public domain. + */ + +#include + +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 0000000000..03c9c874b9 --- /dev/null +++ b/sysdeps/libm-i387/s_sinl.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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 0000000000..6b1532af9e --- /dev/null +++ b/sysdeps/libm-i387/s_tanl.S @@ -0,0 +1,31 @@ +/* + * Written by J.T. Conklin . + * Public domain. + * + * Adapted for `long double' by Ulrich Drepper . + */ + +#include + +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) -- cgit 1.4.1