about summary refs log tree commit diff
path: root/src/math/i386/log1pf.s
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2013-08-15 10:56:57 +0000
committerSzabolcs Nagy <nsz@port70.net>2013-08-15 10:56:57 +0000
commit31c5fb80b9eae86f801be4f46025bc6532a554c5 (patch)
treec5d0912699727ebd96bb5194334ee4dd33dc9c5b /src/math/i386/log1pf.s
parent1b3973fb43fbef80dab1dfc9c788783e78ab5043 (diff)
downloadmusl-31c5fb80b9eae86f801be4f46025bc6532a554c5.tar.gz
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.s10
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