Merge remote-tracking branch 'nsz/exp'
This commit is contained in:
commit
2d93d64461
2 changed files with 37 additions and 42 deletions
|
|
@ -69,18 +69,18 @@ exp:
|
||||||
exp2:
|
exp2:
|
||||||
fldl 4(%esp)
|
fldl 4(%esp)
|
||||||
1: pushl $0x467ff000
|
1: pushl $0x467ff000
|
||||||
flds (%esp)
|
flds (%esp) # 16380
|
||||||
xorl %eax,%eax
|
xorl %eax,%eax
|
||||||
pushl $0x80000000
|
pushl $0x80000000
|
||||||
push %eax
|
push %eax
|
||||||
fld %st(1)
|
fld %st(1)
|
||||||
fabs
|
fabs
|
||||||
fucom %st(1)
|
fucomp %st(1)
|
||||||
fnstsw
|
fnstsw
|
||||||
fstp %st(0)
|
fstp %st(0)
|
||||||
fstp %st(0)
|
|
||||||
sahf
|
sahf
|
||||||
ja 2f
|
ja 3f # |x| > 16380
|
||||||
|
jp 2f # x is nan (avoid invalid except in fistp)
|
||||||
fld %st(0)
|
fld %st(0)
|
||||||
fistpl 8(%esp)
|
fistpl 8(%esp)
|
||||||
fildl 8(%esp)
|
fildl 8(%esp)
|
||||||
|
|
@ -90,30 +90,27 @@ exp2:
|
||||||
add %eax,8(%esp)
|
add %eax,8(%esp)
|
||||||
f2xm1
|
f2xm1
|
||||||
fld1
|
fld1
|
||||||
faddp
|
faddp # 2^(x-rint(x))
|
||||||
fldt (%esp)
|
fldt (%esp) # 2^rint(x)
|
||||||
fmulp
|
fmulp
|
||||||
fstp %st(1)
|
fstp %st(1)
|
||||||
add $12,%esp
|
2: add $12,%esp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
2: fld %st(0)
|
3: fld %st(0)
|
||||||
fstpt (%esp)
|
fstpt (%esp)
|
||||||
mov 9(%esp),%ah
|
|
||||||
and $0x7f,%ah
|
|
||||||
cmp $0x7f,%ah
|
|
||||||
jne 1f
|
|
||||||
decb 9(%esp)
|
|
||||||
fstp %st(0)
|
|
||||||
fldt (%esp)
|
|
||||||
1: fld %st(0)
|
|
||||||
frndint
|
|
||||||
fxch %st(1)
|
|
||||||
fsub %st(1)
|
|
||||||
f2xm1
|
|
||||||
fld1
|
fld1
|
||||||
faddp
|
mov 8(%esp),%ax
|
||||||
fscale
|
and $0x7fff,%ax
|
||||||
|
cmp $0x7fff,%ax
|
||||||
|
je 1f # x = +-inf
|
||||||
|
fld %st(1)
|
||||||
|
frndint
|
||||||
|
fxch %st(2)
|
||||||
|
fsub %st(2) # st(0)=x-rint(x), st(1)=1, st(2)=rint(x)
|
||||||
|
f2xm1
|
||||||
|
faddp # 2^(x-rint(x))
|
||||||
|
1: fscale
|
||||||
fstp %st(1)
|
fstp %st(1)
|
||||||
add $12,%esp
|
add $12,%esp
|
||||||
ret
|
ret
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ exp2l:
|
||||||
mov %eax,-20(%rsp)
|
mov %eax,-20(%rsp)
|
||||||
xor %eax,%eax
|
xor %eax,%eax
|
||||||
mov %eax,-24(%rsp)
|
mov %eax,-24(%rsp)
|
||||||
flds -16(%rsp)
|
flds -16(%rsp) # 16380
|
||||||
fld %st(1)
|
fld %st(1)
|
||||||
fabs
|
fabs
|
||||||
fucom %st(1)
|
fucom %st(1)
|
||||||
|
|
@ -48,7 +48,8 @@ exp2l:
|
||||||
fstp %st(0)
|
fstp %st(0)
|
||||||
fstp %st(0)
|
fstp %st(0)
|
||||||
sahf
|
sahf
|
||||||
ja 2f
|
ja 3f # |x| > 16380
|
||||||
|
jp 2f # x is nan (avoid invalid except in fistp)
|
||||||
fld %st(0)
|
fld %st(0)
|
||||||
fistpl -16(%rsp)
|
fistpl -16(%rsp)
|
||||||
fildl -16(%rsp)
|
fildl -16(%rsp)
|
||||||
|
|
@ -58,28 +59,25 @@ exp2l:
|
||||||
add %eax,-16(%rsp)
|
add %eax,-16(%rsp)
|
||||||
f2xm1
|
f2xm1
|
||||||
fld1
|
fld1
|
||||||
faddp
|
faddp # 2^(x-rint(x))
|
||||||
fldt -24(%rsp)
|
fldt -24(%rsp) # 2^rint(x)
|
||||||
fmulp
|
fmulp
|
||||||
fstp %st(1)
|
2: fstp %st(1)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
2: fld %st(0)
|
3: fld %st(0)
|
||||||
fstpt -24(%rsp)
|
fstpt -24(%rsp)
|
||||||
mov -15(%rsp),%ah
|
|
||||||
and $0x7f,%ah
|
|
||||||
cmp $0x7f,%ah
|
|
||||||
jne 1f
|
|
||||||
decb -15(%rsp)
|
|
||||||
fstp %st(0)
|
|
||||||
fldt -24(%rsp)
|
|
||||||
1: fld %st(0)
|
|
||||||
frndint
|
|
||||||
fxch %st(1)
|
|
||||||
fsub %st(1)
|
|
||||||
f2xm1
|
|
||||||
fld1
|
fld1
|
||||||
faddp
|
mov -15(%rsp),%ax
|
||||||
fscale
|
and $0x7fff,%ax
|
||||||
|
cmp $0x7fff,%ax
|
||||||
|
je 1f # x = +-inf
|
||||||
|
fld %st(1)
|
||||||
|
frndint
|
||||||
|
fxch %st(2)
|
||||||
|
fsub %st(2) # st(0)=x-rint(x), st(1)=1, st(2)=rint(x)
|
||||||
|
f2xm1
|
||||||
|
faddp # 2^(x-rint(x))
|
||||||
|
1: fscale
|
||||||
fstp %st(1)
|
fstp %st(1)
|
||||||
ret
|
ret
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue