math: fix expm1l on x86_64 (avoid underflow for large negative x)

copy the fix from i386: return -1 instead of exp2l(x)-1 when x <= -65
This commit is contained in:
Szabolcs Nagy 2013-09-05 12:23:44 +00:00
parent e5937885de
commit 0234394621
3 changed files with 13 additions and 3 deletions

View File

@ -1 +1 @@
# see floor.s
# see floorl.s

View 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

View File

@ -1 +1 @@
# see floor.s
# see floorl.s