|
|
@ -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 |
|
|
fld1 |
|
|
and $0x7f,%ah |
|
|
mov -15(%rsp),%ax |
|
|
cmp $0x7f,%ah |
|
|
and $0x7fff,%ax |
|
|
jne 1f |
|
|
cmp $0x7fff,%ax |
|
|
decb -15(%rsp) |
|
|
je 1f # x = +-inf |
|
|
fstp %st(0) |
|
|
fld %st(1) |
|
|
fldt -24(%rsp) |
|
|
|
|
|
1: fld %st(0) |
|
|
|
|
|
frndint |
|
|
frndint |
|
|
fxch %st(1) |
|
|
fxch %st(2) |
|
|
fsub %st(1) |
|
|
fsub %st(2) # st(0)=x-rint(x), st(1)=1, st(2)=rint(x) |
|
|
f2xm1 |
|
|
f2xm1 |
|
|
fld1 |
|
|
faddp # 2^(x-rint(x)) |
|
|
faddp |
|
|
1: fscale |
|
|
fscale |
|
|
|
|
|
fstp %st(1) |
|
|
fstp %st(1) |
|
|
ret |
|
|
ret |
|
|
|