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