1.global expm1f 2.type expm1f,@function 3expm1f: 4 flds 4(%esp) 5 mov 4(%esp),%eax 6 add %eax,%eax 7 cmp $0x01000000,%eax 8 jae 1f 9 # subnormal x, return x with underflow 10 fnstsw %ax 11 and $16,%ax 12 jnz 2f 13 fld %st(0) 14 fmul %st(1) 15 fstps 4(%esp) 162: ret 17 18.global expm1l 19.type expm1l,@function 20expm1l: 21 fldt 4(%esp) 22 jmp 1f 23 24.global expm1 25.type expm1,@function 26expm1: 27 fldl 4(%esp) 28 mov 8(%esp),%eax 29 add %eax,%eax 30 cmp $0x00200000,%eax 31 jae 1f 32 # subnormal x, return x with underflow 33 fnstsw %ax 34 and $16,%ax 35 jnz 2f 36 fsts 4(%esp) 372: ret 381: fldl2e 39 fmulp 40 mov $0xc2820000,%eax 41 push %eax 42 flds (%esp) 43 pop %eax 44 fucomp %st(1) 45 fnstsw %ax 46 sahf 47 fld1 48 jb 1f 49 # x*log2e < -65, return -1 without underflow 50 fstp %st(1) 51 fchs 52 ret 531: fld %st(1) 54 fabs 55 fucom %st(1) 56 fnstsw %ax 57 fstp %st(0) 58 fstp %st(0) 59 sahf 60 ja 1f 61 f2xm1 62 ret 631: call 1f 64 fld1 65 fsubrp 66 ret 67 68.global exp2f 69.type exp2f,@function 70exp2f: 71 flds 4(%esp) 72 jmp 1f 73 74.global exp2l 75.global __exp2l 76.hidden __exp2l 77.type exp2l,@function 78exp2l: 79__exp2l: 80 fldt 4(%esp) 81 jmp 1f 82 83.global expf 84.type expf,@function 85expf: 86 flds 4(%esp) 87 jmp 2f 88 89.global exp 90.type exp,@function 91exp: 92 fldl 4(%esp) 932: fldl2e 94 fmulp 95 jmp 1f 96 97.global exp2 98.type exp2,@function 99exp2: 100 fldl 4(%esp) 1011: sub $12,%esp 102 fld %st(0) 103 fstpt (%esp) 104 mov 8(%esp),%ax 105 and $0x7fff,%ax 106 cmp $0x3fff+13,%ax 107 jb 4f # |x| < 8192 108 cmp $0x3fff+15,%ax 109 jae 3f # |x| >= 32768 110 fsts (%esp) 111 cmpl $0xc67ff800,(%esp) 112 jb 2f # x > -16382 113 movl $0x5f000000,(%esp) 114 flds (%esp) # 0x1p63 115 fld %st(1) 116 fsub %st(1) 117 faddp 118 fucomp %st(1) 119 fnstsw 120 sahf 121 je 2f # x - 0x1p63 + 0x1p63 == x 122 movl $1,(%esp) 123 flds (%esp) # 0x1p-149 124 fdiv %st(1) 125 fstps (%esp) # raise underflow 1262: fld1 127 fld %st(1) 128 frndint 129 fxch %st(2) 130 fsub %st(2) # st(0)=x-rint(x), st(1)=1, st(2)=rint(x) 131 f2xm1 132 faddp # 2^(x-rint(x)) 1331: fscale 134 fstp %st(1) 135 add $12,%esp 136 ret 1373: xor %eax,%eax 1384: cmp $0x3fff-64,%ax 139 fld1 140 jb 1b # |x| < 0x1p-64 141 fstpt (%esp) 142 fistl 8(%esp) 143 fildl 8(%esp) 144 fsubrp %st(1) 145 addl $0x3fff,8(%esp) 146 f2xm1 147 fld1 148 faddp # 2^(x-rint(x)) 149 fldt (%esp) # 2^rint(x) 150 fmulp 151 add $12,%esp 152 ret 153