diff options
author | Szabolcs Nagy <nsz@port70.net> | 2013-08-15 14:18:32 +0000 |
---|---|---|
committer | Szabolcs Nagy <nsz@port70.net> | 2013-08-15 14:18:32 +0000 |
commit | 411efb3bc61298b81456d0fdab39518d983a9681 (patch) | |
tree | d73a1bfc85d8e04885acf651efe70c46631e583a /src/math/i386 | |
parent | 6d85096f49fa955e7e1473b7deb30ce55b6c8be0 (diff) | |
download | musl-411efb3bc61298b81456d0fdab39518d983a9681.tar.gz musl-411efb3bc61298b81456d0fdab39518d983a9681.tar.bz2 musl-411efb3bc61298b81456d0fdab39518d983a9681.tar.xz musl-411efb3bc61298b81456d0fdab39518d983a9681.zip |
math: fix i386 atan2.s to raise underflow for subnormal results
Diffstat (limited to 'src/math/i386')
-rw-r--r-- | src/math/i386/atan2.s | 12 | ||||
-rw-r--r-- | src/math/i386/atan2f.s | 14 |
2 files changed, 24 insertions, 2 deletions
diff --git a/src/math/i386/atan2.s b/src/math/i386/atan2.s index 5c795aff..a7d2979b 100644 --- a/src/math/i386/atan2.s +++ b/src/math/i386/atan2.s @@ -4,4 +4,14 @@ atan2: fldl 4(%esp) fldl 12(%esp) fpatan - ret + fstl 4(%esp) + mov 8(%esp),%eax + add %eax,%eax + cmp $0x00200000,%eax + jae 1f + # subnormal x, return x with underflow + fnstsw %ax + and $16,%ax + jnz 1f + fsts 4(%esp) +1: ret diff --git a/src/math/i386/atan2f.s b/src/math/i386/atan2f.s index 08627e63..14b88ce5 100644 --- a/src/math/i386/atan2f.s +++ b/src/math/i386/atan2f.s @@ -4,4 +4,16 @@ atan2f: flds 4(%esp) flds 8(%esp) fpatan - ret + fsts 4(%esp) + mov 4(%esp),%eax + add %eax,%eax + cmp $0x01000000,%eax + jae 1f + # subnormal x, return x with underflow + fnstsw %ax + and $16,%ax + jnz 1f + fld %st(0) + fmul %st(1) + fstps 4(%esp) +1: ret |