1.global expm1l 2.type expm1l,@function 3expm1l: 4 fldt 4(%esp) 5 fldl2e 6 fmulp 7 mov $0xc2820000,%eax 8 push %eax 9 flds (%esp) 10 pop %eax 11 fucomp %st(1) 12 fnstsw %ax 13 sahf 14 fld1 15 jb 1f 16 # x*log2e < -65, return -1 without underflow 17 fstp %st(1) 18 fchs 19 ret 201: fld %st(1) 21 fabs 22 fucom %st(1) 23 fnstsw %ax 24 fstp %st(0) 25 fstp %st(0) 26 sahf 27 ja 1f 28 f2xm1 29 ret 301: call 1f 31 fld1 32 fsubrp 33 ret 34 35.global exp2l 36.global __exp2l 37.hidden __exp2l 38.type exp2l,@function 39exp2l: 40__exp2l: 41 fldt 4(%esp) 421: sub $12,%esp 43 fld %st(0) 44 fstpt (%esp) 45 mov 8(%esp),%ax 46 and $0x7fff,%ax 47 cmp $0x3fff+13,%ax 48 jb 4f # |x| < 8192 49 cmp $0x3fff+15,%ax 50 jae 3f # |x| >= 32768 51 fsts (%esp) 52 cmpl $0xc67ff800,(%esp) 53 jb 2f # x > -16382 54 movl $0x5f000000,(%esp) 55 flds (%esp) # 0x1p63 56 fld %st(1) 57 fsub %st(1) 58 faddp 59 fucomp %st(1) 60 fnstsw 61 sahf 62 je 2f # x - 0x1p63 + 0x1p63 == x 63 movl $1,(%esp) 64 flds (%esp) # 0x1p-149 65 fdiv %st(1) 66 fstps (%esp) # raise underflow 672: fld1 68 fld %st(1) 69 frndint 70 fxch %st(2) 71 fsub %st(2) # st(0)=x-rint(x), st(1)=1, st(2)=rint(x) 72 f2xm1 73 faddp # 2^(x-rint(x)) 741: fscale 75 fstp %st(1) 76 add $12,%esp 77 ret 783: xor %eax,%eax 794: cmp $0x3fff-64,%ax 80 fld1 81 jb 1b # |x| < 0x1p-64 82 fstpt (%esp) 83 fistl 8(%esp) 84 fildl 8(%esp) 85 fsubrp %st(1) 86 addl $0x3fff,8(%esp) 87 f2xm1 88 fld1 89 faddp # 2^(x-rint(x)) 90 fldt (%esp) # 2^rint(x) 91 fmulp 92 add $12,%esp 93 ret 94