diff options
author | Szabolcs Nagy <nsz@port70.net> | 2013-08-15 10:56:57 +0000 |
---|---|---|
committer | Szabolcs Nagy <nsz@port70.net> | 2013-08-15 10:56:57 +0000 |
commit | 31c5fb80b9eae86f801be4f46025bc6532a554c5 (patch) | |
tree | c5d0912699727ebd96bb5194334ee4dd33dc9c5b /src/math/i386/log1pf.s | |
parent | 1b3973fb43fbef80dab1dfc9c788783e78ab5043 (diff) | |
download | musl-31c5fb80b9eae86f801be4f46025bc6532a554c5.tar.gz musl-31c5fb80b9eae86f801be4f46025bc6532a554c5.tar.bz2 musl-31c5fb80b9eae86f801be4f46025bc6532a554c5.tar.xz musl-31c5fb80b9eae86f801be4f46025bc6532a554c5.zip |
math: fix x86 asin, atan, exp, log1p to raise underflow
underflow is raised by an inexact subnormal float store,
since subnormal operations are slow, check the underflow
flag and skip the store if it's already raised
Diffstat (limited to 'src/math/i386/log1pf.s')
-rw-r--r-- | src/math/i386/log1pf.s | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/math/i386/log1pf.s b/src/math/i386/log1pf.s index 2680a8a6..c0bcd30f 100644 --- a/src/math/i386/log1pf.s +++ b/src/math/i386/log1pf.s @@ -7,9 +7,19 @@ log1pf: flds 4(%esp) cmp $0x3e940000,%eax ja 1f + cmp $0x00800000,%eax + jb 2f fyl2xp1 ret 1: fld1 faddp fyl2x ret + # subnormal x, return x with underflow +2: fnstsw %ax + and $16,%ax + jnz 1f + fxch + fmul %st(1) + fstps 4(%esp) +1: ret |