Browse Source

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
rs-1.0
Szabolcs Nagy 13 years ago
parent
commit
0234394621
  1. 2
      src/math/x86_64/ceill.s
  2. 12
      src/math/x86_64/exp2l.s
  3. 2
      src/math/x86_64/truncl.s

2
src/math/x86_64/ceill.s

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

12
src/math/x86_64/exp2l.s

@ -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

2
src/math/x86_64/truncl.s

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

Loading…
Cancel
Save