From f7eac6eb504f4baf13dbb4d26717942df050ebe6 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 5 Mar 1996 21:41:30 +0000 Subject: Mon Mar 4 20:54:40 1996 Andreas Schwab * Makeconfig ($(common-objpfx)config.make): Depend on config.h.in. Mon Mar 4 17:35:09 1996 Roland McGrath * hurd/catch-signal.c (hurd_safe_memmove): New function. (hurd_safe_copyin, hurd_safe_copyout): New functions. * hurd/hurd/sigpreempt.h: Declare them. Sun Mar 3 08:43:44 1996 Roland McGrath Replace math code with fdlibm from Sun as modified for netbsd by JT Conklin and Ian Taylor, including x86 FPU support. * sysdeps/libm-ieee754, sysdeps/libm-i387: New directories. * math/math_private.h: New file. * sysdeps/i386/fpu/Implies: New file. * sysdeps/ieee754/Implies: New file. * math/machine/asm.h, math/machine/endian.h: New files. * math/Makefile, math/math.h: Rewritten. * mathcalls.h, math/mathcalls.h: New file, broken out of math.h. * math/finite.c: File removed. * sysdeps/generic/Makefile [$(subdir)=math]: Frobnication removed. * math/test-math.c: Include errno.h and string.h. * sysdeps/unix/bsd/dirstream.h: File removed. * sysdeps/unix/bsd/readdir.c: File removed. --- sysdeps/libm-i387/e_acos.S | 20 ++++++++++++++++++++ sysdeps/libm-i387/e_asin.S | 19 +++++++++++++++++++ sysdeps/libm-i387/e_atan2.S | 14 ++++++++++++++ sysdeps/libm-i387/e_atan2f.S | 14 ++++++++++++++ sysdeps/libm-i387/e_exp.S | 23 +++++++++++++++++++++++ sysdeps/libm-i387/e_fmod.S | 18 ++++++++++++++++++ sysdeps/libm-i387/e_log.S | 14 ++++++++++++++ sysdeps/libm-i387/e_log10.S | 14 ++++++++++++++ sysdeps/libm-i387/e_remainder.S | 18 ++++++++++++++++++ sysdeps/libm-i387/e_remainderf.S | 18 ++++++++++++++++++ sysdeps/libm-i387/e_scalb.S | 14 ++++++++++++++ sysdeps/libm-i387/e_sqrt.S | 13 +++++++++++++ sysdeps/libm-i387/e_sqrtf.S | 13 +++++++++++++ sysdeps/libm-i387/s_atan.S | 15 +++++++++++++++ sysdeps/libm-i387/s_atanf.S | 15 +++++++++++++++ sysdeps/libm-i387/s_ceil.S | 29 +++++++++++++++++++++++++++++ sysdeps/libm-i387/s_ceilf.S | 29 +++++++++++++++++++++++++++++ sysdeps/libm-i387/s_copysign.S | 19 +++++++++++++++++++ sysdeps/libm-i387/s_copysignf.S | 19 +++++++++++++++++++ sysdeps/libm-i387/s_cos.S | 27 +++++++++++++++++++++++++++ sysdeps/libm-i387/s_cosf.S | 15 +++++++++++++++ sysdeps/libm-i387/s_finite.S | 17 +++++++++++++++++ sysdeps/libm-i387/s_finitef.S | 17 +++++++++++++++++ sysdeps/libm-i387/s_floor.S | 29 +++++++++++++++++++++++++++++ sysdeps/libm-i387/s_floorf.S | 29 +++++++++++++++++++++++++++++ sysdeps/libm-i387/s_ilogb.S | 24 ++++++++++++++++++++++++ sysdeps/libm-i387/s_ilogbf.S | 24 ++++++++++++++++++++++++ sysdeps/libm-i387/s_log1p.S | 23 +++++++++++++++++++++++ sysdeps/libm-i387/s_log1pf.S | 23 +++++++++++++++++++++++ sysdeps/libm-i387/s_logb.S | 15 +++++++++++++++ sysdeps/libm-i387/s_logbf.S | 15 +++++++++++++++ sysdeps/libm-i387/s_rint.S | 14 ++++++++++++++ sysdeps/libm-i387/s_rintf.S | 14 ++++++++++++++ sysdeps/libm-i387/s_scalbn.S | 15 +++++++++++++++ sysdeps/libm-i387/s_scalbnf.S | 15 +++++++++++++++ sysdeps/libm-i387/s_significand.S | 15 +++++++++++++++ sysdeps/libm-i387/s_significandf.S | 15 +++++++++++++++ sysdeps/libm-i387/s_sin.S | 27 +++++++++++++++++++++++++++ sysdeps/libm-i387/s_sinf.S | 15 +++++++++++++++ sysdeps/libm-i387/s_tan.S | 29 +++++++++++++++++++++++++++++ sysdeps/libm-i387/s_tanf.S | 16 ++++++++++++++++ 41 files changed, 771 insertions(+) create mode 100644 sysdeps/libm-i387/e_acos.S create mode 100644 sysdeps/libm-i387/e_asin.S create mode 100644 sysdeps/libm-i387/e_atan2.S create mode 100644 sysdeps/libm-i387/e_atan2f.S create mode 100644 sysdeps/libm-i387/e_exp.S create mode 100644 sysdeps/libm-i387/e_fmod.S create mode 100644 sysdeps/libm-i387/e_log.S create mode 100644 sysdeps/libm-i387/e_log10.S create mode 100644 sysdeps/libm-i387/e_remainder.S create mode 100644 sysdeps/libm-i387/e_remainderf.S create mode 100644 sysdeps/libm-i387/e_scalb.S create mode 100644 sysdeps/libm-i387/e_sqrt.S create mode 100644 sysdeps/libm-i387/e_sqrtf.S create mode 100644 sysdeps/libm-i387/s_atan.S create mode 100644 sysdeps/libm-i387/s_atanf.S create mode 100644 sysdeps/libm-i387/s_ceil.S create mode 100644 sysdeps/libm-i387/s_ceilf.S create mode 100644 sysdeps/libm-i387/s_copysign.S create mode 100644 sysdeps/libm-i387/s_copysignf.S create mode 100644 sysdeps/libm-i387/s_cos.S create mode 100644 sysdeps/libm-i387/s_cosf.S create mode 100644 sysdeps/libm-i387/s_finite.S create mode 100644 sysdeps/libm-i387/s_finitef.S create mode 100644 sysdeps/libm-i387/s_floor.S create mode 100644 sysdeps/libm-i387/s_floorf.S create mode 100644 sysdeps/libm-i387/s_ilogb.S create mode 100644 sysdeps/libm-i387/s_ilogbf.S create mode 100644 sysdeps/libm-i387/s_log1p.S create mode 100644 sysdeps/libm-i387/s_log1pf.S create mode 100644 sysdeps/libm-i387/s_logb.S create mode 100644 sysdeps/libm-i387/s_logbf.S create mode 100644 sysdeps/libm-i387/s_rint.S create mode 100644 sysdeps/libm-i387/s_rintf.S create mode 100644 sysdeps/libm-i387/s_scalbn.S create mode 100644 sysdeps/libm-i387/s_scalbnf.S create mode 100644 sysdeps/libm-i387/s_significand.S create mode 100644 sysdeps/libm-i387/s_significandf.S create mode 100644 sysdeps/libm-i387/s_sin.S create mode 100644 sysdeps/libm-i387/s_sinf.S create mode 100644 sysdeps/libm-i387/s_tan.S create mode 100644 sysdeps/libm-i387/s_tanf.S (limited to 'sysdeps/libm-i387') diff --git a/sysdeps/libm-i387/e_acos.S b/sysdeps/libm-i387/e_acos.S new file mode 100644 index 0000000000..6ec7785363 --- /dev/null +++ b/sysdeps/libm-i387/e_acos.S @@ -0,0 +1,20 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_acos.S,v 1.4 1995/05/08 23:44:37 jtc Exp $") + +/* acos = atan (sqrt(1 - x^2) / x) */ +ENTRY(__ieee754_acos) + fldl 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 diff --git a/sysdeps/libm-i387/e_asin.S b/sysdeps/libm-i387/e_asin.S new file mode 100644 index 0000000000..dfcd7bce95 --- /dev/null +++ b/sysdeps/libm-i387/e_asin.S @@ -0,0 +1,19 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_asin.S,v 1.4 1995/05/08 23:45:40 jtc Exp $") + +/* asin = atan (x / sqrt(1 - x^2)) */ +ENTRY(__ieee754_asin) + fldl 4(%esp) /* x */ + fst %st(1) + fmul %st(0) /* x^2 */ + fld1 + fsubp /* 1 - x^2 */ + fsqrt /* sqrt (1 - x^2) */ + fpatan + ret diff --git a/sysdeps/libm-i387/e_atan2.S b/sysdeps/libm-i387/e_atan2.S new file mode 100644 index 0000000000..da2e11925c --- /dev/null +++ b/sysdeps/libm-i387/e_atan2.S @@ -0,0 +1,14 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_atan2.S,v 1.4 1995/05/08 23:46:28 jtc Exp $") + +ENTRY(__ieee754_atan2) + fldl 4(%esp) + fldl 12(%esp) + fpatan + ret diff --git a/sysdeps/libm-i387/e_atan2f.S b/sysdeps/libm-i387/e_atan2f.S new file mode 100644 index 0000000000..21fc0d9a57 --- /dev/null +++ b/sysdeps/libm-i387/e_atan2f.S @@ -0,0 +1,14 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_atan2f.S,v 1.1 1995/05/08 23:35:10 jtc Exp $") + +ENTRY(__ieee754_atan2f) + flds 4(%esp) + flds 8(%esp) + fpatan + ret diff --git a/sysdeps/libm-i387/e_exp.S b/sysdeps/libm-i387/e_exp.S new file mode 100644 index 0000000000..8c41ce09dd --- /dev/null +++ b/sysdeps/libm-i387/e_exp.S @@ -0,0 +1,23 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_exp.S,v 1.4 1995/05/08 23:47:04 jtc Exp $") + +/* e^x = 2^(x * log2(e)) */ +ENTRY(__ieee754_exp) + fldl 4(%esp) + fldl2e + fmulp /* x * log2(e) */ + fstl %st(1) + frndint /* int(x * log2(e)) */ + fstl %st(2) + fsubrp /* fract(x * log2(e)) */ + f2xm1 /* 2^(fract(x * log2(e))) - 1 */ + fld1 + faddp /* 2^(fract(x * log2(e))) */ + fscale /* e^x */ + ret diff --git a/sysdeps/libm-i387/e_fmod.S b/sysdeps/libm-i387/e_fmod.S new file mode 100644 index 0000000000..c02df44e18 --- /dev/null +++ b/sysdeps/libm-i387/e_fmod.S @@ -0,0 +1,18 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_fmod.S,v 1.4 1995/05/08 23:47:56 jtc Exp $") + +ENTRY(__ieee754_fmod) + fldl 12(%esp) + fldl 4(%esp) +1: fprem + fstsw %ax + sahf + jp 1b + fstpl %st(1) + ret diff --git a/sysdeps/libm-i387/e_log.S b/sysdeps/libm-i387/e_log.S new file mode 100644 index 0000000000..98d569ea43 --- /dev/null +++ b/sysdeps/libm-i387/e_log.S @@ -0,0 +1,14 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_log.S,v 1.4 1995/05/08 23:48:39 jtc Exp $") + +ENTRY(__ieee754_log) + fldln2 + fldl 4(%esp) + fyl2x + ret diff --git a/sysdeps/libm-i387/e_log10.S b/sysdeps/libm-i387/e_log10.S new file mode 100644 index 0000000000..612344be56 --- /dev/null +++ b/sysdeps/libm-i387/e_log10.S @@ -0,0 +1,14 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_log10.S,v 1.4 1995/05/08 23:49:24 jtc Exp $") + +ENTRY(__ieee754_log10) + fldlg2 + fldl 4(%esp) + fyl2x + ret diff --git a/sysdeps/libm-i387/e_remainder.S b/sysdeps/libm-i387/e_remainder.S new file mode 100644 index 0000000000..d14f2e82bd --- /dev/null +++ b/sysdeps/libm-i387/e_remainder.S @@ -0,0 +1,18 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_remainder.S,v 1.4 1995/05/08 23:49:37 jtc Exp $") + +ENTRY(__ieee754_remainder) + fldl 12(%esp) + fldl 4(%esp) +1: fprem1 + fstsw %ax + sahf + jp 1b + fstpl %st(1) + ret diff --git a/sysdeps/libm-i387/e_remainderf.S b/sysdeps/libm-i387/e_remainderf.S new file mode 100644 index 0000000000..ed578ea542 --- /dev/null +++ b/sysdeps/libm-i387/e_remainderf.S @@ -0,0 +1,18 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_remainderf.S,v 1.2 1995/05/08 23:49:47 jtc Exp $") + +ENTRY(__ieee754_remainderf) + flds 8(%esp) + flds 4(%esp) +1: fprem1 + fstsw %ax + sahf + jp 1b + fstpl %st(1) + ret diff --git a/sysdeps/libm-i387/e_scalb.S b/sysdeps/libm-i387/e_scalb.S new file mode 100644 index 0000000000..7d95f8e3b3 --- /dev/null +++ b/sysdeps/libm-i387/e_scalb.S @@ -0,0 +1,14 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_scalb.S,v 1.4 1995/05/08 23:49:52 jtc Exp $") + +ENTRY(__ieee754_scalb) + fldl 12(%esp) + fldl 4(%esp) + fscale + ret diff --git a/sysdeps/libm-i387/e_sqrt.S b/sysdeps/libm-i387/e_sqrt.S new file mode 100644 index 0000000000..34fe9b7136 --- /dev/null +++ b/sysdeps/libm-i387/e_sqrt.S @@ -0,0 +1,13 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_sqrt.S,v 1.4 1995/05/08 23:49:57 jtc Exp $") + +ENTRY(__ieee754_sqrt) + fldl 4(%esp) + fsqrt + ret diff --git a/sysdeps/libm-i387/e_sqrtf.S b/sysdeps/libm-i387/e_sqrtf.S new file mode 100644 index 0000000000..d20c4c1254 --- /dev/null +++ b/sysdeps/libm-i387/e_sqrtf.S @@ -0,0 +1,13 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: e_sqrtf.S,v 1.2 1995/05/08 23:50:14 jtc Exp $") + +ENTRY(__ieee754_sqrtf) + flds 4(%esp) + fsqrt + ret diff --git a/sysdeps/libm-i387/s_atan.S b/sysdeps/libm-i387/s_atan.S new file mode 100644 index 0000000000..4dcd54fdaf --- /dev/null +++ b/sysdeps/libm-i387/s_atan.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_atan.S,v 1.4 1995/05/08 23:50:41 jtc Exp $") + +ENTRY(__atan) + fldl 4(%esp) + fld1 + fpatan + ret +weak_alias (__atan, atan) diff --git a/sysdeps/libm-i387/s_atanf.S b/sysdeps/libm-i387/s_atanf.S new file mode 100644 index 0000000000..d00593db7c --- /dev/null +++ b/sysdeps/libm-i387/s_atanf.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_atanf.S,v 1.3 1995/05/08 23:51:33 jtc Exp $") + +ENTRY(__atanf) + flds 4(%esp) + fld1 + fpatan + ret +weak_alias (__atanf, atanf) diff --git a/sysdeps/libm-i387/s_ceil.S b/sysdeps/libm-i387/s_ceil.S new file mode 100644 index 0000000000..2fd813dcd7 --- /dev/null +++ b/sysdeps/libm-i387/s_ceil.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_ceil.S,v 1.4 1995/05/08 23:52:13 jtc Exp $") + +ENTRY(__ceil) + pushl %ebp + movl %esp,%ebp + subl $8,%esp + + fstcw -12(%ebp) /* store fpu control word */ + movw -12(%ebp),%dx + orw $0x0800,%dx /* round towards +oo */ + andw $0xfbff,%dx + movw %dx,-16(%ebp) + fldcw -16(%ebp) /* load modfied control word */ + + fldl 8(%ebp); /* round */ + frndint + + fldcw -12(%ebp) /* restore original control word */ + + leave + ret +weak_alias (__ceil, ceil) diff --git a/sysdeps/libm-i387/s_ceilf.S b/sysdeps/libm-i387/s_ceilf.S new file mode 100644 index 0000000000..6458b45e8f --- /dev/null +++ b/sysdeps/libm-i387/s_ceilf.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_ceilf.S,v 1.3 1995/05/08 23:52:44 jtc Exp $") + +ENTRY(__ceilf) + pushl %ebp + movl %esp,%ebp + subl $8,%esp + + fstcw -12(%ebp) /* store fpu control word */ + movw -12(%ebp),%dx + orw $0x0800,%dx /* round towards +oo */ + andw $0xfbff,%dx + movw %dx,-16(%ebp) + fldcw -16(%ebp) /* load modfied control word */ + + flds 8(%ebp); /* round */ + frndint + + fldcw -12(%ebp) /* restore original control word */ + + leave + ret +weak_alias (__ceilf, ceilf) diff --git a/sysdeps/libm-i387/s_copysign.S b/sysdeps/libm-i387/s_copysign.S new file mode 100644 index 0000000000..0de3affa46 --- /dev/null +++ b/sysdeps/libm-i387/s_copysign.S @@ -0,0 +1,19 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_copysign.S,v 1.4 1995/05/08 23:53:02 jtc Exp $") + +ENTRY(__copysign) + movl 16(%esp),%edx + andl $0x80000000,%edx + movl 8(%esp),%eax + andl $0x7fffffff,%eax + orl %edx,%eax + movl %eax,8(%esp) + fldl 4(%esp) + ret +weak_alias (__copysign, copysign) diff --git a/sysdeps/libm-i387/s_copysignf.S b/sysdeps/libm-i387/s_copysignf.S new file mode 100644 index 0000000000..a55cd37444 --- /dev/null +++ b/sysdeps/libm-i387/s_copysignf.S @@ -0,0 +1,19 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_copysignf.S,v 1.3 1995/05/08 23:53:25 jtc Exp $") + +ENTRY(__copysignf) + movl 8(%esp),%edx + andl $0x80000000,%edx + movl 4(%esp),%eax + andl $0x7fffffff,%eax + orl %edx,%eax + movl %eax,4(%esp) + flds 4(%esp) + ret +weak_alias (__copysignf, copysignf) diff --git a/sysdeps/libm-i387/s_cos.S b/sysdeps/libm-i387/s_cos.S new file mode 100644 index 0000000000..0ccf8bc6e6 --- /dev/null +++ b/sysdeps/libm-i387/s_cos.S @@ -0,0 +1,27 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_cos.S,v 1.5 1995/05/08 23:54:00 jtc Exp $") + +ENTRY(__cos) + fldl 4(%esp) + fcos + fnstsw %ax + andw $0x400,%ax + jnz 1f + ret +1: fldpi + fadd %st(0) + fxch %st(1) +2: fprem1 + fnstsw %ax + andw $0x400,%ax + jnz 2b + fstp %st(1) + fcos + ret +weak_alias (__cos, cos) diff --git a/sysdeps/libm-i387/s_cosf.S b/sysdeps/libm-i387/s_cosf.S new file mode 100644 index 0000000000..a200e04fbe --- /dev/null +++ b/sysdeps/libm-i387/s_cosf.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_cosf.S,v 1.3 1995/05/08 23:55:16 jtc Exp $") + +/* A float's domain isn't large enough to require argument reduction. */ +ENTRY(__cosf) + flds 4(%esp) + fcos + ret +weak_alias (__cosf, cosf) diff --git a/sysdeps/libm-i387/s_finite.S b/sysdeps/libm-i387/s_finite.S new file mode 100644 index 0000000000..a65aa6a1e8 --- /dev/null +++ b/sysdeps/libm-i387/s_finite.S @@ -0,0 +1,17 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_finite.S,v 1.4 1995/05/08 23:57:41 jtc Exp $") + +ENTRY(__finite) + movl 8(%esp),%eax + andl $0x7ff00000, %eax + cmpl $0x7ff00000, %eax + setnel %al + andl $0x000000ff, %eax + ret +weak_alias (__finite, finite) diff --git a/sysdeps/libm-i387/s_finitef.S b/sysdeps/libm-i387/s_finitef.S new file mode 100644 index 0000000000..f842d468b9 --- /dev/null +++ b/sysdeps/libm-i387/s_finitef.S @@ -0,0 +1,17 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_finitef.S,v 1.3 1995/05/09 00:00:02 jtc Exp $") + +ENTRY(__finitef) + movl 4(%esp),%eax + andl $0x7ff00000, %eax + cmpl $0x7ff00000, %eax + setnel %al + andl $0x000000ff, %eax + ret +weak_alias (__finitef, finitef) diff --git a/sysdeps/libm-i387/s_floor.S b/sysdeps/libm-i387/s_floor.S new file mode 100644 index 0000000000..33d5dbcc70 --- /dev/null +++ b/sysdeps/libm-i387/s_floor.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_floor.S,v 1.4 1995/05/09 00:01:59 jtc Exp $") + +ENTRY(__floor) + pushl %ebp + movl %esp,%ebp + subl $8,%esp + + fstcw -12(%ebp) /* store fpu control word */ + movw -12(%ebp),%dx + orw $0x0400,%dx /* round towards -oo */ + andw $0xf7ff,%dx + movw %dx,-16(%ebp) + fldcw -16(%ebp) /* load modfied control word */ + + fldl 8(%ebp); /* round */ + frndint + + fldcw -12(%ebp) /* restore original control word */ + + leave + ret +weak_alias (__floor, floor) diff --git a/sysdeps/libm-i387/s_floorf.S b/sysdeps/libm-i387/s_floorf.S new file mode 100644 index 0000000000..dd290fa818 --- /dev/null +++ b/sysdeps/libm-i387/s_floorf.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_floorf.S,v 1.3 1995/05/09 00:04:32 jtc Exp $") + +ENTRY(__floorf) + pushl %ebp + movl %esp,%ebp + subl $8,%esp + + fstcw -12(%ebp) /* store fpu control word */ + movw -12(%ebp),%dx + orw $0x0400,%dx /* round towards -oo */ + andw $0xf7ff,%dx + movw %dx,-16(%ebp) + fldcw -16(%ebp) /* load modfied control word */ + + flds 8(%ebp); /* round */ + frndint + + fldcw -12(%ebp) /* restore original control word */ + + leave + ret +weak_alias (__floorf, floorf) diff --git a/sysdeps/libm-i387/s_ilogb.S b/sysdeps/libm-i387/s_ilogb.S new file mode 100644 index 0000000000..f11ed585c0 --- /dev/null +++ b/sysdeps/libm-i387/s_ilogb.S @@ -0,0 +1,24 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_ilogb.S,v 1.5 1995/10/12 15:53:09 jtc Exp $") + +ENTRY(__ilogb) + pushl %ebp + movl %esp,%ebp + subl $4,%esp + + fldl 8(%ebp) + fxtract + fstpl %st + + fistpl -4(%ebp) + movl -4(%ebp),%eax + + leave + ret +weak_alias (__ilogb, ilogb) diff --git a/sysdeps/libm-i387/s_ilogbf.S b/sysdeps/libm-i387/s_ilogbf.S new file mode 100644 index 0000000000..5a61d28630 --- /dev/null +++ b/sysdeps/libm-i387/s_ilogbf.S @@ -0,0 +1,24 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_ilogbf.S,v 1.4 1995/10/22 20:32:43 pk Exp $") + +ENTRY(__ilogbf) + pushl %ebp + movl %esp,%ebp + subl $4,%esp + + flds 8(%ebp) + fxtract + fstpl %st + + fistpl -4(%ebp) + movl -4(%ebp),%eax + + leave + ret +weak_alias (__ilogbf, ilogbf) diff --git a/sysdeps/libm-i387/s_log1p.S b/sysdeps/libm-i387/s_log1p.S new file mode 100644 index 0000000000..c4aee4aa9c --- /dev/null +++ b/sysdeps/libm-i387/s_log1p.S @@ -0,0 +1,23 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_log1p.S,v 1.7 1995/05/09 00:10:58 jtc Exp $") + +/* + * Since the fyl2xp1 instruction has such a limited range: + * -(1 - (sqrt(2) / 2)) <= x <= sqrt(2) - 1 + * it's not worth trying to use it. + */ + +ENTRY(__log1p) + fldln2 + fldl 4(%esp) + fld1 + faddp + fyl2x + ret +weak_alias (__log1p, log1p) diff --git a/sysdeps/libm-i387/s_log1pf.S b/sysdeps/libm-i387/s_log1pf.S new file mode 100644 index 0000000000..e268550ae8 --- /dev/null +++ b/sysdeps/libm-i387/s_log1pf.S @@ -0,0 +1,23 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_log1pf.S,v 1.4 1995/05/09 00:13:05 jtc Exp $") + +/* + * Since the fyl2xp1 instruction has such a limited range: + * -(1 - (sqrt(2) / 2)) <= x <= sqrt(2) - 1 + * it's not worth trying to use it. + */ + +ENTRY(__log1pf) + fldln2 + flds 4(%esp) + fld1 + faddp + fyl2x + ret +weak_alias (__log1pf, log1pf) diff --git a/sysdeps/libm-i387/s_logb.S b/sysdeps/libm-i387/s_logb.S new file mode 100644 index 0000000000..4f071e0552 --- /dev/null +++ b/sysdeps/libm-i387/s_logb.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_logb.S,v 1.4 1995/05/09 00:14:30 jtc Exp $") + +ENTRY(__logb) + fldl 4(%esp) + fxtract + fstpl %st + ret +weak_alias (__logb, logb) diff --git a/sysdeps/libm-i387/s_logbf.S b/sysdeps/libm-i387/s_logbf.S new file mode 100644 index 0000000000..ecdd0aea6f --- /dev/null +++ b/sysdeps/libm-i387/s_logbf.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_logbf.S,v 1.3 1995/05/09 00:15:12 jtc Exp $") + +ENTRY(__logbf) + flds 4(%esp) + fxtract + fstpl %st + ret +weak_alias (__logbf, logbf) diff --git a/sysdeps/libm-i387/s_rint.S b/sysdeps/libm-i387/s_rint.S new file mode 100644 index 0000000000..2f09a47b00 --- /dev/null +++ b/sysdeps/libm-i387/s_rint.S @@ -0,0 +1,14 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_rint.S,v 1.4 1995/05/09 00:16:08 jtc Exp $") + +ENTRY(__rint) + fldl 4(%esp) + frndint + ret +weak_alias (__rint, rint) diff --git a/sysdeps/libm-i387/s_rintf.S b/sysdeps/libm-i387/s_rintf.S new file mode 100644 index 0000000000..de64d7996a --- /dev/null +++ b/sysdeps/libm-i387/s_rintf.S @@ -0,0 +1,14 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_rintf.S,v 1.3 1995/05/09 00:17:22 jtc Exp $") + +ENTRY(__rintf) + flds 4(%esp) + frndint + ret +weak_alias (__rintf, rintf) diff --git a/sysdeps/libm-i387/s_scalbn.S b/sysdeps/libm-i387/s_scalbn.S new file mode 100644 index 0000000000..99ecac63b5 --- /dev/null +++ b/sysdeps/libm-i387/s_scalbn.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_scalbn.S,v 1.4 1995/05/09 00:19:06 jtc Exp $") + +ENTRY(__scalbn) + fildl 12(%esp) + fldl 4(%esp) + fscale + ret +weak_alias (__scalbn, scalbn) diff --git a/sysdeps/libm-i387/s_scalbnf.S b/sysdeps/libm-i387/s_scalbnf.S new file mode 100644 index 0000000000..0203e91c55 --- /dev/null +++ b/sysdeps/libm-i387/s_scalbnf.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_scalbnf.S,v 1.3 1995/05/09 00:19:59 jtc Exp $") + +ENTRY(__scalbnf) + fildl 8(%esp) + flds 4(%esp) + fscale + ret +weak_alias (__scalbnf, scalbnf) diff --git a/sysdeps/libm-i387/s_significand.S b/sysdeps/libm-i387/s_significand.S new file mode 100644 index 0000000000..09f3a0a9f4 --- /dev/null +++ b/sysdeps/libm-i387/s_significand.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_significand.S,v 1.4 1995/05/09 00:21:47 jtc Exp $") + +ENTRY(__significand) + fldl 4(%esp) + fxtract + fstpl %st(1) + ret +weak_alias (__significand, significand) diff --git a/sysdeps/libm-i387/s_significandf.S b/sysdeps/libm-i387/s_significandf.S new file mode 100644 index 0000000000..b678bc524c --- /dev/null +++ b/sysdeps/libm-i387/s_significandf.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_significandf.S,v 1.3 1995/05/09 00:24:07 jtc Exp $") + +ENTRY(__significandf) + flds 4(%esp) + fxtract + fstpl %st(1) + ret +weak_alias (__significandf, significandf) diff --git a/sysdeps/libm-i387/s_sin.S b/sysdeps/libm-i387/s_sin.S new file mode 100644 index 0000000000..79284959a1 --- /dev/null +++ b/sysdeps/libm-i387/s_sin.S @@ -0,0 +1,27 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_sin.S,v 1.5 1995/05/09 00:25:54 jtc Exp $") + +ENTRY(__sin) + fldl 4(%esp) + fsin + fnstsw %ax + andw $0x400,%ax + jnz 1f + ret +1: fldpi + fadd %st(0) + fxch %st(1) +2: fprem1 + fnstsw %ax + andw $0x400,%ax + jnz 2b + fstp %st(1) + fsin + ret +weak_alias (__sin, sin) diff --git a/sysdeps/libm-i387/s_sinf.S b/sysdeps/libm-i387/s_sinf.S new file mode 100644 index 0000000000..03a42cbb26 --- /dev/null +++ b/sysdeps/libm-i387/s_sinf.S @@ -0,0 +1,15 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_sinf.S,v 1.3 1995/05/09 00:27:53 jtc Exp $") + +/* A float's domain isn't large enough to require argument reduction. */ +ENTRY(__sinf) + flds 4(%esp) + fsin + ret +weak_alias (__sinf, sinf) diff --git a/sysdeps/libm-i387/s_tan.S b/sysdeps/libm-i387/s_tan.S new file mode 100644 index 0000000000..9474c8cfc2 --- /dev/null +++ b/sysdeps/libm-i387/s_tan.S @@ -0,0 +1,29 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_tan.S,v 1.5 1995/05/09 00:30:00 jtc Exp $") + +ENTRY(__tan) + fldl 4(%esp) + fptan + fnstsw %ax + andw $0x400,%ax + jnz 1f + fstp %st(0) + ret +1: fldpi + fadd %st(0) + fxch %st(1) +2: fprem1 + fstsw %ax + andw $0x400,%ax + jnz 2b + fstp %st(1) + fptan + fstp %st(0) + ret +weak_alias (__tan, tan) diff --git a/sysdeps/libm-i387/s_tanf.S b/sysdeps/libm-i387/s_tanf.S new file mode 100644 index 0000000000..3296434174 --- /dev/null +++ b/sysdeps/libm-i387/s_tanf.S @@ -0,0 +1,16 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +RCSID("$NetBSD: s_tanf.S,v 1.3 1995/05/09 00:31:09 jtc Exp $") + +/* A float's domain isn't large enough to require argument reduction. */ +ENTRY(__tanf) + flds 4(%esp) + fptan + fstp %st(0) + ret +weak_alias (__tanf, tanf) -- cgit v1.2.1