math: fix expm1l on x86_64 (avoid underflow for large negative x)
[oweals/musl.git] / src / math / x86_64 / exp2l.s
index e71458811385162567573b4ef015a9a37d05eae3..0d6cd563baca544f6f49401a77939965ef2cee87 100644 (file)
@@ -4,8 +4,18 @@ expm1l:
        fldt 8(%rsp)
        fldl2e
        fmulp
+       movl $0xc2820000,-4(%rsp)
+       flds -4(%rsp)
+       fucomp %st(1)
+       fnstsw %ax
+       sahf
        fld1
-       fld %st(1)
+       jb 1f
+               # x*log2e <= -65, return -1 without underflow
+       fstp %st(1)
+       fchs
+       ret
+1:     fld %st(1)
        fabs
        fucom %st(1)
        fnstsw %ax