mirror of git://sourceware.org/git/glibc.git
update from main archive 961229
Mon Dec 30 01:32:59 1996 Ulrich Drepper <drepper@cygnus.com> * tme/localtime.c: Rewrite so that localtime_r does not call tzset, but localtime does. * features.h: Rename ANSI C to ISO C. Mention __GLIBC__ and __GLIBC_MINOR__ macros. * gnu-versions.h: Add _GNU_GETOPT_INTERFACE_VERSION. * posix/getopt.c: Use _GNU_GETOPT_INTERFACE_VERSION to check whether we can elide the code. * posix/getopt1.c: Likewise. * posix/Makefile: Correct copyright. * elf/dl-error.c (_dl_catch_error): Clear `catch' also when error occurred. * elf/dl-support.c (_dl_sysdep_open_zero_fill): Don't define if MAP_ANON is defined. * elf/eval.c: Use __getline instead of getline. * elf/rtld.c (dl_main): Check return value of _dl_new_object function for NULL. * sysdeps/generic/dl-cache.c: Update copyright. * signal/Makefile: Correct copyright. (routines): Remove gsignal and ssignal. Add bsd_signal. * signal/gsignal.c: Removed. Now is made an alias. * signal/ssignal.c: Likewise. * sysdeps/posix/raise.c: Add alias gsignal. * sysdeps/stub/raise.c: Likewise. * sysdeps/posix/signal.c: Add alias ssignal. * sysdeps/stub/signal.c: Likewise. * signal/signal.h: Declare bsd_signal. Define signal as bsd_signal if __FAVOR_BSD. * sysdeps/posix/bsd_signal.c: New file. Implementation of XPG function. * sysdeps/unix/sysv/linux/signal.c: Add explanation. * socket/sys/un.h: Define SUN_LEN according to POSIX.1g. * stdio-common/Makefile (tests): Add scanf10. * stdio-common/scanf10.c: New file. * stdio-common/vfscanf.c: Decrement counter if EOF is read while reading string. * sysdeps/libm-i387/e_acos.S: Use END, not PSEUDO_END. * sysdeps/libm-i387/e_acosl.S: Likewise. * sysdeps/libm-i387/e_asin.S: Likewise. * sysdeps/libm-i387/e_asinl.S: Likewise. * sysdeps/libm-i387/e_atan2.S: Likewise. * sysdeps/libm-i387/e_atan2f.S: Likewise. * sysdeps/libm-i387/e_atan2l.S: Likewise. * sysdeps/libm-i387/e_exp.S: Likewise. * sysdeps/libm-i387/e_expl.S: Likewise. * sysdeps/libm-i387/e_fmod.S: Likewise. * sysdeps/libm-i387/e_fmodl.S: Likewise. * sysdeps/libm-i387/e_log.S: Likewise. * sysdeps/libm-i387/e_log10.S: Likewise. * sysdeps/libm-i387/e_log10l.S: Likewise. * sysdeps/libm-i387/e_logl.S: Likewise. * sysdeps/libm-i387/e_remainder.S: Likewise. * sysdeps/libm-i387/e_remainderf.S: Likewise. * sysdeps/libm-i387/e_remainderl.S: Likewise. * sysdeps/libm-i387/e_scalb.S: Likewise. * sysdeps/libm-i387/e_scalbl.S: Likewise. * sysdeps/libm-i387/e_sqrt.S: Likewise. * sysdeps/libm-i387/e_sqrtf.S: Likewise. * sysdeps/libm-i387/e_sqrtl.S: Likewise. * sysdeps/libm-i387/s_atan.S: Likewise. * sysdeps/libm-i387/s_atanf.S: Likewise. * sysdeps/libm-i387/s_atanl.S: Likewise. * sysdeps/libm-i387/s_ceil.S: Likewise. * sysdeps/libm-i387/s_ceilf.S: Likewise. * sysdeps/libm-i387/s_ceill.S: Likewise. * sysdeps/libm-i387/s_copysign.S: Likewise. * sysdeps/libm-i387/s_copysignf.S: Likewise. * sysdeps/libm-i387/s_copysignl.S: Likewise. * sysdeps/libm-i387/s_cos.S: Likewise. * sysdeps/libm-i387/s_cosf.S: Likewise. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_finite.S: Likewise. * sysdeps/libm-i387/s_finitef.S: Likewise. * sysdeps/libm-i387/s_finitel.S: Likewise. * sysdeps/libm-i387/s_floor.S: Likewise. * sysdeps/libm-i387/s_floorf.S: Likewise. * sysdeps/libm-i387/s_floorl.S: Likewise. * sysdeps/libm-i387/s_ilogb.S: Likewise. * sysdeps/libm-i387/s_ilogbf.S: Likewise. * sysdeps/libm-i387/s_ilogbl.S: Likewise. * sysdeps/libm-i387/s_log1p.S: Likewise. * sysdeps/libm-i387/s_log1pf.S: Likewise. * sysdeps/libm-i387/s_log1pl.S: Likewise. * sysdeps/libm-i387/s_logb.S: Likewise. * sysdeps/libm-i387/s_logbf.S: Likewise. * sysdeps/libm-i387/s_logbl.S: Likewise. * sysdeps/libm-i387/s_rint.S: Likewise. * sysdeps/libm-i387/s_rintf.S: Likewise. * sysdeps/libm-i387/s_rintl.S: Likewise. * sysdeps/libm-i387/s_scalbn.S: Likewise. * sysdeps/libm-i387/s_scalbnf.S: Likewise. * sysdeps/libm-i387/s_scalbnl.S: Likewise. * sysdeps/libm-i387/s_significand.S: Likewise. * sysdeps/libm-i387/s_significandf.S: Likewise. * sysdeps/libm-i387/s_significandl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinf.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/e_log.S: Use fyl2xp1 instruction for values near 1 to increase precision. * sysdeps/libm-i387/e_log10.S: Likewise. * sysdeps/libm-i387/e_log10l.S: Likewise. * sysdeps/libm-i387/e_logl.S: Likewise. * sysdeps/libm-i387/s_cos.S: Use testl instead of andw. * sysdeps/libm-i387/s_cosl.S: Likewise. * sysdeps/libm-i387/s_sin.S: Likewise. * sysdeps/libm-i387/s_sinl.S: Likewise. * sysdeps/libm-i387/s_tan.S: Likewise. * sysdeps/libm-i387/s_tanl.S: Likewise. * sysdeps/libm-i387/e_acosf.S: New file. Add float versions. * sysdeps/libm-i387/e_asinf.S: Likewise. * sysdeps/libm-i387/e_expf.S: Likewise. * sysdeps/libm-i387/e_fmodf.S: Likewise. * sysdeps/libm-i387/e_log10f.S: Likewise. * sysdeps/libm-i387/e_logf.S: Likewise. * sysdeps/libm-i387/e_scalbf.S: Likewise. * sysdeps/libm-i387/e_acosh.S: New file. Highly optimized versions. * sysdeps/libm-i387/e_acoshf.S: Likewise. * sysdeps/libm-i387/e_acoshl.S: Likewise. * sysdeps/libm-i387/e_atanh.S: Likewise. * sysdeps/libm-i387/e_atanhf.S: Likewise. * sysdeps/libm-i387/e_atanhl.S: Likewise. * sysdeps/libm-i387/e_asinh.S: Likewise. * sysdeps/libm-i387/e_asinhf.S: Likewise. * sysdeps/libm-i387/e_asinhl.S: Likewise. * sysdeps/libm-ieee754/s_asinhf.c: Tweak a bit. Use lower levels for simplified handling. * sysdeps/unix/sysv/linux/syscalls.list: Add query_module. Sun Dec 22 01:39:29 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * inet/rcmd.c (rcmd): Set h_errno before calling herror. * inet/rexec.c (rexec): Likewise. Sat Dec 21 21:47:08 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/unix/sysv/linux/m68k/setjmp.c (__setjmp): Make it really compatible. Sun Dec 22 03:23:33 1996 Ulrich Drepper <drepper@cygnus.com> * sysdeps/libm-i387/s_log1p.S: Use fyl2xp1 for numbers in range -0.29 <= x <= 0.29, otherwise the old method. * sysdeps/libm-i387/s_log1pf.S: Likewise. * sysdeps/libm-i387/s_log1pl.S: Likewise.
This commit is contained in:
parent
01c901a56b
commit
d38cd08ca3
161
ChangeLog
161
ChangeLog
|
@ -1,3 +1,164 @@
|
||||||
|
Mon Dec 30 01:32:59 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* tme/localtime.c: Rewrite so that localtime_r does not call tzset,
|
||||||
|
but localtime does.
|
||||||
|
|
||||||
|
* features.h: Rename ANSI C to ISO C.
|
||||||
|
Mention __GLIBC__ and __GLIBC_MINOR__ macros.
|
||||||
|
|
||||||
|
* gnu-versions.h: Add _GNU_GETOPT_INTERFACE_VERSION.
|
||||||
|
* posix/getopt.c: Use _GNU_GETOPT_INTERFACE_VERSION to check
|
||||||
|
whether we can elide the code.
|
||||||
|
* posix/getopt1.c: Likewise.
|
||||||
|
* posix/Makefile: Correct copyright.
|
||||||
|
|
||||||
|
* elf/dl-error.c (_dl_catch_error): Clear `catch' also when error
|
||||||
|
occurred.
|
||||||
|
* elf/dl-support.c (_dl_sysdep_open_zero_fill): Don't define if
|
||||||
|
MAP_ANON is defined.
|
||||||
|
* elf/eval.c: Use __getline instead of getline.
|
||||||
|
* elf/rtld.c (dl_main): Check return value of _dl_new_object
|
||||||
|
function for NULL.
|
||||||
|
* sysdeps/generic/dl-cache.c: Update copyright.
|
||||||
|
|
||||||
|
* signal/Makefile: Correct copyright.
|
||||||
|
(routines): Remove gsignal and ssignal. Add bsd_signal.
|
||||||
|
* signal/gsignal.c: Removed. Now is made an alias.
|
||||||
|
* signal/ssignal.c: Likewise.
|
||||||
|
* sysdeps/posix/raise.c: Add alias gsignal.
|
||||||
|
* sysdeps/stub/raise.c: Likewise.
|
||||||
|
* sysdeps/posix/signal.c: Add alias ssignal.
|
||||||
|
* sysdeps/stub/signal.c: Likewise.
|
||||||
|
* signal/signal.h: Declare bsd_signal. Define signal as bsd_signal
|
||||||
|
if __FAVOR_BSD.
|
||||||
|
* sysdeps/posix/bsd_signal.c: New file. Implementation of XPG
|
||||||
|
function.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/signal.c: Add explanation.
|
||||||
|
|
||||||
|
* socket/sys/un.h: Define SUN_LEN according to POSIX.1g.
|
||||||
|
|
||||||
|
* stdio-common/Makefile (tests): Add scanf10.
|
||||||
|
* stdio-common/scanf10.c: New file.
|
||||||
|
* stdio-common/vfscanf.c: Decrement counter if EOF is read while
|
||||||
|
reading string.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_acos.S: Use END, not PSEUDO_END.
|
||||||
|
* sysdeps/libm-i387/e_acosl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asin.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asinl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_atan2.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_atan2f.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_atan2l.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_exp.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_expl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_fmod.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_fmodl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log10.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log10l.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_logl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_remainder.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_remainderf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_remainderl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_scalb.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_scalbl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_sqrt.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_sqrtf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_sqrtl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_atan.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_atanf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_atanl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_ceil.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_ceilf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_ceill.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_copysign.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_copysignf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_copysignl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_cos.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_cosf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_cosl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_finite.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_finitef.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_finitel.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_floor.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_floorf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_floorl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_ilogb.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_ilogbf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_ilogbl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_log1p.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_log1pf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_log1pl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_logb.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_logbf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_logbl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_rint.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_rintf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_rintl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_scalbn.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_scalbnf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_scalbnl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_significand.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_significandf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_significandl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_sin.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_sinf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_sinl.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_log.S: Use fyl2xp1 instruction for values
|
||||||
|
near 1 to increase precision.
|
||||||
|
* sysdeps/libm-i387/e_log10.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log10l.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_logl.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/s_cos.S: Use testl instead of andw.
|
||||||
|
* sysdeps/libm-i387/s_cosl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_sin.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_sinl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_tan.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_tanl.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_acosf.S: New file. Add float versions.
|
||||||
|
* sysdeps/libm-i387/e_asinf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_expf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_fmodf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_log10f.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_logf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_scalbf.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/e_acosh.S: New file. Highly optimized versions.
|
||||||
|
* sysdeps/libm-i387/e_acoshf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_acoshl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_atanh.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_atanhf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_atanhl.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asinh.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asinhf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/e_asinhl.S: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/libm-ieee754/s_asinhf.c: Tweak a bit. Use lower levels
|
||||||
|
for simplified handling.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/syscalls.list: Add query_module.
|
||||||
|
|
||||||
|
Sun Dec 22 01:39:29 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* inet/rcmd.c (rcmd): Set h_errno before calling herror.
|
||||||
|
* inet/rexec.c (rexec): Likewise.
|
||||||
|
|
||||||
|
Sat Dec 21 21:47:08 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/m68k/setjmp.c (__setjmp): Make it really
|
||||||
|
compatible.
|
||||||
|
|
||||||
|
Sun Dec 22 03:23:33 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/libm-i387/s_log1p.S: Use fyl2xp1 for numbers in range
|
||||||
|
-0.29 <= x <= 0.29, otherwise the old method.
|
||||||
|
* sysdeps/libm-i387/s_log1pf.S: Likewise.
|
||||||
|
* sysdeps/libm-i387/s_log1pl.S: Likewise.
|
||||||
|
|
||||||
Sun Dec 22 00:01:27 1996 Ulrich Drepper <drepper@cygnus.com>
|
Sun Dec 22 00:01:27 1996 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* inet/getnetgrent.c: Reformat copyright.
|
* inet/getnetgrent.c: Reformat copyright.
|
||||||
|
|
|
@ -90,6 +90,7 @@ _dl_catch_error (char **errstring,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We get here only if we longjmp'd out of OPERATE. */
|
/* We get here only if we longjmp'd out of OPERATE. */
|
||||||
|
catch = NULL;
|
||||||
*errstring = c.errstring;
|
*errstring = c.errstring;
|
||||||
*objname = c.objname;
|
*objname = c.objname;
|
||||||
return errcode == -1 ? 0 : errcode;
|
return errcode == -1 ? 0 : errcode;
|
||||||
|
|
|
@ -33,6 +33,7 @@ char **_dl_argv = &__progname; /* This is checked for some error messages. */
|
||||||
For the dynamic linker it is set by -rpath when linking. */
|
For the dynamic linker it is set by -rpath when linking. */
|
||||||
const char *_dl_rpath = DEFAULT_RPATH;
|
const char *_dl_rpath = DEFAULT_RPATH;
|
||||||
|
|
||||||
|
#ifndef MAP_ANON
|
||||||
/* This is the only dl-sysdep.c function that is actually needed at run-time
|
/* This is the only dl-sysdep.c function that is actually needed at run-time
|
||||||
by _dl_map_object. */
|
by _dl_map_object. */
|
||||||
|
|
||||||
|
@ -41,6 +42,7 @@ _dl_sysdep_open_zero_fill (void)
|
||||||
{
|
{
|
||||||
return __open ("/dev/zero", O_RDONLY);
|
return __open ("/dev/zero", O_RDONLY);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This should never be called. */
|
/* This should never be called. */
|
||||||
void
|
void
|
||||||
|
|
|
@ -128,7 +128,7 @@ _start (void)
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
size_t bufsz = 0;
|
size_t bufsz = 0;
|
||||||
|
|
||||||
while (getline (&buf, &bufsz, stdin) > 0)
|
while (__getline (&buf, &bufsz, stdin) > 0)
|
||||||
{
|
{
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
eval (&p);
|
eval (&p);
|
||||||
|
|
|
@ -236,6 +236,8 @@ of this helper program; chances are you did not intend to run this program.\n",
|
||||||
/* Create a link_map for the executable itself.
|
/* Create a link_map for the executable itself.
|
||||||
This will be what dlopen on "" returns. */
|
This will be what dlopen on "" returns. */
|
||||||
l = _dl_new_object ((char *) "", "", lt_executable);
|
l = _dl_new_object ((char *) "", "", lt_executable);
|
||||||
|
if (l == NULL)
|
||||||
|
_dl_sysdep_fatal ("cannot allocate memory for link map", NULL);
|
||||||
l->l_phdr = phdr;
|
l->l_phdr = phdr;
|
||||||
l->l_phnum = phent;
|
l->l_phnum = phent;
|
||||||
l->l_entry = *user_entry;
|
l->l_entry = *user_entry;
|
||||||
|
|
51
features.h
51
features.h
|
@ -23,14 +23,14 @@
|
||||||
/* These are defined by the user (or the compiler)
|
/* These are defined by the user (or the compiler)
|
||||||
to specify the desired environment:
|
to specify the desired environment:
|
||||||
|
|
||||||
__STRICT_ANSI__ ANSI Standard C.
|
__STRICT_ANSI__ ISO Standard C.
|
||||||
_POSIX_SOURCE IEEE Std 1003.1.
|
_POSIX_SOURCE IEEE Std 1003.1.
|
||||||
_POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
|
_POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
|
||||||
if >=199309L, add IEEE Std 1003.1b-1993
|
if >=199309L, add IEEE Std 1003.1b-1993
|
||||||
_XOPEN_SOURCE Includes POSIX and XPG things.
|
_XOPEN_SOURCE Includes POSIX and XPG things.
|
||||||
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
|
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
|
||||||
_BSD_SOURCE ANSI, POSIX, and 4.3BSD things.
|
_BSD_SOURCE ISO C, POSIX, and 4.3BSD things.
|
||||||
_SVID_SOURCE ANSI, POSIX, and SVID things.
|
_SVID_SOURCE ISO C, POSIX, and SVID things.
|
||||||
_GNU_SOURCE All of the above, plus GNU extensions.
|
_GNU_SOURCE All of the above, plus GNU extensions.
|
||||||
_REENTRANT Select additionally reentrant object.
|
_REENTRANT Select additionally reentrant object.
|
||||||
_THREAD_SAFE Same as _REENTRANT, often used by other systems.
|
_THREAD_SAFE Same as _REENTRANT, often used by other systems.
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
If none of these are defined, the default is all but _GNU_SOURCE.
|
If none of these are defined, the default is all but _GNU_SOURCE.
|
||||||
If more than one of these are defined, they accumulate.
|
If more than one of these are defined, they accumulate.
|
||||||
For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE
|
For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE
|
||||||
together give you ANSI C, 1003.1, and 1003.2, but nothing else.
|
together give you ISO C, 1003.1, and 1003.2, but nothing else.
|
||||||
|
|
||||||
These are defined by this file and are used by the
|
These are defined by this file and are used by the
|
||||||
header files to decide what to declare or define:
|
header files to decide what to declare or define:
|
||||||
|
@ -56,7 +56,10 @@
|
||||||
__USE_REENTRANT Define reentrant/thread-safe *_r functions.
|
__USE_REENTRANT Define reentrant/thread-safe *_r functions.
|
||||||
__FAVOR_BSD Favor 4.3BSD things in cases of conflict.
|
__FAVOR_BSD Favor 4.3BSD things in cases of conflict.
|
||||||
|
|
||||||
The macro `__GNU_LIBRARY__' is defined by this file unconditionally.
|
The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are
|
||||||
|
defined by this file unconditionally. `__GNU_LIBRARY__' is provided
|
||||||
|
only for compatibility. All new code should use the other symbols
|
||||||
|
to test for features.
|
||||||
|
|
||||||
All macros listed above as possibly being defined by this file are
|
All macros listed above as possibly being defined by this file are
|
||||||
explicitly undefined if they are not explicitly defined.
|
explicitly undefined if they are not explicitly defined.
|
||||||
|
@ -85,15 +88,15 @@
|
||||||
# define __KERNEL_STRICT_NAMES
|
# define __KERNEL_STRICT_NAMES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Always use ANSI things. */
|
/* Always use ISO C things. */
|
||||||
#define __USE_ANSI 1
|
#define __USE_ANSI 1
|
||||||
|
|
||||||
|
|
||||||
/* If _BSD_SOURCE was defined by the user, favor BSD over POSIX. */
|
/* If _BSD_SOURCE was defined by the user, favor BSD over POSIX. */
|
||||||
#if defined (_BSD_SOURCE) && \
|
#if defined _BSD_SOURCE && \
|
||||||
!(defined (_POSIX_SOURCE) || defined (_POSIX_C_SOURCE) || \
|
!(defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || \
|
||||||
defined (_XOPEN_SOURCE) || defined (_XOPEN_SOURCE_DEFINED) || \
|
defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_DEFINED || \
|
||||||
defined (_GNU_SOURCE) || defined (_SVID_SOURCE))
|
defined _GNU_SOURCE || defined _SVID_SOURCE)
|
||||||
# define __FAVOR_BSD 1
|
# define __FAVOR_BSD 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -115,37 +118,35 @@
|
||||||
|
|
||||||
/* If nothing (other than _GNU_SOURCE) is defined,
|
/* If nothing (other than _GNU_SOURCE) is defined,
|
||||||
define _BSD_SOURCE and _SVID_SOURCE. */
|
define _BSD_SOURCE and _SVID_SOURCE. */
|
||||||
#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
|
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
|
||||||
!defined (_POSIX_C_SOURCE) && !defined (_XOPEN_SOURCE) && \
|
!defined _POSIX_C_SOURCE && !defined _XOPEN_SOURCE && \
|
||||||
!defined (_XOPEN_SOURCE_EXTENDED) && !defined (_BSD_SOURCE) && \
|
!defined _XOPEN_SOURCE_EXTENDED && !defined _BSD_SOURCE && \
|
||||||
!defined (_SVID_SOURCE))
|
!defined _SVID_SOURCE)
|
||||||
#define _BSD_SOURCE 1
|
#define _BSD_SOURCE 1
|
||||||
#define _SVID_SOURCE 1
|
#define _SVID_SOURCE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
|
/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2
|
||||||
(and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */
|
(and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */
|
||||||
#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
|
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \
|
||||||
!defined (_POSIX_C_SOURCE))
|
!defined _POSIX_C_SOURCE)
|
||||||
#define _POSIX_SOURCE 1
|
#define _POSIX_SOURCE 1
|
||||||
#if defined(_XOPEN_SOURCE)
|
#ifdef _XOPEN_SOURCE
|
||||||
#define _POSIX_C_SOURCE 2
|
#define _POSIX_C_SOURCE 2
|
||||||
#else
|
#else
|
||||||
#define _POSIX_C_SOURCE 199309L
|
#define _POSIX_C_SOURCE 199309L
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined (_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1 || \
|
#if defined _POSIX_SOURCE || _POSIX_C_SOURCE >= 1 || defined _XOPEN_SOURCE
|
||||||
defined (_XOPEN_SOURCE))
|
|
||||||
#define __USE_POSIX 1
|
#define __USE_POSIX 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined (_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 2 || \
|
#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE
|
||||||
defined (_XOPEN_SOURCE))
|
|
||||||
#define __USE_POSIX2 1
|
#define __USE_POSIX2 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined (_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309L)
|
#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 199309L
|
||||||
#define __USE_POSIX199309 1
|
#define __USE_POSIX199309 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -156,7 +157,7 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (_BSD_SOURCE) || defined (_SVID_SOURCE)
|
#if defined _BSD_SOURCE || defined _SVID_SOURCE
|
||||||
#define __USE_MISC 1
|
#define __USE_MISC 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -172,7 +173,7 @@
|
||||||
#define __USE_GNU 1
|
#define __USE_GNU 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (_REENTRANT) || defined (_THREAD_SAFE)
|
#if defined _REENTRANT || defined _THREAD_SAFE
|
||||||
#define __USE_REENTRANT 1
|
#define __USE_REENTRANT 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -192,7 +193,7 @@
|
||||||
#define __GLIBC_MINOR__ 0
|
#define __GLIBC_MINOR__ 0
|
||||||
|
|
||||||
|
|
||||||
#if !defined (__GNUC__) || __GNUC__ < 2
|
#if !defined __GNUC__ || __GNUC__ < 2
|
||||||
/* In GCC version 2, (__extension__ EXPR) will not complain
|
/* In GCC version 2, (__extension__ EXPR) will not complain
|
||||||
about GCC extensions used in EXPR under -ansi or -pedantic. */
|
about GCC extensions used in EXPR under -ansi or -pedantic. */
|
||||||
#define __extension__
|
#define __extension__
|
||||||
|
|
|
@ -47,5 +47,7 @@
|
||||||
#define _GNU_OBSTACK_INTERFACE_VERSION 1 /* vs malloc/obstack.c */
|
#define _GNU_OBSTACK_INTERFACE_VERSION 1 /* vs malloc/obstack.c */
|
||||||
#define _GNU_REGEX_INTERFACE_VERSION 1 /* vs posix/regex.c */
|
#define _GNU_REGEX_INTERFACE_VERSION 1 /* vs posix/regex.c */
|
||||||
#define _GNU_GLOB_INTERFACE_VERSION 1 /* vs posix/glob.c */
|
#define _GNU_GLOB_INTERFACE_VERSION 1 /* vs posix/glob.c */
|
||||||
|
#define _GNU_GETOPT_INTERFACE_VERSION 1 /* vs posix/getopt.c and
|
||||||
|
posix/getopt1.c */
|
||||||
|
|
||||||
#endif /* gnu-versions.h */
|
#endif /* gnu-versions.h */
|
||||||
|
|
|
@ -83,6 +83,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
|
||||||
&hp, &herr) < 0)
|
&hp, &herr) < 0)
|
||||||
if (herr != NETDB_INTERNAL || errno != ERANGE)
|
if (herr != NETDB_INTERNAL || errno != ERANGE)
|
||||||
{
|
{
|
||||||
|
__set_h_errno (herr);
|
||||||
herror(*ahost);
|
herror(*ahost);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -322,7 +323,7 @@ again:
|
||||||
char *pbuf;
|
char *pbuf;
|
||||||
size_t dirlen;
|
size_t dirlen;
|
||||||
size_t buflen = __sysconf (_SC_GETPW_R_SIZE_MAX);
|
size_t buflen = __sysconf (_SC_GETPW_R_SIZE_MAX);
|
||||||
char buffer = __alloca (buflen);
|
char *buffer = __alloca (buflen);
|
||||||
|
|
||||||
first = 0;
|
first = 0;
|
||||||
if (getpwnam_r (luser, &pwdbuf, buffer, buflen, &pwd) < 0)
|
if (getpwnam_r (luser, &pwdbuf, buffer, buflen, &pwd) < 0)
|
||||||
|
|
|
@ -71,6 +71,7 @@ rexec(ahost, rport, name, pass, cmd, fd2p)
|
||||||
&hp, &herr) < 0)
|
&hp, &herr) < 0)
|
||||||
if (herr != NETDB_INTERNAL || errno != ERANGE)
|
if (herr != NETDB_INTERNAL || errno != ERANGE)
|
||||||
{
|
{
|
||||||
|
__set_h_errno (herr);
|
||||||
herror(*ahost);
|
herror(*ahost);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,6 @@ _IO_vsprintf (string, format, args)
|
||||||
_IO_init (&sf._sbf._f, 0);
|
_IO_init (&sf._sbf._f, 0);
|
||||||
_IO_JUMPS (&sf._sbf._f) = &_IO_str_jumps;
|
_IO_JUMPS (&sf._sbf._f) = &_IO_str_jumps;
|
||||||
_IO_str_init_static (&sf._sbf._f, string, -1, string);
|
_IO_str_init_static (&sf._sbf._f, string, -1, string);
|
||||||
_IO_str_init_static ((_IO_FILE *) &sf, string, -1, string);
|
|
||||||
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, &sf);
|
_IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, &sf);
|
||||||
_IO_flockfile (&sf._sbf._f);
|
_IO_flockfile (&sf._sbf._f);
|
||||||
ret = _IO_vfprintf (&sf._sbf._f, format, args);
|
ret = _IO_vfprintf (&sf._sbf._f, format, args);
|
||||||
|
|
|
@ -12,9 +12,9 @@
|
||||||
# Library General Public License for more details.
|
# Library General Public License for more details.
|
||||||
|
|
||||||
# You should have received a copy of the GNU Library General Public
|
# You should have received a copy of the GNU Library General Public
|
||||||
# License along with the GNU C Library; see the file COPYING.LIB. If
|
# License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
# not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
# Cambridge, MA 02139, USA.
|
# Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#
|
#
|
||||||
# Sub-makefile for POSIX portion of the library.
|
# Sub-makefile for POSIX portion of the library.
|
||||||
|
|
|
@ -52,7 +52,15 @@
|
||||||
program understand `configure --with-gnu-libc' and omit the object files,
|
program understand `configure --with-gnu-libc' and omit the object files,
|
||||||
it is simpler to just do this in the source for each such file. */
|
it is simpler to just do this in the source for each such file. */
|
||||||
|
|
||||||
#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
|
#define GETOPT_INTERFACE_VERSION 1
|
||||||
|
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
|
||||||
|
#include <gnu-versions.h>
|
||||||
|
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
|
||||||
|
#define ELIDE_CODE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ELIDE_CODE
|
||||||
|
|
||||||
|
|
||||||
/* This needs to come after some library #include
|
/* This needs to come after some library #include
|
||||||
|
@ -124,8 +132,14 @@ char *optarg = NULL;
|
||||||
Otherwise, `optind' communicates from one call to the next
|
Otherwise, `optind' communicates from one call to the next
|
||||||
how much of ARGV has been scanned so far. */
|
how much of ARGV has been scanned so far. */
|
||||||
|
|
||||||
/* XXX 1003.2 says this must be 1 before any call. */
|
/* 1003.2 says this must be 1 before any call. */
|
||||||
int optind = 0;
|
int optind = 1;
|
||||||
|
|
||||||
|
/* Formerly, initialization of getopt depended on optind==0, which
|
||||||
|
causes problems with re-calling getopt as programs generally don't
|
||||||
|
know that. */
|
||||||
|
|
||||||
|
int __getopt_initialized = 0;
|
||||||
|
|
||||||
/* The next char to be scanned in the option-element
|
/* The next char to be scanned in the option-element
|
||||||
in which the last option character we returned was found.
|
in which the last option character we returned was found.
|
||||||
|
@ -431,10 +445,11 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||||
{
|
{
|
||||||
optarg = NULL;
|
optarg = NULL;
|
||||||
|
|
||||||
if (optind == 0)
|
if (!__getopt_initialized)
|
||||||
{
|
{
|
||||||
optstring = _getopt_initialize (optstring);
|
optstring = _getopt_initialize (optstring);
|
||||||
optind = 1; /* Don't scan ARGV[0], the program name. */
|
optind = 1; /* Don't scan ARGV[0], the program name. */
|
||||||
|
__getopt_initialized = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test whether ARGV[optind] points to a non-option argument.
|
/* Test whether ARGV[optind] points to a non-option argument.
|
||||||
|
@ -500,6 +515,11 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||||
that we previously skipped, so the caller will digest them. */
|
that we previously skipped, so the caller will digest them. */
|
||||||
if (first_nonopt != last_nonopt)
|
if (first_nonopt != last_nonopt)
|
||||||
optind = first_nonopt;
|
optind = first_nonopt;
|
||||||
|
|
||||||
|
/* Before we can be provide the next result we must be
|
||||||
|
reinitialized. */
|
||||||
|
__getopt_initialized = 0;
|
||||||
|
|
||||||
return EOF;
|
return EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,7 +529,12 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||||
if (NONOPTION_P)
|
if (NONOPTION_P)
|
||||||
{
|
{
|
||||||
if (ordering == REQUIRE_ORDER)
|
if (ordering == REQUIRE_ORDER)
|
||||||
|
{
|
||||||
|
/* Before we can be provide the next result we must be
|
||||||
|
reinitialized. */
|
||||||
|
__getopt_initialized = 0;
|
||||||
return EOF;
|
return EOF;
|
||||||
|
}
|
||||||
optarg = argv[optind++];
|
optarg = argv[optind++];
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -880,7 +905,7 @@ getopt (argc, argv, optstring)
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _LIBC or not __GNU_LIBRARY__. */
|
#endif /* Not ELIDE_CODE. */
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
/* getopt_long and getopt_long_only entry points for GNU getopt.
|
||||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994
|
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 1996
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of the GNU C Library. Its master source is NOT part of
|
This file is part of the GNU C Library. Its master source is NOT part of
|
||||||
|
@ -16,9 +16,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
You should have received a copy of the GNU Library General Public
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
@ -44,15 +44,21 @@ Cambridge, MA 02139, USA. */
|
||||||
program understand `configure --with-gnu-libc' and omit the object files,
|
program understand `configure --with-gnu-libc' and omit the object files,
|
||||||
it is simpler to just do this in the source for each such file. */
|
it is simpler to just do this in the source for each such file. */
|
||||||
|
|
||||||
#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
|
#define GETOPT_INTERFACE_VERSION 1
|
||||||
|
#if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2
|
||||||
|
#include <gnu-versions.h>
|
||||||
|
#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
|
||||||
|
#define ELIDE_CODE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ELIDE_CODE
|
||||||
|
|
||||||
|
|
||||||
/* This needs to come after some library #include
|
/* This needs to come after some library #include
|
||||||
to get __GNU_LIBRARY__ defined. */
|
to get __GNU_LIBRARY__ defined. */
|
||||||
#ifdef __GNU_LIBRARY__
|
#ifdef __GNU_LIBRARY__
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#else
|
|
||||||
char *getenv ();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NULL
|
#ifndef NULL
|
||||||
|
@ -87,7 +93,7 @@ getopt_long_only (argc, argv, options, long_options, opt_index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* _LIBC or not __GNU_LIBRARY__. */
|
#endif /* Not ELIDE_CODE. */
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,9 @@
|
||||||
# Library General Public License for more details.
|
# Library General Public License for more details.
|
||||||
|
|
||||||
# You should have received a copy of the GNU Library General Public
|
# You should have received a copy of the GNU Library General Public
|
||||||
# License along with the GNU C Library; see the file COPYING.LIB. If
|
# License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
# not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
# Cambridge, MA 02139, USA.
|
# Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
#
|
#
|
||||||
# Makefile for signal routines.
|
# Makefile for signal routines.
|
||||||
|
@ -30,7 +30,7 @@ routines := signal raise killpg \
|
||||||
sigstack sigaltstack sigintr \
|
sigstack sigaltstack sigintr \
|
||||||
sigsetops sigempty sigfillset sigaddset sigdelset sigismem \
|
sigsetops sigempty sigfillset sigaddset sigdelset sigismem \
|
||||||
sigreturn \
|
sigreturn \
|
||||||
gsignal ssignal siggetmask
|
siggetmask bsd_signal
|
||||||
|
|
||||||
tests := tst-signal
|
tests := tst-signal
|
||||||
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
|
||||||
Cambridge, MA 02139, USA. */
|
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#undef gsignal
|
|
||||||
|
|
||||||
int
|
|
||||||
gsignal (sig)
|
|
||||||
int sig;
|
|
||||||
{
|
|
||||||
return raise (sig);
|
|
||||||
}
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
#ifndef _SIGNAL_H
|
#ifndef _SIGNAL_H
|
||||||
|
|
||||||
#if !defined(__need_sig_atomic_t) && !defined(__need_sigset_t)
|
#if !defined __need_sig_atomic_t && !defined __need_sigset_t
|
||||||
#define _SIGNAL_H 1
|
#define _SIGNAL_H 1
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -32,8 +32,8 @@ __BEGIN_DECLS
|
||||||
#include <gnu/types.h>
|
#include <gnu/types.h>
|
||||||
#include <sigset.h> /* __sigset_t, __sig_atomic_t. */
|
#include <sigset.h> /* __sigset_t, __sig_atomic_t. */
|
||||||
|
|
||||||
#if !defined(__sig_atomic_t_defined) && \
|
#if !defined __sig_atomic_t_defined \
|
||||||
(defined(_SIGNAL_H) || defined(__need_sig_atomic_t))
|
&& (defined _SIGNAL_H || defined __need_sig_atomic_t)
|
||||||
/* An integral type that can be modified atomically, without the
|
/* An integral type that can be modified atomically, without the
|
||||||
possibility of a signal arriving in the middle of the operation. */
|
possibility of a signal arriving in the middle of the operation. */
|
||||||
typedef __sig_atomic_t sig_atomic_t;
|
typedef __sig_atomic_t sig_atomic_t;
|
||||||
|
@ -51,6 +51,18 @@ typedef void (*__sighandler_t) __P ((int));
|
||||||
returning the old handler, or SIG_ERR on error. */
|
returning the old handler, or SIG_ERR on error. */
|
||||||
extern __sighandler_t signal __P ((int __sig, __sighandler_t __handler));
|
extern __sighandler_t signal __P ((int __sig, __sighandler_t __handler));
|
||||||
|
|
||||||
|
#if defined __FAVOR_BSD || defined __USE_XOPEN
|
||||||
|
/* The X/Open definition of `signal' conflicts with the BSD version.
|
||||||
|
So they defined another function `bsd_signal'. We will use this
|
||||||
|
implementation as the official `signal' function if the BSD
|
||||||
|
interface is preferred. */
|
||||||
|
extern __sighandler_t bsd_signal __P ((int __sig, __sighandler_t __handler));
|
||||||
|
|
||||||
|
#ifdef __FAVOR_BSD
|
||||||
|
#define signal(sig, handler) bsd_signal ((sig), (handler))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Send signal SIG to process number PID. If PID is zero,
|
/* Send signal SIG to process number PID. If PID is zero,
|
||||||
send SIG to all processes in the current process's process group.
|
send SIG to all processes in the current process's process group.
|
||||||
If PID is < -1, send SIG to all processes in process group - PID. */
|
If PID is < -1, send SIG to all processes in process group - PID. */
|
||||||
|
@ -59,7 +71,7 @@ extern int __kill __P ((__pid_t __pid, int __sig));
|
||||||
extern int kill __P ((__pid_t __pid, int __sig));
|
extern int kill __P ((__pid_t __pid, int __sig));
|
||||||
#endif /* Use POSIX. */
|
#endif /* Use POSIX. */
|
||||||
|
|
||||||
#if defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED)
|
#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
|
||||||
/* Send SIG to all processes in process group PGRP.
|
/* Send SIG to all processes in process group PGRP.
|
||||||
If PGRP is zero, send SIG to all processes in
|
If PGRP is zero, send SIG to all processes in
|
||||||
the current process's process group. */
|
the current process's process group. */
|
||||||
|
@ -95,7 +107,7 @@ extern int __sigsetmask __P ((int __mask));
|
||||||
explitcly selects the BSD version. */
|
explitcly selects the BSD version. */
|
||||||
extern int __sigpause __P ((int __sig_or_mask, int __is_sig));
|
extern int __sigpause __P ((int __sig_or_mask, int __is_sig));
|
||||||
|
|
||||||
#if defined(__USE_BSD) && !defined(__USE_XOPEN)
|
#if defined __USE_BSD && !defined __USE_XOPEN
|
||||||
/* Set the mask of blocked signals to MASK,
|
/* Set the mask of blocked signals to MASK,
|
||||||
wait for a signal to arrive, and then restore the mask. */
|
wait for a signal to arrive, and then restore the mask. */
|
||||||
#define sigpause(mask) __sigpause ((mask), 0)
|
#define sigpause(mask) __sigpause ((mask), 0)
|
||||||
|
@ -137,8 +149,8 @@ typedef __sighandler_t sig_t;
|
||||||
|
|
||||||
#ifdef __USE_POSIX
|
#ifdef __USE_POSIX
|
||||||
|
|
||||||
#if !defined(__sigset_t_defined) && \
|
#if !defined __sigset_t_defined \
|
||||||
(defined(_SIGNAL_H) || defined(__need_sigset_t))
|
&& (defined _SIGNAL_H || defined __need_sigset_t)
|
||||||
typedef __sigset_t sigset_t;
|
typedef __sigset_t sigset_t;
|
||||||
#define __sigset_t_defined 1
|
#define __sigset_t_defined 1
|
||||||
#endif /* `sigset_t' not defined and <signal.h> or need `sigset_t'. */
|
#endif /* `sigset_t' not defined and <signal.h> or need `sigset_t'. */
|
||||||
|
@ -194,7 +206,7 @@ extern int sigwait __P ((__const sigset_t *__set, int *__sig));
|
||||||
|
|
||||||
#endif /* Use POSIX. */
|
#endif /* Use POSIX. */
|
||||||
|
|
||||||
#if defined(_SIGNAL_H) && defined(__USE_BSD)
|
#if defined _SIGNAL_H && defined __USE_BSD
|
||||||
|
|
||||||
/* Names of the signals. This variable exists only for compatibility.
|
/* Names of the signals. This variable exists only for compatibility.
|
||||||
Use `strsignal' instead (see <string.h>). */
|
Use `strsignal' instead (see <string.h>). */
|
||||||
|
@ -238,7 +250,7 @@ extern int sigreturn __P ((struct sigcontext *__scp));
|
||||||
#endif /* signal.h included and use BSD. */
|
#endif /* signal.h included and use BSD. */
|
||||||
|
|
||||||
|
|
||||||
#if defined(_SIGNAL_H) && (defined(__USE_BSD) || defined(__USE_XOPEN_EXTENDED))
|
#if defined _SIGNAL_H && (defined __USE_BSD || defined __USE_XOPEN_EXTENDED)
|
||||||
|
|
||||||
#define __need_size_t
|
#define __need_size_t
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
|
|
||||||
This file is part of the GNU C Library.
|
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
|
||||||
Cambridge, MA 02139, USA. */
|
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#undef ssignal
|
|
||||||
|
|
||||||
__sighandler_t
|
|
||||||
ssignal (sig, func)
|
|
||||||
int sig;
|
|
||||||
__sighandler_t func;
|
|
||||||
{
|
|
||||||
return signal (sig, func);
|
|
||||||
}
|
|
|
@ -21,6 +21,8 @@
|
||||||
#define _SYS_UN_H 1
|
#define _SYS_UN_H 1
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#include <string.h> /* For prototype of `strlen'. */
|
||||||
|
|
||||||
/* Get the definition of the macro to define the common sockaddr members. */
|
/* Get the definition of the macro to define the common sockaddr members. */
|
||||||
#include <sockaddrcom.h>
|
#include <sockaddrcom.h>
|
||||||
|
|
||||||
|
@ -33,6 +35,11 @@ struct sockaddr_un
|
||||||
char sun_path[108]; /* Path name. */
|
char sun_path[108]; /* Path name. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Evaluate to actual length of the `sockaddr_un' structure. */
|
||||||
|
#define SUN_LEN(ptr) (((struct sockaddr_un *) 0)->sun_path \
|
||||||
|
+ strlen ((ptr)->sun_path))
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
#endif /* sys/un.h */
|
#endif /* sys/un.h */
|
||||||
|
|
|
@ -43,7 +43,7 @@ tests := tst-printf tstscanf test_rdwr test-popen tstgetln test-fseek \
|
||||||
xbug errnobug \
|
xbug errnobug \
|
||||||
bug1 bug2 bug3 bug4 bug5 bug6 bug7 bug8 bug9 bug10 bug11 \
|
bug1 bug2 bug3 bug4 bug5 bug6 bug7 bug8 bug9 bug10 bug11 \
|
||||||
tfformat tiformat tstdiomisc \
|
tfformat tiformat tstdiomisc \
|
||||||
scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9
|
scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10
|
||||||
|
|
||||||
|
|
||||||
include ../Rules
|
include ../Rules
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
const char teststring[] = "<tag `word'>";
|
||||||
|
int retc, a, b;
|
||||||
|
|
||||||
|
retc = sscanf (teststring, "<%*s `%n%*s%n'>", &a, &b);
|
||||||
|
|
||||||
|
printf ("retc=%d a=%d b=%d\n", retc, a, b);
|
||||||
|
|
||||||
|
return retc == -1 && a == 6 && b == 12 ? 0 : 1;
|
||||||
|
}
|
|
@ -524,7 +524,10 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||||
if (First) \
|
if (First) \
|
||||||
input_error (); \
|
input_error (); \
|
||||||
else \
|
else \
|
||||||
|
{ \
|
||||||
|
--read_in; \
|
||||||
break; \
|
break; \
|
||||||
|
} \
|
||||||
val = c; \
|
val = c; \
|
||||||
if (val >= 0x80) \
|
if (val >= 0x80) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -667,6 +670,9 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||||
STRING_ADD_CHAR (str, c, char);
|
STRING_ADD_CHAR (str, c, char);
|
||||||
} while ((width <= 0 || --width > 0) && inchar () != EOF);
|
} while ((width <= 0 || --width > 0) && inchar () != EOF);
|
||||||
|
|
||||||
|
if (c == EOF)
|
||||||
|
--read_in;
|
||||||
|
|
||||||
if (!(flags & SUPPRESS))
|
if (!(flags & SUPPRESS))
|
||||||
{
|
{
|
||||||
*str = '\0';
|
*str = '\0';
|
||||||
|
|
|
@ -13,9 +13,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
You should have received a copy of the GNU Library General Public
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <link.h>
|
#include <link.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
|
@ -18,4 +18,4 @@ ENTRY(__ieee754_acos)
|
||||||
fxch %st(1)
|
fxch %st(1)
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_acos)
|
END (__ieee754_acos)
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
* Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
/* acos = atan (sqrt(1 - x^2) / x) */
|
||||||
|
ENTRY(__ieee754_acosf)
|
||||||
|
flds 4(%esp) /* x */
|
||||||
|
fst %st(1)
|
||||||
|
fmul %st(0) /* x^2 */
|
||||||
|
fld1
|
||||||
|
fsubp /* 1 - x^2 */
|
||||||
|
fsqrt /* sqrt (1 - x^2) */
|
||||||
|
fxch %st(1)
|
||||||
|
fpatan
|
||||||
|
ret
|
||||||
|
END (__ieee754_acosf)
|
|
@ -0,0 +1,105 @@
|
||||||
|
/* ix87 specific implementation of arcsinh.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_acosh)
|
||||||
|
movl 8(%esp), %ecx
|
||||||
|
cmpl $0x3ff00000, %ecx
|
||||||
|
jl 5f // < 1 => invalid
|
||||||
|
fldln2 // log(2)
|
||||||
|
fldl 4(%esp) // x : log(2)
|
||||||
|
cmpl $0x41b00000, %ecx
|
||||||
|
ja 3f // x > 2^28
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
cmpl $0x40000000, %ecx
|
||||||
|
ja 4f // x > 2
|
||||||
|
|
||||||
|
// 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
fsubl MO(one) // x-1 : log(2)
|
||||||
|
fld %st // x-1 : x-1 : log(2)
|
||||||
|
fmul %st(1) // (x-1)^2 : x-1 : log(2)
|
||||||
|
fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2)
|
||||||
|
fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2)
|
||||||
|
fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2)
|
||||||
|
faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2)
|
||||||
|
fcoml MO(limit)
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
ret
|
||||||
|
|
||||||
|
2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2)
|
||||||
|
fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
ret
|
||||||
|
|
||||||
|
// x > 2^28 => y = log(x) + log(2)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
3: fyl2x // log(x)
|
||||||
|
fldln2 // log(2) : log(x)
|
||||||
|
faddp // log(x)+log(2)
|
||||||
|
ret
|
||||||
|
|
||||||
|
// 2^28 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1)))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
4: fld %st // x : x : log(2)
|
||||||
|
fadd %st, %st(1) // x : 2*x : log(2)
|
||||||
|
fld %st // x : x : 2*x : log(2)
|
||||||
|
fmul %st(1) // x^2 : x : 2*x : log(2)
|
||||||
|
fsubl MO(one) // x^2-1 : x : 2*x : log(2)
|
||||||
|
fsqrt // sqrt(x^2-1) : x : 2*x : log(2)
|
||||||
|
faddp // x+sqrt(x^2-1) : 2*x : log(2)
|
||||||
|
fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2)
|
||||||
|
fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2)
|
||||||
|
fyl2x // log(2*x+1/(x+sqrt(x^2-1)))
|
||||||
|
ret
|
||||||
|
|
||||||
|
// x < 1 => NaN
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
5: fldz
|
||||||
|
fdiv %st, %st(0)
|
||||||
|
ret
|
||||||
|
END(__ieee754_acosh)
|
|
@ -0,0 +1,105 @@
|
||||||
|
/* ix87 specific implementation of arcsinh.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_acoshf)
|
||||||
|
movl 8(%esp), %ecx
|
||||||
|
cmpl $0x3f800000, %ecx
|
||||||
|
jl 5f // < 1 => invalid
|
||||||
|
fldln2 // log(2)
|
||||||
|
flds 4(%esp) // x : log(2)
|
||||||
|
cmpl $0x47000000, %ecx
|
||||||
|
ja 3f // x > 2^14
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
cmpl $0x40000000, %ecx
|
||||||
|
ja 4f // x > 2
|
||||||
|
|
||||||
|
// 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
fsubl MO(one) // x-1 : log(2)
|
||||||
|
fld %st // x-1 : x-1 : log(2)
|
||||||
|
fmul %st(1) // (x-1)^2 : x-1 : log(2)
|
||||||
|
fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2)
|
||||||
|
fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2)
|
||||||
|
fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2)
|
||||||
|
faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2)
|
||||||
|
fcoml MO(limit)
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
ret
|
||||||
|
|
||||||
|
2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2)
|
||||||
|
fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
ret
|
||||||
|
|
||||||
|
// x > 2^14 => y = log(x) + log(2)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
3: fyl2x // log(x)
|
||||||
|
fldln2 // log(2) : log(x)
|
||||||
|
faddp // log(x)+log(2)
|
||||||
|
ret
|
||||||
|
|
||||||
|
// 2^28 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1)))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
4: fld %st // x : x : log(2)
|
||||||
|
fadd %st, %st(1) // x : 2*x : log(2)
|
||||||
|
fld %st // x : x : 2*x : log(2)
|
||||||
|
fmul %st(1) // x^2 : x : 2*x : log(2)
|
||||||
|
fsubl MO(one) // x^2-1 : x : 2*x : log(2)
|
||||||
|
fsqrt // sqrt(x^2-1) : x : 2*x : log(2)
|
||||||
|
faddp // x+sqrt(x^2-1) : 2*x : log(2)
|
||||||
|
fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2)
|
||||||
|
fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2)
|
||||||
|
fyl2x // log(2*x+1/(x+sqrt(x^2-1)))
|
||||||
|
ret
|
||||||
|
|
||||||
|
// x < 1 => NaN
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
5: fldz
|
||||||
|
fdiv %st, %st(0)
|
||||||
|
ret
|
||||||
|
END(__ieee754_acoshf)
|
|
@ -0,0 +1,111 @@
|
||||||
|
/* ix87 specific implementation of arcsinh.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
/* Please note that we use double value for 1.0. This number
|
||||||
|
has an exact representation and so we don't get accuracy
|
||||||
|
problems. The advantage is that the code is simpler. */
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_acoshl)
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
cmpl $0x3fff, %ecx
|
||||||
|
jl 5f // < 1 => invalid
|
||||||
|
fldln2 // log(2)
|
||||||
|
fldt 4(%esp) // x : log(2)
|
||||||
|
cmpl $0x4020, %ecx
|
||||||
|
ja 3f // x > 2^34
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
cmpl $0x4000, %ecx
|
||||||
|
ja 4f // x > 2
|
||||||
|
|
||||||
|
// 1 <= x <= 2 => y = log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
fsubl MO(one) // x-1 : log(2)
|
||||||
|
fld %st // x-1 : x-1 : log(2)
|
||||||
|
fmul %st(1) // (x-1)^2 : x-1 : log(2)
|
||||||
|
fadd %st(1) // x-1+(x-1)^2 : x-1 : log(2)
|
||||||
|
fadd %st(1) // 2*(x-1)+(x-1)^2 : x-1 : log(2)
|
||||||
|
fsqrt // sqrt(2*(x-1)+(x-1)^2) : x-1 : log(2)
|
||||||
|
faddp // x-1+sqrt(2*(x-1)+(x-1)^2) : log(2)
|
||||||
|
fcoml MO(limit)
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fyl2xp1 // log1p(x-1+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
ret
|
||||||
|
|
||||||
|
2: faddl MO(one) // x+sqrt(2*(x-1)+(x-1)^2) : log(2)
|
||||||
|
fyl2x // log(x+sqrt(2*(x-1)+(x-1)^2))
|
||||||
|
ret
|
||||||
|
|
||||||
|
// x > 2^34 => y = log(x) + log(2)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
3: fyl2x // log(x)
|
||||||
|
fldln2 // log(2) : log(x)
|
||||||
|
faddp // log(x)+log(2)
|
||||||
|
ret
|
||||||
|
|
||||||
|
// 2^34 > x > 2 => y = log(2*x - 1/(x+sqrt(x*x-1)))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
4: fld %st // x : x : log(2)
|
||||||
|
fadd %st, %st(1) // x : 2*x : log(2)
|
||||||
|
fld %st // x : x : 2*x : log(2)
|
||||||
|
fmul %st(1) // x^2 : x : 2*x : log(2)
|
||||||
|
fsubl MO(one) // x^2-1 : x : 2*x : log(2)
|
||||||
|
fsqrt // sqrt(x^2-1) : x : 2*x : log(2)
|
||||||
|
faddp // x+sqrt(x^2-1) : 2*x : log(2)
|
||||||
|
fdivrl MO(one) // 1/(x+sqrt(x^2-1)) : 2*x : log(2)
|
||||||
|
fsubrp // 2*x+1/(x+sqrt(x^2)-1) : log(2)
|
||||||
|
fyl2x // log(2*x+1/(x+sqrt(x^2-1)))
|
||||||
|
ret
|
||||||
|
|
||||||
|
// x < 1 => NaN
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
5: fldz
|
||||||
|
fdiv %st, %st(0)
|
||||||
|
ret
|
||||||
|
END(__ieee754_acoshl)
|
|
@ -19,4 +19,4 @@ ENTRY(__ieee754_acosl)
|
||||||
fxch %st(1)
|
fxch %st(1)
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_acosl)
|
END (__ieee754_acosl)
|
||||||
|
|
|
@ -17,4 +17,4 @@ ENTRY(__ieee754_asin)
|
||||||
fsqrt /* sqrt (1 - x^2) */
|
fsqrt /* sqrt (1 - x^2) */
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_asin)
|
END (__ieee754_asin)
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
* Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
/* asin = atan (x / sqrt(1 - x^2)) */
|
||||||
|
ENTRY(__ieee754_asinf)
|
||||||
|
flds 4(%esp) /* x */
|
||||||
|
fst %st(1)
|
||||||
|
fmul %st(0) /* x^2 */
|
||||||
|
fld1
|
||||||
|
fsubp /* 1 - x^2 */
|
||||||
|
fsqrt /* sqrt (1 - x^2) */
|
||||||
|
fpatan
|
||||||
|
ret
|
||||||
|
END (__ieee754_asinf)
|
|
@ -19,4 +19,4 @@ ENTRY(__ieee754_asinl)
|
||||||
fsqrt /* sqrt (1 - x^2) */
|
fsqrt /* sqrt (1 - x^2) */
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_asinl)
|
END (__ieee754_asinl)
|
||||||
|
|
|
@ -12,4 +12,4 @@ ENTRY(__ieee754_atan2)
|
||||||
fldl 12(%esp)
|
fldl 12(%esp)
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_atan2)
|
END (__ieee754_atan2)
|
||||||
|
|
|
@ -12,4 +12,4 @@ ENTRY(__ieee754_atan2f)
|
||||||
flds 8(%esp)
|
flds 8(%esp)
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_atan2f)
|
END (__ieee754_atan2f)
|
||||||
|
|
|
@ -14,4 +14,4 @@ ENTRY(__ieee754_atan2l)
|
||||||
fldt 16(%esp)
|
fldt 16(%esp)
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_atan2l)
|
END (__ieee754_atan2l)
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
/* ix87 specific implementation of arctanh function.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(half,@object)
|
||||||
|
half: .double 0.5
|
||||||
|
ASM_SIZE_DIRECTIVE(half)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
ASM_TYPE_DIRECTIVE(ln2_2,@object)
|
||||||
|
ln2_2: .tfloat 0.3465735902799726547086160
|
||||||
|
ASM_SIZE_DIRECTIVE(ln2_2)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_atanh)
|
||||||
|
movl 8(%esp), %ecx
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
|
||||||
|
andl $0x80000000, %ecx // ECX == 0 iff X >= 0
|
||||||
|
|
||||||
|
fldt MO(ln2_2) // 0.5*ln2
|
||||||
|
xorl %ecx, 8(%esp)
|
||||||
|
fldl 4(%esp) // |x| : 0.5*ln2
|
||||||
|
fcoml MO(half) // |x| : 0.5*ln2
|
||||||
|
fld %st // |x| : |x| : 0.5*ln2
|
||||||
|
fnstsw // |x| : |x| : 0.5*ln2
|
||||||
|
sahf
|
||||||
|
jae 2f
|
||||||
|
fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2
|
||||||
|
fld %st // |x| : |x| : 2*|x| : 0.5*ln2
|
||||||
|
fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2
|
||||||
|
fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2
|
||||||
|
fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2
|
||||||
|
fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2
|
||||||
|
faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
sahf
|
||||||
|
jae 4f
|
||||||
|
fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
|
||||||
|
3: ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
|
||||||
|
3: ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2
|
||||||
|
fxch // |x| : 1+|x| : 0.5*ln2
|
||||||
|
fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2
|
||||||
|
fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2
|
||||||
|
fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld((1+x)/(1-x))
|
||||||
|
3: ret
|
||||||
|
END(__ieee754_atanh)
|
|
@ -0,0 +1,102 @@
|
||||||
|
/* ix87 specific implementation of arctanh function.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(half,@object)
|
||||||
|
half: .double 0.5
|
||||||
|
ASM_SIZE_DIRECTIVE(half)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(ln2_2,@object)
|
||||||
|
ln2_2: .tfloat 0.3465735902799726547086160
|
||||||
|
ASM_SIZE_DIRECTIVE(ln2_2)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_atanhf)
|
||||||
|
movl 4(%esp), %ecx
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
|
||||||
|
andl $0x80000000, %ecx // ECX == 0 iff X >= 0
|
||||||
|
|
||||||
|
fldt MO(ln2_2) // 0.5*ln2
|
||||||
|
xorl %ecx, 4(%esp)
|
||||||
|
flds 4(%esp) // |x| : 0.5*ln2
|
||||||
|
fcoml MO(half) // |x| : 0.5*ln2
|
||||||
|
fld %st(0) // |x| : |x| : 0.5*ln2
|
||||||
|
fnstsw // |x| : |x| : 0.5*ln2
|
||||||
|
sahf
|
||||||
|
jae 2f
|
||||||
|
fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2
|
||||||
|
fld %st // |x| : |x| : 2*|x| : 0.5*ln2
|
||||||
|
fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2
|
||||||
|
fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2
|
||||||
|
fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2
|
||||||
|
fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2
|
||||||
|
faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
sahf
|
||||||
|
jae 4f
|
||||||
|
fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
|
||||||
|
3: ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
|
||||||
|
3: ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2
|
||||||
|
fxch // |x| : 1+|x| : 0.5*ln2
|
||||||
|
fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2
|
||||||
|
fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2
|
||||||
|
fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld((1+x)/(1-x))
|
||||||
|
3: ret
|
||||||
|
END(__ieee754_atanhf)
|
|
@ -0,0 +1,108 @@
|
||||||
|
/* ix87 specific implementation of arctanh function.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
/* Please note that we use double values for 0.5 and 1.0. These
|
||||||
|
numbers have exact representations and so we don't get accuracy
|
||||||
|
problems. The advantage is that the code is simpler. */
|
||||||
|
ASM_TYPE_DIRECTIVE(half,@object)
|
||||||
|
half: .double 0.5
|
||||||
|
ASM_SIZE_DIRECTIVE(half)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(ln2_2,@object)
|
||||||
|
ln2_2: .tfloat 0.3465735902799726547086160
|
||||||
|
ASM_SIZE_DIRECTIVE(ln2_2)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_atanhl)
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
|
||||||
|
andl $0x8000, %ecx // ECX == 0 iff X >= 0
|
||||||
|
|
||||||
|
fldt MO(ln2_2) // 0.5*ln2
|
||||||
|
xorl %ecx, 12(%esp)
|
||||||
|
fldt 4(%esp) // |x| : 0.5*ln2
|
||||||
|
fcoml MO(half) // |x| : 0.5*ln2
|
||||||
|
fld %st(0) // |x| : |x| : 0.5*ln2
|
||||||
|
fnstsw // |x| : |x| : 0.5*ln2
|
||||||
|
sahf
|
||||||
|
jae 2f
|
||||||
|
fadd %st, %st(1) // |x| : 2*|x| : 0.5*ln2
|
||||||
|
fld %st // |x| : |x| : 2*|x| : 0.5*ln2
|
||||||
|
fsubrl MO(one) // 1-|x| : |x| : 2*|x| : 0.5*ln2
|
||||||
|
fxch // |x| : 1-|x| : 2*|x| : 0.5*ln2
|
||||||
|
fmul %st(2) // 2*|x|^2 : 1-|x| : 2*|x| : 0.5*ln2
|
||||||
|
fdivp // (2*|x|^2)/(1-|x|) : 2*|x| : 0.5*ln2
|
||||||
|
faddp // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fcoml MO(limit) // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fnstsw // 2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
sahf
|
||||||
|
jae 4f
|
||||||
|
fyl2xp1 // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
|
||||||
|
3: ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
4: faddl MO(one) // 1+2*|x|+(2*|x|^2)/(1-|x|) : 0.5*ln2
|
||||||
|
fyl2x // 0.5*ln2*ld(1+2*|x|+(2*|x|^2)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld(1+2*x+(2*x^2)/(1-x))
|
||||||
|
3: ret
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
2: faddl MO(one) // 1+|x| : |x| : 0.5*ln2
|
||||||
|
fxch // |x| : 1+|x| : 0.5*ln2
|
||||||
|
fsubrl MO(one) // 1-|x| : 1+|x| : 0.5*ln2
|
||||||
|
fdivrp // (1+|x|)/(1-|x|) : 0.5*ln2
|
||||||
|
fyl2x // 0.5*ln2*ld((1+|x|)/(1-|x|))
|
||||||
|
jecxz 3f
|
||||||
|
fchs // 0.5*ln2*ld((1+x)/(1-x))
|
||||||
|
3: ret
|
||||||
|
END(__ieee754_atanhl)
|
|
@ -38,4 +38,4 @@ ENTRY(__ieee754_exp)
|
||||||
jz .LpInf /* If positive, jump. */
|
jz .LpInf /* If positive, jump. */
|
||||||
fldz /* Set result to 0. */
|
fldz /* Set result to 0. */
|
||||||
.LpInf: ret
|
.LpInf: ret
|
||||||
PSEUDO_END (__ieee754_exp)
|
END (__ieee754_exp)
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
* Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
/* e^x = 2^(x * log2(e)) */
|
||||||
|
ENTRY(__ieee754_expf)
|
||||||
|
flds 4(%esp)
|
||||||
|
/* I added the following ugly construct because exp(+-Inf) resulted
|
||||||
|
in NaN. The ugliness results from the bright minds at Intel.
|
||||||
|
For the i686 the code can be written better.
|
||||||
|
-- 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 */
|
||||||
|
fstp %st(1)
|
||||||
|
ret
|
||||||
|
|
||||||
|
.LisInf:
|
||||||
|
andb $2, %ah /* Test sign. */
|
||||||
|
jz .LpInf /* If positive, jump. */
|
||||||
|
fldz /* Set result to 0. */
|
||||||
|
.LpInf: ret
|
||||||
|
END (__ieee754_expf)
|
|
@ -40,4 +40,4 @@ ENTRY(__ieee754_expl)
|
||||||
jz .LpInf /* If positive, jump. */
|
jz .LpInf /* If positive, jump. */
|
||||||
fldz /* Set result to 0. */
|
fldz /* Set result to 0. */
|
||||||
.LpInf: ret
|
.LpInf: ret
|
||||||
PSEUDO_END (__ieee754_expl)
|
END (__ieee754_expl)
|
||||||
|
|
|
@ -16,4 +16,4 @@ ENTRY(__ieee754_fmod)
|
||||||
jp 1b
|
jp 1b
|
||||||
fstpl %st(1)
|
fstpl %st(1)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_fmod)
|
END (__ieee754_fmod)
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
* Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
ENTRY(__ieee754_fmodf)
|
||||||
|
flds 8(%esp)
|
||||||
|
flds 4(%esp)
|
||||||
|
1: fprem
|
||||||
|
fstsw %ax
|
||||||
|
sahf
|
||||||
|
jp 1b
|
||||||
|
fstpl %st(1)
|
||||||
|
ret
|
||||||
|
END(__ieee754_fmodf)
|
|
@ -18,4 +18,4 @@ ENTRY(__ieee754_fmodl)
|
||||||
jp 1b
|
jp 1b
|
||||||
fstpl %st(1)
|
fstpl %st(1)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_fmodl)
|
END (__ieee754_fmodl)
|
||||||
|
|
|
@ -1,15 +1,59 @@
|
||||||
/*
|
/*
|
||||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
* Public domain.
|
* Public domain.
|
||||||
|
*
|
||||||
|
* Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
RCSID("$NetBSD: e_log.S,v 1.4 1995/05/08 23:48:39 jtc Exp $")
|
RCSID("$NetBSD: e_log.S,v 1.4 1995/05/08 23:48:39 jtc Exp $")
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
ENTRY(__ieee754_log)
|
ENTRY(__ieee754_log)
|
||||||
fldln2
|
fldln2 // log(2)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp) // x : log(2)
|
||||||
fyl2x
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
fld %st // x : x : log(2)
|
||||||
|
fsubl MO(one) // x-1 : x : log(2)
|
||||||
|
fld %st // x-1 : x-1 : x : log(2)
|
||||||
|
fabs // |x-1| : x-1 : x : log(2)
|
||||||
|
fcompl MO(limit) // x-1 : x : log(2)
|
||||||
|
fnstsw // x-1 : x : log(2)
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fstp %st(1) // x-1 : log(2)
|
||||||
|
fyl2xp1 // log(x)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_log)
|
|
||||||
|
2: fincstp // x : log(2)
|
||||||
|
fyl2x // log(x)
|
||||||
|
ret
|
||||||
|
END (__ieee754_log)
|
||||||
|
|
|
@ -1,15 +1,59 @@
|
||||||
/*
|
/*
|
||||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
* Public domain.
|
* Public domain.
|
||||||
|
*
|
||||||
|
* Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
RCSID("$NetBSD: e_log10.S,v 1.4 1995/05/08 23:49:24 jtc Exp $")
|
RCSID("$NetBSD: e_log10.S,v 1.4 1995/05/08 23:49:24 jtc Exp $")
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
ENTRY(__ieee754_log10)
|
ENTRY(__ieee754_log10)
|
||||||
fldlg2
|
fldlg2 // log10(2)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp) // x : log10(2)
|
||||||
fyl2x
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
fld %st // x : x : log10(2)
|
||||||
|
fsubl MO(one) // x-1 : x : log10(2)
|
||||||
|
fld %st // x-1 : x-1 : x : log10(2)
|
||||||
|
fabs // |x-1| : x-1 : x : log10(2)
|
||||||
|
fcompl MO(limit) // x-1 : x : log10(2)
|
||||||
|
fnstsw // x-1 : x : log10(2)
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fstp %st(1) // x-1 : log10(2)
|
||||||
|
fyl2xp1 // log10(x)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_log10)
|
|
||||||
|
2: fincstp // x : log10(2)
|
||||||
|
fyl2x // log10(x)
|
||||||
|
ret
|
||||||
|
END (__ieee754_log10)
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
* Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*
|
||||||
|
* Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_log10f)
|
||||||
|
fldlg2 // log10(2)
|
||||||
|
flds 4(%esp) // x : log10(2)
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
fld %st // x : x : log10(2)
|
||||||
|
fsubl MO(one) // x-1 : x : log10(2)
|
||||||
|
fld %st // x-1 : x-1 : x : log10(2)
|
||||||
|
fabs // |x-1| : x-1 : x : log10(2)
|
||||||
|
fcompl MO(limit) // x-1 : x : log10(2)
|
||||||
|
fnstsw // x-1 : x : log10(2)
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fstp %st(1) // x-1 : log10(2)
|
||||||
|
fyl2xp1 // log10(x)
|
||||||
|
ret
|
||||||
|
|
||||||
|
2: fincstp // x : log10(2)
|
||||||
|
fyl2x // log10(x)
|
||||||
|
ret
|
||||||
|
END (__ieee754_log10f)
|
|
@ -3,15 +3,59 @@
|
||||||
* Public domain.
|
* Public domain.
|
||||||
*
|
*
|
||||||
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
|
* Adapted for `long double' by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*
|
||||||
|
* Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
RCSID("$NetBSD: $")
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
ENTRY(__ieee754_log10l)
|
ENTRY(__ieee754_log10l)
|
||||||
fldlg2
|
fldlg2 // log10(2)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp) // x : log10(2)
|
||||||
fyl2x
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
fld %st // x : x : log10(2)
|
||||||
|
fsubl MO(one) // x-1 : x : log10(2)
|
||||||
|
fld %st // x-1 : x-1 : x : log10(2)
|
||||||
|
fabs // |x-1| : x-1 : x : log10(2)
|
||||||
|
fcompl MO(limit) // x-1 : x : log10(2)
|
||||||
|
fnstsw // x-1 : x : log10(2)
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fstp %st(1) // x-1 : log10(2)
|
||||||
|
fyl2xp1 // log10(x)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END(__ieee754_log10l)
|
|
||||||
|
2: fincstp // x : log10(2)
|
||||||
|
fyl2x // log10(x)
|
||||||
|
ret
|
||||||
|
END(__ieee754_log10l)
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
* Adapted for float by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*
|
||||||
|
* Changed to use fyl2xp1 for values near 1, <drepper@cygnus.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: e_log.S,v 1.4 1995/05/08 23:48:39 jtc Exp $")
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__ieee754_logf)
|
||||||
|
fldln2 // log(2)
|
||||||
|
flds 4(%esp) // x : log(2)
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
fld %st // x : x : log(2)
|
||||||
|
fsubl MO(one) // x-1 : x : log(2)
|
||||||
|
fld %st // x-1 : x-1 : x : log(2)
|
||||||
|
fabs // |x-1| : x-1 : x : log(2)
|
||||||
|
fcompl MO(limit) // x-1 : x : log(2)
|
||||||
|
fnstsw // x-1 : x : log(2)
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fstp %st(1) // x-1 : log(2)
|
||||||
|
fyl2xp1 // log(x)
|
||||||
|
ret
|
||||||
|
|
||||||
|
2: fincstp // x : log(2)
|
||||||
|
fyl2x // log(x)
|
||||||
|
ret
|
||||||
|
END (__ieee754_logf)
|
|
@ -9,9 +9,52 @@
|
||||||
|
|
||||||
RCSID("$NetBSD: $")
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
ENTRY(__ieee754_logl)
|
ENTRY(__ieee754_logl)
|
||||||
fldln2
|
fldln2 // log(2)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp) // x : log(2)
|
||||||
fyl2x
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
fld %st // x : x : log(2)
|
||||||
|
fsubl MO(one) // x-1 : x : log(2)
|
||||||
|
fld %st // x-1 : x-1 : x : log(2)
|
||||||
|
fabs // |x-1| : x-1 : x : log(2)
|
||||||
|
fcompl MO(limit) // x-1 : x : log(2)
|
||||||
|
fnstsw // x-1 : x : log(2)
|
||||||
|
sahf
|
||||||
|
ja 2f
|
||||||
|
fstp %st(1) // x-1 : log(2)
|
||||||
|
fyl2xp1 // log(x)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END(__ieee754_logl)
|
|
||||||
|
2: fincstp // x : log(2)
|
||||||
|
fyl2x // log(x)
|
||||||
|
ret
|
||||||
|
END (__ieee754_logl)
|
||||||
|
|
|
@ -16,4 +16,4 @@ ENTRY(__ieee754_remainder)
|
||||||
jp 1b
|
jp 1b
|
||||||
fstpl %st(1)
|
fstpl %st(1)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_remainder)
|
END (__ieee754_remainder)
|
||||||
|
|
|
@ -16,4 +16,4 @@ ENTRY(__ieee754_remainderf)
|
||||||
jp 1b
|
jp 1b
|
||||||
fstpl %st(1)
|
fstpl %st(1)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_remainderf)
|
END (__ieee754_remainderf)
|
||||||
|
|
|
@ -17,4 +17,4 @@ ENTRY(__ieee754_remainderl)
|
||||||
sahf
|
sahf
|
||||||
jp 1b
|
jp 1b
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_remainderl)
|
END (__ieee754_remainderl)
|
||||||
|
|
|
@ -12,4 +12,4 @@ ENTRY(__ieee754_scalb)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
ret
|
ret
|
||||||
PSEUDO_END(__ieee754_scalb)
|
END(__ieee754_scalb)
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||||
|
* Public domain.
|
||||||
|
* Adapted for float type by Ulrich Drepper <drepper@cygnus.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
RCSID("$NetBSD: $")
|
||||||
|
|
||||||
|
ENTRY(__ieee754_scalbf)
|
||||||
|
flds 8(%esp)
|
||||||
|
flds 4(%esp)
|
||||||
|
fscale
|
||||||
|
ret
|
||||||
|
END(__ieee754_scalbf)
|
|
@ -14,4 +14,4 @@ ENTRY(__ieee754_scalbl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
ret
|
ret
|
||||||
PSEUDO_END(__ieee754_scalbl)
|
END(__ieee754_scalbl)
|
||||||
|
|
|
@ -11,4 +11,4 @@ ENTRY(__ieee754_sqrt)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
fsqrt
|
fsqrt
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_sqrt)
|
END (__ieee754_sqrt)
|
||||||
|
|
|
@ -11,4 +11,4 @@ ENTRY(__ieee754_sqrtf)
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
fsqrt
|
fsqrt
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_sqrtf)
|
END (__ieee754_sqrtf)
|
||||||
|
|
|
@ -13,4 +13,4 @@ ENTRY(__ieee754_sqrtl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fsqrt
|
fsqrt
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ieee754_sqrtl)
|
END (__ieee754_sqrtl)
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
/* ix87 specific implementation of arcsinh.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(huge,@object)
|
||||||
|
huge: .double 1e+300
|
||||||
|
ASM_SIZE_DIRECTIVE(huge)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__asinh)
|
||||||
|
movl 8(%esp), %ecx
|
||||||
|
movl $0x7fffffff, %eax
|
||||||
|
andl %ecx, %eax
|
||||||
|
andl $0x80000000, %ecx
|
||||||
|
xorl %ecx, 8(%esp)
|
||||||
|
fldl 4(%esp) // |x|
|
||||||
|
cmpl $0x3e300000, %eax
|
||||||
|
jb 2f // |x| < 2^-28
|
||||||
|
fldln2 // log(2) : |x|
|
||||||
|
cmpl $0x41b00000, %eax
|
||||||
|
fxch // |x| : log(2)
|
||||||
|
ja 3f // |x| > 2^28
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
cmpl $0x40000000, %eax
|
||||||
|
ja 5f // |x| > 2
|
||||||
|
|
||||||
|
// 2^-28 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2)))
|
||||||
|
fld %st // |x| : |x| : log(2)
|
||||||
|
fmul %st(1) // |x|^2 : |x| : log(2)
|
||||||
|
fld %st // |x|^2 : |x|^2 : |x| : log(2)
|
||||||
|
faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2)
|
||||||
|
fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
|
||||||
|
faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
|
||||||
|
fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2)
|
||||||
|
faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2)
|
||||||
|
fcoml MO(limit)
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
ja 6f
|
||||||
|
fyl2xp1
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
6: faddl MO(one)
|
||||||
|
fyl2x
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
// |x| < 2^-28 => y = x (inexact iff |x| != 0.0)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
2:
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
jecxz 4f
|
||||||
|
fchs // x
|
||||||
|
4: fld %st // x : x
|
||||||
|
faddl MO(huge) // huge+x : x
|
||||||
|
fincstp // x
|
||||||
|
ret
|
||||||
|
|
||||||
|
// |x| > 2^28 => y = sign(x) * (log(|x|) + log(2))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
3: fyl2x // log(|x|)
|
||||||
|
fldln2 // log(2) : log(|x|)
|
||||||
|
faddp // log(|x|)+log(2)
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
// |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1)))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
5: fld %st // |x| : |x| : log(2)
|
||||||
|
fadd %st, %st(1) // |x| : 2*|x| : log(2)
|
||||||
|
fld %st // |x| : |x| : 2*|x| : log(2)
|
||||||
|
fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2)
|
||||||
|
faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2)
|
||||||
|
fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2)
|
||||||
|
faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2)
|
||||||
|
fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2)
|
||||||
|
faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2)
|
||||||
|
fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2)))
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
END(__asinh)
|
||||||
|
weak_alias (__asinh, asinh)
|
|
@ -0,0 +1,132 @@
|
||||||
|
/* ix87 specific implementation of arcsinh.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(huge,@object)
|
||||||
|
huge: .double 1e+36
|
||||||
|
ASM_SIZE_DIRECTIVE(huge)
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__asinhf)
|
||||||
|
movl 4(%esp), %ecx
|
||||||
|
movl $0x7fffffff, %eax
|
||||||
|
andl %ecx, %eax
|
||||||
|
andl $0x80000000, %ecx
|
||||||
|
xorl %ecx, 8(%esp)
|
||||||
|
flds 4(%esp) // |x|
|
||||||
|
cmpl $0x38000000, %eax
|
||||||
|
jb 2f // |x| < 2^-14
|
||||||
|
fldln2 // log(2) : |x|
|
||||||
|
cmpl $0x47000000, %eax
|
||||||
|
fxch // |x| : log(2)
|
||||||
|
ja 3f // |x| > 2^14
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
cmpl $0x40000000, %eax
|
||||||
|
ja 5f // |x| > 2
|
||||||
|
|
||||||
|
// 2^-14 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2)))
|
||||||
|
fld %st // |x| : |x| : log(2)
|
||||||
|
fmul %st(1) // |x|^2 : |x| : log(2)
|
||||||
|
fld %st // |x|^2 : |x|^2 : |x| : log(2)
|
||||||
|
faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2)
|
||||||
|
fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
|
||||||
|
faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
|
||||||
|
fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2)
|
||||||
|
faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2)
|
||||||
|
fcoml MO(limit)
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
ja 6f
|
||||||
|
fyl2xp1
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
6: faddl MO(one)
|
||||||
|
fyl2x
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
// |x| < 2^-14 => y = x (inexact iff |x| != 0.0)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
2:
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
jecxz 4f
|
||||||
|
fchs // x
|
||||||
|
4: fld %st // x : x
|
||||||
|
faddl MO(huge) // huge+x : x
|
||||||
|
fincstp // x
|
||||||
|
ret
|
||||||
|
|
||||||
|
// |x| > 2^14 => y = sign(x) * (log(|x|) + log(2))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
3: fyl2x // log(|x|)
|
||||||
|
fldln2 // log(2) : log(|x|)
|
||||||
|
faddp // log(|x|)+log(2)
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
// |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1)))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
5: fld %st // |x| : |x| : log(2)
|
||||||
|
fadd %st, %st(1) // |x| : 2*|x| : log(2)
|
||||||
|
fld %st // |x| : |x| : 2*|x| : log(2)
|
||||||
|
fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2)
|
||||||
|
faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2)
|
||||||
|
fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2)
|
||||||
|
faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2)
|
||||||
|
fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2)
|
||||||
|
faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2)
|
||||||
|
fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2)))
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
END(__asinhf)
|
||||||
|
weak_alias (__asinhf, asinhf)
|
|
@ -0,0 +1,140 @@
|
||||||
|
/* ix87 specific implementation of arcsinh.
|
||||||
|
Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <machine/asm.h>
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
ASM_TYPE_DIRECTIVE(huge,@object)
|
||||||
|
huge: .tfloat 1e+4930
|
||||||
|
ASM_SIZE_DIRECTIVE(huge)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
/* Please note that we use double value for 1.0. This number
|
||||||
|
has an exact representation and so we don't get accuracy
|
||||||
|
problems. The advantage is that the code is simpler. */
|
||||||
|
ASM_TYPE_DIRECTIVE(one,@object)
|
||||||
|
one: .double 1.0
|
||||||
|
ASM_SIZE_DIRECTIVE(one)
|
||||||
|
/* It is not important that this constant is precise. It is only
|
||||||
|
a value which is known to be on the safe side for using the
|
||||||
|
fyl2xp1 instruction. */
|
||||||
|
ASM_TYPE_DIRECTIVE(limit,@object)
|
||||||
|
limit: .double 0.29
|
||||||
|
ASM_SIZE_DIRECTIVE(limit)
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
#define MO(op) op##@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
#define MO(op) op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__asinhl)
|
||||||
|
movl 12(%esp), %ecx
|
||||||
|
movl $0x7fff, %eax
|
||||||
|
andl %ecx, %eax
|
||||||
|
andl $0x8000, %ecx
|
||||||
|
xorl %ecx, 12(%esp)
|
||||||
|
fldt 4(%esp) // |x|
|
||||||
|
cmpl $0x3fde, %eax
|
||||||
|
jb 2f // |x| < 2^-34
|
||||||
|
fldln2 // log(2) : |x|
|
||||||
|
cmpl $0x4020, %eax
|
||||||
|
fxch // |x| : log(2)
|
||||||
|
ja 3f // |x| > 2^34
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
cmpl $0x4000, %eax
|
||||||
|
ja 5f // |x| > 2
|
||||||
|
|
||||||
|
// 2^-34 <= |x| <= 2 => y = sign(x)*log1p(|x|+|x|^2/(1+sqrt(1+|x|^2)))
|
||||||
|
fld %st // |x| : |x| : log(2)
|
||||||
|
fmul %st(1) // |x|^2 : |x| : log(2)
|
||||||
|
fld %st // |x|^2 : |x|^2 : |x| : log(2)
|
||||||
|
faddl MO(one) // 1+|x|^2 : |x|^2 : |x| : log(2)
|
||||||
|
fsqrt // sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
|
||||||
|
faddl MO(one) // 1+sqrt(1+|x|^2) : |x|^2 : |x| : log(2)
|
||||||
|
fdivrp // |x|^2/(1+sqrt(1+|x|^2)) : |x| : log(2)
|
||||||
|
faddp // |x|+|x|^2/(1+sqrt(1+|x|^2)) : log(2)
|
||||||
|
fcoml MO(limit)
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
ja 6f
|
||||||
|
fyl2xp1
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
6: faddl MO(one)
|
||||||
|
fyl2x
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
// |x| < 2^-34 => y = x (inexact iff |x| != 0.0)
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
2:
|
||||||
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
jecxz 4f
|
||||||
|
fchs // x
|
||||||
|
4: fld %st // x : x
|
||||||
|
fldt MO(huge) // huge : x : x
|
||||||
|
faddp // huge+x : x
|
||||||
|
fincstp // x
|
||||||
|
ret
|
||||||
|
|
||||||
|
// |x| > 2^34 => y = sign(x) * (log(|x|) + log(2))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
3: fyl2x // log(|x|)
|
||||||
|
fldln2 // log(2) : log(|x|)
|
||||||
|
faddp // log(|x|)+log(2)
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
|
||||||
|
// |x| > 2 => y = sign(x) * log(2*|x| + 1/(|x|+sqrt(x*x+1)))
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
5: fld %st // |x| : |x| : log(2)
|
||||||
|
fadd %st, %st(1) // |x| : 2*|x| : log(2)
|
||||||
|
fld %st // |x| : |x| : 2*|x| : log(2)
|
||||||
|
fmul %st(1) // |x|^2 : |x| : 2*|x| : log(2)
|
||||||
|
faddl MO(one) // 1+|x|^2 : |x| : 2*|x| : log(2)
|
||||||
|
fsqrt // sqrt(1+|x|^2) : |x| : 2*|x| : log(2)
|
||||||
|
faddp // |x|+sqrt(1+|x|^2) : 2*|x| : log(2)
|
||||||
|
fdivrl MO(one) // 1/(|x|+sqrt(1+|x|^2)) : 2*|x| : log(2)
|
||||||
|
faddp // 2*|x|+1/(|x|+sqrt(1+|x|^2)) : log(2)
|
||||||
|
fyl2x // log(2*|x|+1/(|x|+sqrt(1+|x|^2)))
|
||||||
|
jecxz 4f
|
||||||
|
fchs
|
||||||
|
4: ret
|
||||||
|
END(__asinhl)
|
||||||
|
weak_alias (__asinhl, asinhl)
|
|
@ -12,5 +12,5 @@ ENTRY(__atan)
|
||||||
fld1
|
fld1
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__atan)
|
END (__atan)
|
||||||
weak_alias (__atan, atan)
|
weak_alias (__atan, atan)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__atanf)
|
||||||
fld1
|
fld1
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__atanf)
|
END (__atanf)
|
||||||
weak_alias (__atanf, atanf)
|
weak_alias (__atanf, atanf)
|
||||||
|
|
|
@ -14,5 +14,5 @@ ENTRY(__atanl)
|
||||||
fld1
|
fld1
|
||||||
fpatan
|
fpatan
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__atanl)
|
END (__atanl)
|
||||||
weak_alias (__atanl, atanl)
|
weak_alias (__atanl, atanl)
|
||||||
|
|
|
@ -30,5 +30,5 @@ ENTRY(__ceil)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ceil)
|
END (__ceil)
|
||||||
weak_alias (__ceil, ceil)
|
weak_alias (__ceil, ceil)
|
||||||
|
|
|
@ -30,5 +30,5 @@ ENTRY(__ceilf)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ceilf)
|
END (__ceilf)
|
||||||
weak_alias (__ceilf, ceilf)
|
weak_alias (__ceilf, ceilf)
|
||||||
|
|
|
@ -31,5 +31,5 @@ ENTRY(__ceill)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ceill)
|
END (__ceill)
|
||||||
weak_alias (__ceill, ceill)
|
weak_alias (__ceill, ceill)
|
||||||
|
|
|
@ -16,5 +16,5 @@ ENTRY(__copysign)
|
||||||
movl %eax,8(%esp)
|
movl %eax,8(%esp)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__copysign)
|
END (__copysign)
|
||||||
weak_alias (__copysign, copysign)
|
weak_alias (__copysign, copysign)
|
||||||
|
|
|
@ -16,5 +16,5 @@ ENTRY(__copysignf)
|
||||||
movl %eax,4(%esp)
|
movl %eax,4(%esp)
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__copysignf)
|
END (__copysignf)
|
||||||
weak_alias (__copysignf, copysignf)
|
weak_alias (__copysignf, copysignf)
|
||||||
|
|
|
@ -17,5 +17,5 @@ ENTRY(__copysignl)
|
||||||
movl %eax,12(%esp)
|
movl %eax,12(%esp)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__copysignl)
|
END (__copysignl)
|
||||||
weak_alias (__copysignl, copysignl)
|
weak_alias (__copysignl, copysignl)
|
||||||
|
|
|
@ -11,7 +11,7 @@ ENTRY(__cos)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
fcos
|
fcos
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 1f
|
jnz 1f
|
||||||
ret
|
ret
|
||||||
1: fldpi
|
1: fldpi
|
||||||
|
@ -19,10 +19,10 @@ ENTRY(__cos)
|
||||||
fxch %st(1)
|
fxch %st(1)
|
||||||
2: fprem1
|
2: fprem1
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 2b
|
jnz 2b
|
||||||
fstp %st(1)
|
fstp %st(1)
|
||||||
fcos
|
fcos
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__cos)
|
END (__cos)
|
||||||
weak_alias (__cos, cos)
|
weak_alias (__cos, cos)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__cosf)
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
fcos
|
fcos
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__cosf)
|
END (__cosf)
|
||||||
weak_alias (__cosf, cosf)
|
weak_alias (__cosf, cosf)
|
||||||
|
|
|
@ -13,7 +13,7 @@ ENTRY(__cosl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fcos
|
fcos
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 1f
|
jnz 1f
|
||||||
ret
|
ret
|
||||||
1: fldpi
|
1: fldpi
|
||||||
|
@ -21,10 +21,10 @@ ENTRY(__cosl)
|
||||||
fxch %st(1)
|
fxch %st(1)
|
||||||
2: fprem1
|
2: fprem1
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 2b
|
jnz 2b
|
||||||
fstp %st(1)
|
fstp %st(1)
|
||||||
fcos
|
fcos
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__cosl)
|
END (__cosl)
|
||||||
weak_alias (__cosl, cosl)
|
weak_alias (__cosl, cosl)
|
||||||
|
|
|
@ -14,5 +14,5 @@ ENTRY(__finite)
|
||||||
setne %al
|
setne %al
|
||||||
andl $0x000000ff, %eax
|
andl $0x000000ff, %eax
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__finite)
|
END (__finite)
|
||||||
weak_alias (__finite, finite)
|
weak_alias (__finite, finite)
|
||||||
|
|
|
@ -14,5 +14,5 @@ ENTRY(__finitef)
|
||||||
setne %al
|
setne %al
|
||||||
andl $0x000000ff, %eax
|
andl $0x000000ff, %eax
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__finitef)
|
END (__finitef)
|
||||||
weak_alias (__finitef, finitef)
|
weak_alias (__finitef, finitef)
|
||||||
|
|
|
@ -16,5 +16,5 @@ ENTRY(__finitel)
|
||||||
setne %al
|
setne %al
|
||||||
andl $0x000000ff, %eax
|
andl $0x000000ff, %eax
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__finitel)
|
END (__finitel)
|
||||||
weak_alias (__finitel, finitel)
|
weak_alias (__finitel, finitel)
|
||||||
|
|
|
@ -26,5 +26,5 @@ ENTRY(__floor)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__floor)
|
END (__floor)
|
||||||
weak_alias (__floor, floor)
|
weak_alias (__floor, floor)
|
||||||
|
|
|
@ -26,5 +26,5 @@ ENTRY(__floorf)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__floorf)
|
END (__floorf)
|
||||||
weak_alias (__floorf, floorf)
|
weak_alias (__floorf, floorf)
|
||||||
|
|
|
@ -27,5 +27,5 @@ ENTRY(__floorl)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__floorl)
|
END (__floorl)
|
||||||
weak_alias (__floorl, floorl)
|
weak_alias (__floorl, floorl)
|
||||||
|
|
|
@ -21,5 +21,5 @@ ENTRY(__ilogb)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ilogb)
|
END (__ilogb)
|
||||||
weak_alias (__ilogb, ilogb)
|
weak_alias (__ilogb, ilogb)
|
||||||
|
|
|
@ -21,5 +21,5 @@ ENTRY(__ilogbf)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ilogbf)
|
END (__ilogbf)
|
||||||
weak_alias (__ilogbf, ilogbf)
|
weak_alias (__ilogbf, ilogbf)
|
||||||
|
|
|
@ -21,5 +21,5 @@ ENTRY(__ilogbl)
|
||||||
|
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__ilogbl)
|
END (__ilogbl)
|
||||||
weak_alias (__ilogbl, ilogbl)
|
weak_alias (__ilogbl, ilogbl)
|
||||||
|
|
|
@ -7,18 +7,56 @@
|
||||||
|
|
||||||
RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $")
|
RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $")
|
||||||
|
|
||||||
/*
|
#ifdef __ELF__
|
||||||
* Since the fyl2xp1 instruction has such a limited range:
|
.section .rodata
|
||||||
* -(1 - (sqrt(2) / 2)) <= x <= sqrt(2) - 1
|
#else
|
||||||
* it's not worth trying to use it.
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
/* The fyl2xp1 can only be used for values in
|
||||||
|
-1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2
|
||||||
|
0.29 is a safe value.
|
||||||
*/
|
*/
|
||||||
|
limit: .double 0.29
|
||||||
|
one: .double 1.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
|
||||||
|
* otherwise fyl2x with the needed extra computation.
|
||||||
|
*/
|
||||||
|
.text
|
||||||
ENTRY(__log1p)
|
ENTRY(__log1p)
|
||||||
fldln2
|
fldln2
|
||||||
|
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
fld1
|
|
||||||
faddp
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fld %st
|
||||||
|
fabs
|
||||||
|
#ifdef PIC
|
||||||
|
fcompl limit@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
fcompl limit
|
||||||
|
#endif
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jc 2f
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
faddl one@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
faddl one
|
||||||
|
#endif
|
||||||
fyl2x
|
fyl2x
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__log1p)
|
|
||||||
|
2: fyl2xp1
|
||||||
|
ret
|
||||||
|
|
||||||
|
END (__log1p)
|
||||||
weak_alias (__log1p, log1p)
|
weak_alias (__log1p, log1p)
|
||||||
|
|
|
@ -7,18 +7,56 @@
|
||||||
|
|
||||||
RCSID("$NetBSD: s_log1pf.S,v 1.4 1995/05/09 00:13:05 jtc Exp $")
|
RCSID("$NetBSD: s_log1pf.S,v 1.4 1995/05/09 00:13:05 jtc Exp $")
|
||||||
|
|
||||||
/*
|
#ifdef __ELF__
|
||||||
* Since the fyl2xp1 instruction has such a limited range:
|
.section .rodata
|
||||||
* -(1 - (sqrt(2) / 2)) <= x <= sqrt(2) - 1
|
#else
|
||||||
* it's not worth trying to use it.
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
/* The fyl2xp1 can only be used for values in
|
||||||
|
-1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2
|
||||||
|
0.29 is a safe value.
|
||||||
*/
|
*/
|
||||||
|
limit: .float 0.29
|
||||||
|
one: .float 1.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
|
||||||
|
* otherwise fyl2x with the needed extra computation.
|
||||||
|
*/
|
||||||
|
.text
|
||||||
ENTRY(__log1pf)
|
ENTRY(__log1pf)
|
||||||
fldln2
|
fldln2
|
||||||
|
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
fld1
|
|
||||||
faddp
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fld %st
|
||||||
|
fabs
|
||||||
|
#ifdef PIC
|
||||||
|
fcomps limit@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
fcomps limit
|
||||||
|
#endif
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jc 2f
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
fadds one@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
fadds one
|
||||||
|
#endif
|
||||||
fyl2x
|
fyl2x
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__log1pf)
|
|
||||||
|
2: fyl2xp1
|
||||||
|
ret
|
||||||
|
|
||||||
|
END (__log1pf)
|
||||||
weak_alias (__log1pf, log1pf)
|
weak_alias (__log1pf, log1pf)
|
||||||
|
|
|
@ -7,20 +7,62 @@
|
||||||
|
|
||||||
#include <machine/asm.h>
|
#include <machine/asm.h>
|
||||||
|
|
||||||
RCSID("$NetBSD: $")
|
RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $")
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
.section .rodata
|
||||||
|
#else
|
||||||
|
.text
|
||||||
|
#endif
|
||||||
|
.align ALIGNARG(4)
|
||||||
|
/* The fyl2xp1 can only be used for values in
|
||||||
|
-1 + sqrt(2) / 2 <= x <= 1 - sqrt(2) / 2
|
||||||
|
0.29 is a safe value.
|
||||||
|
*/
|
||||||
|
limit: .tfloat 0.29
|
||||||
|
/* Please note: we use a double value here. Since 1.0 has
|
||||||
|
an exact representation this does not effect the accuracy
|
||||||
|
but it helps to optimize the code. */
|
||||||
|
one: .double 1.0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Since the fyl2xp1 instruction has such a limited range:
|
* Use the fyl2xp1 function when the argument is in the range -0.29 to 0.29,
|
||||||
* -(1 - (sqrt(2) / 2)) <= x <= sqrt(2) - 1
|
* otherwise fyl2x with the needed extra computation.
|
||||||
* it's not worth trying to use it.
|
|
||||||
*/
|
*/
|
||||||
|
.text
|
||||||
ENTRY(__log1pl)
|
ENTRY(__log1pl)
|
||||||
fldln2
|
fldln2
|
||||||
|
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fld1
|
|
||||||
faddp
|
#ifdef PIC
|
||||||
|
call 1f
|
||||||
|
1: popl %edx
|
||||||
|
addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fld %st
|
||||||
|
fabs
|
||||||
|
#ifdef PIC
|
||||||
|
fldt limit@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
fldt limit
|
||||||
|
#endif
|
||||||
|
fcompp
|
||||||
|
fnstsw
|
||||||
|
sahf
|
||||||
|
jnc 2f
|
||||||
|
|
||||||
|
#ifdef PIC
|
||||||
|
faddl one@GOTOFF(%edx)
|
||||||
|
#else
|
||||||
|
faddl one
|
||||||
|
#endif
|
||||||
fyl2x
|
fyl2x
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__log1pl)
|
|
||||||
|
2: fyl2xp1
|
||||||
|
ret
|
||||||
|
|
||||||
|
END (__log1pl)
|
||||||
weak_alias (__log1pl, log1pl)
|
weak_alias (__log1pl, log1pl)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__logb)
|
||||||
fxtract
|
fxtract
|
||||||
fstpl %st
|
fstpl %st
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__logb)
|
END (__logb)
|
||||||
weak_alias (__logb, logb)
|
weak_alias (__logb, logb)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__logbf)
|
||||||
fxtract
|
fxtract
|
||||||
fstpl %st
|
fstpl %st
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__logbf)
|
END (__logbf)
|
||||||
weak_alias (__logbf, logbf)
|
weak_alias (__logbf, logbf)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__logbl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fxtract
|
fxtract
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__logbl)
|
END (__logbl)
|
||||||
weak_alias (__logbl, logbl)
|
weak_alias (__logbl, logbl)
|
||||||
|
|
|
@ -11,5 +11,5 @@ ENTRY(__rint)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
frndint
|
frndint
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__rint)
|
END (__rint)
|
||||||
weak_alias (__rint, rint)
|
weak_alias (__rint, rint)
|
||||||
|
|
|
@ -11,5 +11,5 @@ ENTRY(__rintf)
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
frndint
|
frndint
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__rintf)
|
END (__rintf)
|
||||||
weak_alias (__rintf, rintf)
|
weak_alias (__rintf, rintf)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__rintl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
frndint
|
frndint
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__rintl)
|
END (__rintl)
|
||||||
weak_alias (__rintl, rintl)
|
weak_alias (__rintl, rintl)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__scalbn)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__scalbn)
|
END (__scalbn)
|
||||||
weak_alias (__scalbn, scalbn)
|
weak_alias (__scalbn, scalbn)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__scalbnf)
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__scalbnf)
|
END (__scalbnf)
|
||||||
weak_alias (__scalbnf, scalbnf)
|
weak_alias (__scalbnf, scalbnf)
|
||||||
|
|
|
@ -13,5 +13,5 @@ ENTRY(__scalbnl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fscale
|
fscale
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__scalbnl)
|
END (__scalbnl)
|
||||||
weak_alias (__scalbnl, scalbnl)
|
weak_alias (__scalbnl, scalbnl)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__significand)
|
||||||
fxtract
|
fxtract
|
||||||
fstpl %st(1)
|
fstpl %st(1)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__significand)
|
END (__significand)
|
||||||
weak_alias (__significand, significand)
|
weak_alias (__significand, significand)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__significandf)
|
||||||
fxtract
|
fxtract
|
||||||
fstpl %st(1)
|
fstpl %st(1)
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__significandf)
|
END (__significandf)
|
||||||
weak_alias (__significandf, significandf)
|
weak_alias (__significandf, significandf)
|
||||||
|
|
|
@ -13,5 +13,5 @@ ENTRY(__significandl)
|
||||||
fxtract
|
fxtract
|
||||||
fincstp
|
fincstp
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__significandl)
|
END (__significandl)
|
||||||
weak_alias (__significandl, significandl)
|
weak_alias (__significandl, significandl)
|
||||||
|
|
|
@ -11,7 +11,7 @@ ENTRY(__sin)
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
fsin
|
fsin
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 1f
|
jnz 1f
|
||||||
ret
|
ret
|
||||||
1: fldpi
|
1: fldpi
|
||||||
|
@ -19,10 +19,10 @@ ENTRY(__sin)
|
||||||
fxch %st(1)
|
fxch %st(1)
|
||||||
2: fprem1
|
2: fprem1
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 2b
|
jnz 2b
|
||||||
fstp %st(1)
|
fstp %st(1)
|
||||||
fsin
|
fsin
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__sin)
|
END (__sin)
|
||||||
weak_alias (__sin, sin)
|
weak_alias (__sin, sin)
|
||||||
|
|
|
@ -12,5 +12,5 @@ ENTRY(__sinf)
|
||||||
flds 4(%esp)
|
flds 4(%esp)
|
||||||
fsin
|
fsin
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__sinf)
|
END (__sinf)
|
||||||
weak_alias (__sinf, sinf)
|
weak_alias (__sinf, sinf)
|
||||||
|
|
|
@ -13,7 +13,7 @@ ENTRY(__sinl)
|
||||||
fldt 4(%esp)
|
fldt 4(%esp)
|
||||||
fsin
|
fsin
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 1f
|
jnz 1f
|
||||||
ret
|
ret
|
||||||
1: fldpi
|
1: fldpi
|
||||||
|
@ -21,10 +21,10 @@ ENTRY(__sinl)
|
||||||
fxch %st(1)
|
fxch %st(1)
|
||||||
2: fprem1
|
2: fprem1
|
||||||
fnstsw %ax
|
fnstsw %ax
|
||||||
andw $0x400,%ax
|
testl $0x400,%eax
|
||||||
jnz 2b
|
jnz 2b
|
||||||
fstp %st(1)
|
fstp %st(1)
|
||||||
fsin
|
fsin
|
||||||
ret
|
ret
|
||||||
PSEUDO_END (__sinl)
|
END (__sinl)
|
||||||
weak_alias (__sinl, sinl)
|
weak_alias (__sinl, sinl)
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue