X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fmath%2Fi386%2Fexp.s;h=ca0de1d4f2ac5b7a5db23de24777fb75bd0c7002;hb=e5fb6820a42a1f675ba09c15273953e1ace65777;hp=18f6cd67f6fbc5f24056ba6e9350ffdaec666092;hpb=6f26cf3dacf9d426bbd18cecb4d486da56c17351;p=musl diff --git a/src/math/i386/exp.s b/src/math/i386/exp.s index 18f6cd67..ca0de1d4 100644 --- a/src/math/i386/exp.s +++ b/src/math/i386/exp.s @@ -1,3 +1,37 @@ +.global expm1f +.type expm1f,@function +expm1f: + flds 4(%esp) + jmp 1f + +.global expm1l +.type expm1l,@function +expm1l: + fldt 4(%esp) + jmp 1f + +.global expm1 +.type expm1,@function +expm1: + fldl 4(%esp) +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: call 1f + fld1 + fsubrp + ret + .global exp2f .type exp2f,@function exp2f: @@ -34,6 +68,44 @@ exp: .type exp2,@function exp2: fldl 4(%esp) +1: pushl $0x467ff000 + flds (%esp) + xorl %eax,%eax + pushl $0x80000000 + push %eax + fld %st(1) + fabs + fucom %st(1) + fnstsw + fstp %st(0) + fstp %st(0) + sahf + ja 2f + fld %st(0) + fistpl 8(%esp) + fildl 8(%esp) + fxch %st(1) + fsub %st(1) + mov $0x3fff,%eax + add %eax,8(%esp) + f2xm1 + fld1 + faddp + fldt (%esp) + fmulp + fstp %st(1) + add $12,%esp + ret + +2: fld %st(0) + 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) @@ -43,4 +115,5 @@ exp2: faddp fscale fstp %st(1) + add $12,%esp ret