diff options
author | Thomas Fitzsimmons <fitzsim@redhat.com> | 2001-12-14 02:50:11 +0300 |
---|---|---|
committer | Thomas Fitzsimmons <fitzsim@redhat.com> | 2001-12-14 02:50:11 +0300 |
commit | 2e1a71756e754ada402efe9f5e2d6378dc11e496 (patch) | |
tree | 7df86f70bc78f4f8b0bcef05c1a4d677d8fc400f /newlib/libm/machine/i386/f_expf.c | |
parent | b92591a1fc53f2d5c42faaf438f697006bf63a82 (diff) |
* Makefile.shared: New file.
* libc/sys/linux/shared.ld: New file.
* libm/machine/*: New files.
* libm/machine/i386/*: New files.
* Makefile.am: Add libtool support. Change math and mathfp
references to variables.
* configure.host: Add variables for libtool support. Add
libm_machine_dir variable.
* configure.in: Add objectlist variables, for libtool
support. Add CC_FOR_BUILD tests.
* libc/Makefile.am: Add libtool support. Change crt0.o
reference to be a variable reference.
* libc/configure.in: Add libtool support. Change sublib
names to be lib${subdir}.la when using libtool.
* libc/ctype/Makefile.am: Add libtool support.
* libc/errno/Makefile.am: Likewise.
* libc/locale/Makefile.am: Likewise.
* libc/machine/Makefile.am: Likewise.
* libc/machine/configure.in: Likewise.
* libc/machine/i386/Makefile.am: Likewise.
* libc/machine/i386/configure.in: Likewise.
* libc/misc/Makefile.am: Likewise.
* libc/posix/Makefile.am: Likewise.
* libc/reent/Makefile.am: Likewise.
* libc/signal/Makefile.am: Likewise.
* libc/stdio/Makefile.am: Likewise.
* libc/stdlib/Makefile.am: Likewise.
* libc/string/Makefile.am: Likewise.
* libc/sys/Makefile.am: Likewise.
* libc/sys/configure.in: Likewise.
* libc/sys/linux/Makefile.am: Add libtool support. Change
awk reference to a variable reference. Change signal.h
reference to a variable reference.
* libc/sys/linux/configure.in: Add libtool support.
* libc/syscalls/Makefile.am: Likewise.
* libc/time/Makefile.am: Likewise.
* libc/unix/Makefile.am: Likewise.
* libm/Makefile.am: Add libtool support. Change math and
mathfp references to variables.
* libm/configure.in: Add libtool support. Add
LIBM_MACHINE_LIB variable.
* libm/common/Makefile.am: Add libtool support.
* libm/math/Makefile.am: Likewise.
* libm/mathfp/Makefile.am: Likewise.
Regenerate all Makefile.in, aclocal.m4, and configure.
Diffstat (limited to 'newlib/libm/machine/i386/f_expf.c')
-rw-r--r-- | newlib/libm/machine/i386/f_expf.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/newlib/libm/machine/i386/f_expf.c b/newlib/libm/machine/i386/f_expf.c new file mode 100644 index 000000000..438772764 --- /dev/null +++ b/newlib/libm/machine/i386/f_expf.c @@ -0,0 +1,45 @@ +/* + * ==================================================== + * Copyright (C) 1998 by Cygnus Solutions. All rights reserved. + * + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* +Fast version of exp using Intel float instructions. + + float _f_expf (float x); + +Function computes e ** x. The following special cases exist: + 1. if x is 0.0 ==> return 1.0 + 2. if x is infinity ==> return infinity + 3. if x is -infinity ==> return 0.0 + 4. if x is NaN ==> return x +There is no error checking or setting of errno. +*/ + + +#include <math.h> +#include <ieeefp.h> +#include "f_math.h" + +float _f_expf (float x) +{ + if (check_finitef(x)) + { + float result; + asm ("fldl2e; fmulp; fld %%st; frndint; fsub %%st,%%st(1); fxch;" \ + "fchs; f2xm1; fld1; faddp; fxch; fld1; fscale; fstp %%st(1); fmulp" : + "=t"(result) : "0"(x)); + return result; + } + else if (x == -infinityf()) + return 0.0; + + return x; +} + + |