From b69f695acedd4ce2798ef9ea28d834ceccc789bd Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 13 Mar 2012 01:17:53 -0400 Subject: first commit of the new libm! thanks to the hard work of Szabolcs Nagy (nsz), identifying the best (from correctness and license standpoint) implementations from freebsd and openbsd and cleaning them up! musl should now fully support c99 float and long double math functions, and has near-complete complex math support. tgmath should also work (fully on gcc-compatible compilers, and mostly on any c99 compiler). based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from nsz's libm git repo, with some additions (dummy versions of a few missing long double complex functions, etc.) by me. various cleanups still need to be made, including re-adding (if they're correct) some asm functions that were dropped. --- src/math/i386/e_exp.s | 38 -------------------------------------- src/math/i386/e_expf.s | 1 - src/math/i386/e_log.s | 7 ------- src/math/i386/e_log10.s | 7 ------- src/math/i386/e_log10f.s | 7 ------- src/math/i386/e_logf.s | 7 ------- src/math/i386/e_remainder.s | 18 ------------------ src/math/i386/e_remainderf.s | 0 src/math/i386/e_sqrt.s | 5 ----- src/math/i386/e_sqrtf.s | 5 ----- src/math/i386/s_ceil.s | 0 src/math/i386/s_ceilf.s | 0 src/math/i386/s_fabs.s | 6 ------ src/math/i386/s_fabsf.s | 6 ------ src/math/i386/s_floor.s | 0 src/math/i386/s_floorf.s | 0 src/math/i386/s_ldexp.s | 0 src/math/i386/s_ldexpf.s | 0 src/math/i386/s_rint.s | 6 ------ src/math/i386/s_rintf.s | 6 ------ src/math/i386/s_scalbln.s | 14 -------------- src/math/i386/s_scalblnf.s | 14 -------------- src/math/i386/s_trunc.s | 42 ------------------------------------------ src/math/i386/s_truncf.s | 0 src/math/i386/sqrt.s | 5 +++++ src/math/i386/sqrtf.s | 5 +++++ src/math/i386/sqrtl.s | 5 +++++ 27 files changed, 15 insertions(+), 189 deletions(-) delete mode 100644 src/math/i386/e_exp.s delete mode 100644 src/math/i386/e_expf.s delete mode 100644 src/math/i386/e_log.s delete mode 100644 src/math/i386/e_log10.s delete mode 100644 src/math/i386/e_log10f.s delete mode 100644 src/math/i386/e_logf.s delete mode 100644 src/math/i386/e_remainder.s delete mode 100644 src/math/i386/e_remainderf.s delete mode 100644 src/math/i386/e_sqrt.s delete mode 100644 src/math/i386/e_sqrtf.s delete mode 100644 src/math/i386/s_ceil.s delete mode 100644 src/math/i386/s_ceilf.s delete mode 100644 src/math/i386/s_fabs.s delete mode 100644 src/math/i386/s_fabsf.s delete mode 100644 src/math/i386/s_floor.s delete mode 100644 src/math/i386/s_floorf.s delete mode 100644 src/math/i386/s_ldexp.s delete mode 100644 src/math/i386/s_ldexpf.s delete mode 100644 src/math/i386/s_rint.s delete mode 100644 src/math/i386/s_rintf.s delete mode 100644 src/math/i386/s_scalbln.s delete mode 100644 src/math/i386/s_scalblnf.s delete mode 100644 src/math/i386/s_trunc.s delete mode 100644 src/math/i386/s_truncf.s create mode 100644 src/math/i386/sqrt.s create mode 100644 src/math/i386/sqrtf.s create mode 100644 src/math/i386/sqrtl.s (limited to 'src/math/i386') diff --git a/src/math/i386/e_exp.s b/src/math/i386/e_exp.s deleted file mode 100644 index c50abc5e..00000000 --- a/src/math/i386/e_exp.s +++ /dev/null @@ -1,38 +0,0 @@ -.global expf -.type expf,@function -expf: - mov 4(%esp),%eax - flds 4(%esp) - shr $23,%eax - inc %al - jz 1f - jmp 0f - -.global exp -.type exp,@function -exp: - mov 8(%esp),%eax - fldl 4(%esp) - shl %eax - cmp $0xffe00000,%eax - jae 1f - -0: fldl2e - fmulp - fst %st(1) - frndint - fst %st(2) - fsubrp - f2xm1 - fld1 - faddp - fscale - fstp %st(1) - ret - -1: fsts 4(%esp) - cmpl $0xff800000,4(%esp) - jnz 1f - fstp %st(0) - fldz -1: ret diff --git a/src/math/i386/e_expf.s b/src/math/i386/e_expf.s deleted file mode 100644 index 8b137891..00000000 --- a/src/math/i386/e_expf.s +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/math/i386/e_log.s b/src/math/i386/e_log.s deleted file mode 100644 index fcccf030..00000000 --- a/src/math/i386/e_log.s +++ /dev/null @@ -1,7 +0,0 @@ -.global log -.type log,@function -log: - fldln2 - fldl 4(%esp) - fyl2x - ret diff --git a/src/math/i386/e_log10.s b/src/math/i386/e_log10.s deleted file mode 100644 index 28eb5b2f..00000000 --- a/src/math/i386/e_log10.s +++ /dev/null @@ -1,7 +0,0 @@ -.global log10 -.type log10,@function -log10: - fldlg2 - fldl 4(%esp) - fyl2x - ret diff --git a/src/math/i386/e_log10f.s b/src/math/i386/e_log10f.s deleted file mode 100644 index c0c0c67e..00000000 --- a/src/math/i386/e_log10f.s +++ /dev/null @@ -1,7 +0,0 @@ -.global log10f -.type log10f,@function -log10f: - fldlg2 - flds 4(%esp) - fyl2x - ret diff --git a/src/math/i386/e_logf.s b/src/math/i386/e_logf.s deleted file mode 100644 index da7ff3ae..00000000 --- a/src/math/i386/e_logf.s +++ /dev/null @@ -1,7 +0,0 @@ -.global logf -.type logf,@function -logf: - fldln2 - flds 4(%esp) - fyl2x - ret diff --git a/src/math/i386/e_remainder.s b/src/math/i386/e_remainder.s deleted file mode 100644 index 36d55f98..00000000 --- a/src/math/i386/e_remainder.s +++ /dev/null @@ -1,18 +0,0 @@ -.global remainderf -.type remainderf,@function -remainderf: - flds 8(%esp) - flds 4(%esp) - jmp 1f - -.global remainder -.type remainder,@function -remainder: - fldl 12(%esp) - fldl 4(%esp) -1: fprem1 - fstsw %ax - sahf - jp 1b - fstp %st(1) - ret diff --git a/src/math/i386/e_remainderf.s b/src/math/i386/e_remainderf.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/e_sqrt.s b/src/math/i386/e_sqrt.s deleted file mode 100644 index c6e55303..00000000 --- a/src/math/i386/e_sqrt.s +++ /dev/null @@ -1,5 +0,0 @@ -.global sqrt -.type sqrt,@function -sqrt: fldl 4(%esp) - fsqrt - ret diff --git a/src/math/i386/e_sqrtf.s b/src/math/i386/e_sqrtf.s deleted file mode 100644 index b79bd949..00000000 --- a/src/math/i386/e_sqrtf.s +++ /dev/null @@ -1,5 +0,0 @@ -.global sqrtf -.type sqrtf,@function -sqrtf: flds 4(%esp) - fsqrt - ret diff --git a/src/math/i386/s_ceil.s b/src/math/i386/s_ceil.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/s_ceilf.s b/src/math/i386/s_ceilf.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/s_fabs.s b/src/math/i386/s_fabs.s deleted file mode 100644 index d66ea9a1..00000000 --- a/src/math/i386/s_fabs.s +++ /dev/null @@ -1,6 +0,0 @@ -.global fabs -.type fabs,@function -fabs: - fldl 4(%esp) - fabs - ret diff --git a/src/math/i386/s_fabsf.s b/src/math/i386/s_fabsf.s deleted file mode 100644 index a981c422..00000000 --- a/src/math/i386/s_fabsf.s +++ /dev/null @@ -1,6 +0,0 @@ -.global fabsf -.type fabsf,@function -fabsf: - flds 4(%esp) - fabs - ret diff --git a/src/math/i386/s_floor.s b/src/math/i386/s_floor.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/s_floorf.s b/src/math/i386/s_floorf.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/s_ldexp.s b/src/math/i386/s_ldexp.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/s_ldexpf.s b/src/math/i386/s_ldexpf.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/s_rint.s b/src/math/i386/s_rint.s deleted file mode 100644 index bb99a11c..00000000 --- a/src/math/i386/s_rint.s +++ /dev/null @@ -1,6 +0,0 @@ -.global rint -.type rint,@function -rint: - fldl 4(%esp) - frndint - ret diff --git a/src/math/i386/s_rintf.s b/src/math/i386/s_rintf.s deleted file mode 100644 index bce4c5a6..00000000 --- a/src/math/i386/s_rintf.s +++ /dev/null @@ -1,6 +0,0 @@ -.global rintf -.type rintf,@function -rintf: - flds 4(%esp) - frndint - ret diff --git a/src/math/i386/s_scalbln.s b/src/math/i386/s_scalbln.s deleted file mode 100644 index 2641e694..00000000 --- a/src/math/i386/s_scalbln.s +++ /dev/null @@ -1,14 +0,0 @@ -.global ldexp -.global scalbn -.global scalbln -.type ldexp,@function -.type scalbn,@function -.type scalbln,@function -ldexp: -scalbn: -scalbln: - fildl 12(%esp) - fldl 4(%esp) - fscale - fstp %st(1) - ret diff --git a/src/math/i386/s_scalblnf.s b/src/math/i386/s_scalblnf.s deleted file mode 100644 index 775765a3..00000000 --- a/src/math/i386/s_scalblnf.s +++ /dev/null @@ -1,14 +0,0 @@ -.global ldexpf -.global scalbnf -.global scalblnf -.type ldexpf,@function -.type scalbnf,@function -.type scalblnf,@function -ldexpf: -scalbnf: -scalblnf: - fildl 8(%esp) - flds 4(%esp) - fscale - fstp %st(1) - ret diff --git a/src/math/i386/s_trunc.s b/src/math/i386/s_trunc.s deleted file mode 100644 index bdd6ab4c..00000000 --- a/src/math/i386/s_trunc.s +++ /dev/null @@ -1,42 +0,0 @@ -.global ceilf -.type ceilf,@function -ceilf: flds 4(%esp) - jmp 1f - -.global ceil -.type ceil,@function -ceil: fldl 4(%esp) -1: mov $0x08fb,%edx - jmp 0f - -.global floorf -.type floorf,@function -floorf: flds 4(%esp) - jmp 1f - -.global floor -.type floor,@function -floor: fldl 4(%esp) -1: mov $0x04f7,%edx - jmp 0f - -.global truncf -.type truncf,@function -truncf: flds 4(%esp) - jmp 1f - -.global trunc -.type trunc,@function -trunc: fldl 4(%esp) -1: mov $0x0cff,%edx - -0: fstcw 4(%esp) - mov 5(%esp),%ah - or %dh,%ah - and %dl,%ah - xchg %ah,5(%esp) - fldcw 4(%esp) - frndint - mov %ah,5(%esp) - fldcw 4(%esp) - ret diff --git a/src/math/i386/s_truncf.s b/src/math/i386/s_truncf.s deleted file mode 100644 index e69de29b..00000000 diff --git a/src/math/i386/sqrt.s b/src/math/i386/sqrt.s new file mode 100644 index 00000000..c6e55303 --- /dev/null +++ b/src/math/i386/sqrt.s @@ -0,0 +1,5 @@ +.global sqrt +.type sqrt,@function +sqrt: fldl 4(%esp) + fsqrt + ret diff --git a/src/math/i386/sqrtf.s b/src/math/i386/sqrtf.s new file mode 100644 index 00000000..b79bd949 --- /dev/null +++ b/src/math/i386/sqrtf.s @@ -0,0 +1,5 @@ +.global sqrtf +.type sqrtf,@function +sqrtf: flds 4(%esp) + fsqrt + ret diff --git a/src/math/i386/sqrtl.s b/src/math/i386/sqrtl.s new file mode 100644 index 00000000..e0d42616 --- /dev/null +++ b/src/math/i386/sqrtl.s @@ -0,0 +1,5 @@ +.global sqrtl +.type sqrtl,@function +sqrtl: fldt 4(%esp) + fsqrt + ret -- cgit v1.2.1