summaryrefslogtreecommitdiff
path: root/src/math/i386/atan.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/atan.s
parent1b3973fb43fbef80dab1dfc9c788783e78ab5043 (diff)
downloadmusl-31c5fb80b9eae86f801be4f46025bc6532a554c5.tar.gz
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/atan.s')
-rw-r--r--src/math/i386/atan.s10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/math/i386/atan.s b/src/math/i386/atan.s
index 7e28b395..d73137b2 100644
--- a/src/math/i386/atan.s
+++ b/src/math/i386/atan.s
@@ -2,6 +2,16 @@
.type atan,@function
atan:
fldl 4(%esp)
+ mov 8(%esp),%eax
+ add %eax,%eax
+ cmp $0x00200000,%eax
+ jb 1f
fld1
fpatan
ret
+ # subnormal x, return x with underflow
+1: fnstsw %ax
+ and $16,%ax
+ jnz 2f
+ fsts 4(%esp)
+2: ret