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