mirror of
https://github.com/fluencelabs/musl
synced 2025-07-30 22:01:57 +00:00
fix broken exponential asm
infinities were getting converted into nans. the new code simply tests for infinity and replaces it with a large magnitude value of the same sign. also, the fcomi instruction is apparently not part of the i387 instruction set, so avoid using it.
This commit is contained in:
@@ -34,6 +34,15 @@ exp:
|
||||
.type exp2,@function
|
||||
exp2:
|
||||
fldl 4(%esp)
|
||||
1: fxam
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jnp 1f
|
||||
jnc 1f
|
||||
fstps 4(%esp)
|
||||
mov $0xfe,%al
|
||||
and %al,7(%esp)
|
||||
flds 4(%esp)
|
||||
1: fld %st(0)
|
||||
frndint
|
||||
fxch %st(1)
|
||||
|
@@ -14,12 +14,23 @@ expm1l:
|
||||
.type expm1,@function
|
||||
expm1:
|
||||
fldl 4(%esp)
|
||||
1: fxam
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jnp 1f
|
||||
jnc 1f
|
||||
fstps 4(%esp)
|
||||
mov $0xfe,%al
|
||||
and %al,7(%esp)
|
||||
flds 4(%esp)
|
||||
1: fldl2e
|
||||
fmulp
|
||||
fld %st(0)
|
||||
frndint
|
||||
fldz
|
||||
fcompi
|
||||
fcomp
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jnz 1f
|
||||
fstp %st(0)
|
||||
f2xm1
|
||||
|
Reference in New Issue
Block a user