mirror of https://git.musl-libc.org/git/musl
3 changed files with 76 additions and 85 deletions
@ -1 +1,75 @@ |
|||
# see expl.s |
|||
.global expm1l |
|||
.type expm1l,@function |
|||
expm1l: |
|||
fldt 8(%rsp) |
|||
fldl2e |
|||
fmulp |
|||
fld1 |
|||
fld %st(1) |
|||
fabs |
|||
fucom %st(1) |
|||
fnstsw %ax |
|||
fstp %st(0) |
|||
fstp %st(0) |
|||
sahf |
|||
ja 1f |
|||
f2xm1 |
|||
ret |
|||
1: push %rax |
|||
call 1f |
|||
pop %rax |
|||
fld1 |
|||
fsubrp |
|||
ret |
|||
|
|||
.global exp2l |
|||
.type exp2l,@function |
|||
exp2l: |
|||
fldt 8(%rsp) |
|||
1: mov $0x467ff000,%eax |
|||
mov %eax,-16(%rsp) |
|||
mov $0x80000000,%eax |
|||
mov %eax,-20(%rsp) |
|||
xor %eax,%eax |
|||
mov %eax,-24(%rsp) |
|||
flds -16(%rsp) # 16380 |
|||
fld %st(1) |
|||
fabs |
|||
fucom %st(1) |
|||
fnstsw |
|||
fstp %st(0) |
|||
fstp %st(0) |
|||
sahf |
|||
ja 3f # |x| > 16380 |
|||
jp 2f # x is nan (avoid invalid except in fistp) |
|||
fld %st(0) |
|||
fistpl -16(%rsp) |
|||
fildl -16(%rsp) |
|||
fxch %st(1) |
|||
fsub %st(1) |
|||
mov $0x3fff,%eax |
|||
add %eax,-16(%rsp) |
|||
f2xm1 |
|||
fld1 |
|||
faddp # 2^(x-rint(x)) |
|||
fldt -24(%rsp) # 2^rint(x) |
|||
fmulp |
|||
2: fstp %st(1) |
|||
ret |
|||
|
|||
3: fld %st(0) |
|||
fstpt -24(%rsp) |
|||
fld1 |
|||
mov -15(%rsp),%ax |
|||
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) |
|||
ret |
|||
|
|||
@ -1,83 +0,0 @@ |
|||
.global expm1l |
|||
.type expm1l,@function |
|||
expm1l: |
|||
fldt 8(%rsp) |
|||
1: fldl2e |
|||
fmulp |
|||
fld1 |
|||
fld %st(1) |
|||
fabs |
|||
fucom %st(1) |
|||
fnstsw %ax |
|||
fstp %st(0) |
|||
fstp %st(0) |
|||
sahf |
|||
ja 1f |
|||
f2xm1 |
|||
ret |
|||
1: push %rax |
|||
call 1f |
|||
pop %rax |
|||
fld1 |
|||
fsubrp |
|||
ret |
|||
|
|||
.global expl |
|||
.type expl,@function |
|||
expl: |
|||
fldt 8(%rsp) |
|||
fldl2e |
|||
fmulp |
|||
jmp 1f |
|||
|
|||
.global exp2l |
|||
.type exp2l,@function |
|||
exp2l: |
|||
fldt 8(%rsp) |
|||
1: mov $0x467ff000,%eax |
|||
mov %eax,-16(%rsp) |
|||
mov $0x80000000,%eax |
|||
mov %eax,-20(%rsp) |
|||
xor %eax,%eax |
|||
mov %eax,-24(%rsp) |
|||
flds -16(%rsp) # 16380 |
|||
fld %st(1) |
|||
fabs |
|||
fucom %st(1) |
|||
fnstsw |
|||
fstp %st(0) |
|||
fstp %st(0) |
|||
sahf |
|||
ja 3f # |x| > 16380 |
|||
jp 2f # x is nan (avoid invalid except in fistp) |
|||
fld %st(0) |
|||
fistpl -16(%rsp) |
|||
fildl -16(%rsp) |
|||
fxch %st(1) |
|||
fsub %st(1) |
|||
mov $0x3fff,%eax |
|||
add %eax,-16(%rsp) |
|||
f2xm1 |
|||
fld1 |
|||
faddp # 2^(x-rint(x)) |
|||
fldt -24(%rsp) # 2^rint(x) |
|||
fmulp |
|||
2: fstp %st(1) |
|||
ret |
|||
|
|||
3: fld %st(0) |
|||
fstpt -24(%rsp) |
|||
fld1 |
|||
mov -15(%rsp),%ax |
|||
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) |
|||
ret |
|||
@ -1 +1 @@ |
|||
# see expm1.s |
|||
# see exp2l.s |
|||
|
|||
Loading…
Reference in new issue