0,0 → 1,39 |
/* |
* Written by J.T. Conklin <jtc@netbsd.org>. |
* Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>. |
* Public domain. |
*/ |
|
.file "exp2f.S" |
.text |
.align 4 |
.globl _exp2f |
.def _exp2f; .scl 2; .type 32; .endef |
_exp2f: |
flds 4(%esp) |
/* I added the following ugly construct because exp(+-Inf) resulted |
in NaN. The ugliness results from the bright minds at Intel. |
For the i686 the code can be written better. |
-- drepper@cygnus.com. */ |
fxam /* Is NaN or +-Inf? */ |
fstsw %ax |
movb $0x45, %dh |
andb %ah, %dh |
cmpb $0x05, %dh |
je 1f /* Is +-Inf, jump. */ |
fld %st |
frndint /* int(x) */ |
fsubr %st,%st(1) /* fract(x) */ |
fxch |
f2xm1 /* 2^(fract(x)) - 1 */ |
fld1 |
faddp /* 2^(fract(x)) */ |
fscale /* e^x */ |
fstp %st(1) |
ret |
|
1: testl $0x200, %eax /* Test sign. */ |
jz 2f /* If positive, jump. */ |
fstp %st |
fldz /* Set result to 0. */ |
2: ret |