math: fix i386 atan2.s to raise underflow for subnormal results
authorSzabolcs Nagy <nsz@port70.net>
Thu, 15 Aug 2013 14:18:32 +0000 (14:18 +0000)
committerSzabolcs Nagy <nsz@port70.net>
Thu, 15 Aug 2013 14:18:32 +0000 (14:18 +0000)
src/math/i386/atan2.s
src/math/i386/atan2f.s

index 5c795aff8af34e29961c6c2c68c76da7d0adf3c2..a7d2979b050cbdeec7989b208ad0e55e6ccc7f91 100644 (file)
@@ -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
index 08627e6301a239aa5308541f020279365890fa95..14b88ce54a032765360b57512e6a4ec245857008 100644 (file)
@@ -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