]>
Commit | Line | Data |
---|---|---|
63640cb7 UD |
1 | /* |
2 | * Written by J.T. Conklin <jtc@netbsd.org>. | |
3 | * Adapted for exp2 by Ulrich Drepper <drepper@cygnus.com>. | |
4 | * Public domain. | |
5 | */ | |
6 | ||
7 | #include <machine/asm.h> | |
8 | ||
9 | ENTRY(__ieee754_exp2f) | |
10 | flds 4(%esp) | |
11 | /* I added the following ugly construct because exp(+-Inf) resulted | |
12 | in NaN. The ugliness results from the bright minds at Intel. | |
13 | For the i686 the code can be written better. | |
14 | -- drepper@cygnus.com. */ | |
15 | fxam /* Is NaN or +-Inf? */ | |
16 | fstsw %ax | |
17 | movb $0x45, %dh | |
18 | andb %ah, %dh | |
19 | cmpb $0x05, %dh | |
20 | je 1f /* Is +-Inf, jump. */ | |
21 | fld %st | |
22 | frndint /* int(x) */ | |
23 | fsubr %st,%st(1) /* fract(x) */ | |
24 | fxch | |
25 | f2xm1 /* 2^(fract(x)) - 1 */ | |
26 | fld1 | |
27 | faddp /* 2^(fract(x)) */ | |
28 | fscale /* e^x */ | |
29 | fstp %st(1) | |
30 | ret | |
31 | ||
32 | 1: testl $0x200, %eax /* Test sign. */ | |
33 | jz 2f /* If positive, jump. */ | |
34 | fstp %st | |
35 | fldz /* Set result to 0. */ | |
36 | 2: ret | |
37 | END (__ieee754_exp2f) | |
0ac5ae23 | 38 | strong_alias (__ieee754_exp2f, __exp2f_finite) |