Add patch from Joel Sherrill for i386 and x86_64 fenv support

This commit is contained in:
Jeff Johnston 2019-10-08 16:57:37 -04:00
parent c561a625af
commit cfc4955234
37 changed files with 16544 additions and 9 deletions

View File

@ -341,6 +341,7 @@ case "${host_cpu}" in
;;
x86_64)
machine_dir=x86_64
libm_machine_dir=x86_64
;;
xc16x*)
machine_dir=xc16x

View File

@ -0,0 +1 @@
../../x86_64/sys/fenv.h

View File

@ -0,0 +1,170 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2010-2019 Red Hat, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef _SYS_FENV_H
#define _SYS_FENV_H 1
#include <sys/cdefs.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Primary sources:
The Open Group Base Specifications Issue 6:
http://www.opengroup.org/onlinepubs/000095399/basedefs/fenv.h.html
C99 Language spec (draft n1256):
<url unknown>
Intel(R) 64 and IA-32 Architectures Software Developer's Manuals:
http://www.intel.com/products/processor/manuals/
GNU C library manual pages:
http://www.gnu.org/software/libc/manual/html_node/Control-Functions.html
http://www.gnu.org/software/libc/manual/html_node/Rounding.html
http://www.gnu.org/software/libc/manual/html_node/FP-Exceptions.html
http://www.gnu.org/software/libc/manual/html_node/Status-bit-operations.html
Linux online man page(s):
http://linux.die.net/man/3/fegetexcept
The documentation quotes these sources for reference. All definitions and
code have been developed solely based on the information from these specs.
*/
/* Represents the entire floating-point environment. The floating-point
environment refers collectively to any floating-point status flags and
control modes supported by the implementation.
In this implementation, the struct contains the state information from
the fstenv/fnstenv instructions and a copy of the SSE MXCSR, since GCC
uses SSE for a lot of floating-point operations. (Cygwin assumes i686
or above these days, as does the compiler.) */
typedef struct _fenv_t
{
struct _fpu_env_info {
unsigned int _fpu_cw; /* low 16 bits only. */
unsigned int _fpu_sw; /* low 16 bits only. */
unsigned int _fpu_tagw; /* low 16 bits only. */
unsigned int _fpu_ipoff;
unsigned int _fpu_ipsel;
unsigned int _fpu_opoff;
unsigned int _fpu_opsel; /* low 16 bits only. */
} _fpu;
unsigned int _sse_mxcsr;
} fenv_t;
/* Represents the floating-point status flags collectively, including
any status the implementation associates with the flags. A floating-point
status flag is a system variable whose value is set (but never cleared)
when a floating-point exception is raised, which occurs as a side effect
of exceptional floating-point arithmetic to provide auxiliary information.
A floating-point control mode is a system variable whose value may be
set by the user to affect the subsequent behavior of floating-point
arithmetic. */
typedef __uint32_t fexcept_t;
/* The <fenv.h> header shall define the following constants if and only
if the implementation supports the floating-point exception by means
of the floating-point functions feclearexcept(), fegetexceptflag(),
feraiseexcept(), fesetexceptflag(), and fetestexcept(). Each expands to
an integer constant expression with values such that bitwise-inclusive
ORs of all combinations of the constants result in distinct values. */
#define FE_DIVBYZERO (1 << 2)
#define FE_INEXACT (1 << 5)
#define FE_INVALID (1 << 0)
#define FE_OVERFLOW (1 << 3)
#define FE_UNDERFLOW (1 << 4)
/* The <fenv.h> header shall define the following constant, which is
simply the bitwise-inclusive OR of all floating-point exception
constants defined above: */
/* in agreement w/ Linux the subnormal exception will always be masked */
#define FE_ALL_EXCEPT \
(FE_INEXACT | FE_UNDERFLOW | FE_OVERFLOW | FE_DIVBYZERO | FE_INVALID)
/* The <fenv.h> header shall define the following constants if and only
if the implementation supports getting and setting the represented
rounding direction by means of the fegetround() and fesetround()
functions. Each expands to an integer constant expression whose values
are distinct non-negative vales. */
#define FE_DOWNWARD (1)
#define FE_TONEAREST (0)
#define FE_TOWARDZERO (3)
#define FE_UPWARD (2)
/* Only Solaris and QNX implement fegetprec/fesetprec. As Solaris, use the
values defined by http://www.open-std.org/jtc1/sc22//WG14/www/docs/n752.htm
QNX defines different values. */
#if __MISC_VISIBLE
#define FE_FLTPREC (0)
#define FE_DBLPREC (2)
#define FE_LDBLPREC (3)
#endif
/* The <fenv.h> header shall define the following constant, which
represents the default floating-point environment (that is, the one
installed at program startup) and has type pointer to const-qualified
fenv_t. It can be used as an argument to the functions within the
<fenv.h> header that manage the floating-point environment. */
extern const fenv_t *_fe_dfl_env;
#define FE_DFL_ENV (_fe_dfl_env)
/* Additional implementation-defined environments, with macro
definitions beginning with FE_ and an uppercase letter,and having
type "pointer to const-qualified fenv_t",may also be specified by
the implementation. */
#if __GNU_VISIBLE
/* If possible, the GNU C Library defines a macro FE_NOMASK_ENV which
represents an environment where every exception raised causes a trap
to occur. You can test for this macro using #ifdef. It is only defined
if _GNU_SOURCE is defined. */
extern const fenv_t *_fe_nomask_env;
#define FE_NOMASK_ENV (_fe_nomask_env)
#endif /* __GNU_VISIBLE */
#ifdef __INSIDE_CYGWIN__
/* This is Cygwin-custom, not from the standard, for use in the Cygwin CRT. */
extern void _feinitialise ();
#endif
#ifdef __cplusplus
}
#endif
#endif /* _FENV_H */

View File

@ -0,0 +1,23 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
* (c) Copyright 2019 Joel Sherrill <joel@rtems.org
*/
/*
* This file is intentionally empty.
*
* Newlib's build infrastructure needs a machine specific fiel to override
* the generic implementation in the library. When a target
* implementation of the fenv.h methods puts all methods in a single file
* (e.g. fenv.c) or some as inline methods in its <sys/fenv.h>, it will need
* to override the default implementation found in a file in this directory.
*
* For each file that the target's machine directory needs to override,
* this file should be symbolically linked to that specific file name
* in the target directory. For example, the target may use fe_dfl_env.c
* from the default implementation but need to override all others.
*/
/* deliberately empty */

View File

@ -791,7 +791,8 @@ arm
i386
nds32
spu
riscv'
riscv
x86_64'
# Initialize some variables set by options.
ac_init_help=
@ -11453,7 +11454,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 11456 "configure"
#line 11457 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@ -11559,7 +11560,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 11562 "configure"
#line 11563 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@ -11815,6 +11816,8 @@ subdirs="$subdirs aarch64"
spu) subdirs="$subdirs spu"
;;
riscv) subdirs="$subdirs riscv"
;;
x86_64) subdirs="$subdirs x86_64"
;;
esac;
if test "${use_libtool}" = "yes"; then

View File

@ -31,6 +31,7 @@ if test -n "${libm_machine_dir}"; then
nds32) AC_CONFIG_SUBDIRS(nds32) ;;
spu) AC_CONFIG_SUBDIRS(spu) ;;
riscv) AC_CONFIG_SUBDIRS(riscv) ;;
x86_64) AC_CONFIG_SUBDIRS(x86_64) ;;
esac;
if test "${use_libtool}" = "yes"; then
machlib=${libm_machine_dir}/lib${libm_machine_dir}.${aext}

View File

@ -12,8 +12,10 @@ LIB_SOURCES = \
f_log.S f_logf.S f_log10.S f_log10f.S \
f_ldexp.S f_ldexpf.S f_lrint.c f_lrintf.c f_lrintl.c \
f_pow.c f_powf.c f_rint.c f_rintf.c f_rintl.c \
f_tan.S f_tanf.S f_math.h \
i386mach.h
f_tan.S f_tanf.S f_math.h i386mach.h \
fenv.c feclearexcept.c fegetenv.c fegetexceptflag.c \
fegetround.c feholdexcept.c feraiseexcept.c fesetenv.c \
fesetexceptflag.c fesetround.c fetestexcept.c feupdateenv.c
libi386_la_LDFLAGS = -Xcompiler -nostdlib

View File

@ -87,7 +87,13 @@ am__objects_1 = lib_a-f_atan2.$(OBJEXT) lib_a-f_atan2f.$(OBJEXT) \
lib_a-f_pow.$(OBJEXT) lib_a-f_powf.$(OBJEXT) \
lib_a-f_rint.$(OBJEXT) lib_a-f_rintf.$(OBJEXT) \
lib_a-f_rintl.$(OBJEXT) lib_a-f_tan.$(OBJEXT) \
lib_a-f_tanf.$(OBJEXT)
lib_a-f_tanf.$(OBJEXT) lib_a-fenv.$(OBJEXT) \
lib_a-feclearexcept.$(OBJEXT) lib_a-fegetenv.$(OBJEXT) \
lib_a-fegetexceptflag.$(OBJEXT) lib_a-fegetround.$(OBJEXT) \
lib_a-feholdexcept.$(OBJEXT) lib_a-feraiseexcept.$(OBJEXT) \
lib_a-fesetenv.$(OBJEXT) lib_a-fesetexceptflag.$(OBJEXT) \
lib_a-fesetround.$(OBJEXT) lib_a-fetestexcept.$(OBJEXT) \
lib_a-feupdateenv.$(OBJEXT)
@USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1)
lib_a_OBJECTS = $(am_lib_a_OBJECTS)
LTLIBRARIES = $(noinst_LTLIBRARIES)
@ -96,7 +102,11 @@ am__objects_2 = f_atan2.lo f_atan2f.lo f_exp.lo f_expf.lo f_frexp.lo \
f_frexpf.lo f_llrint.lo f_llrintf.lo f_llrintl.lo f_log.lo \
f_logf.lo f_log10.lo f_log10f.lo f_ldexp.lo f_ldexpf.lo \
f_lrint.lo f_lrintf.lo f_lrintl.lo f_pow.lo f_powf.lo \
f_rint.lo f_rintf.lo f_rintl.lo f_tan.lo f_tanf.lo
f_rint.lo f_rintf.lo f_rintl.lo f_tan.lo f_tanf.lo fenv.lo \
feclearexcept.lo fegetenv.lo fegetexceptflag.lo fegetround.lo \
feholdexcept.lo feraiseexcept.lo fesetenv.lo \
fesetexceptflag.lo fesetround.lo fetestexcept.lo \
feupdateenv.lo
@USE_LIBTOOL_TRUE@am_libi386_la_OBJECTS = $(am__objects_2)
libi386_la_OBJECTS = $(am_libi386_la_OBJECTS)
libi386_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@ -263,8 +273,10 @@ LIB_SOURCES = \
f_log.S f_logf.S f_log10.S f_log10f.S \
f_ldexp.S f_ldexpf.S f_lrint.c f_lrintf.c f_lrintl.c \
f_pow.c f_powf.c f_rint.c f_rintf.c f_rintl.c \
f_tan.S f_tanf.S f_math.h \
i386mach.h
f_tan.S f_tanf.S f_math.h i386mach.h \
fenv.c feclearexcept.c fegetenv.c fegetexceptflag.c \
fegetround.c feholdexcept.c feraiseexcept.c fesetenv.c \
fesetexceptflag.c fesetround.c fetestexcept.c feupdateenv.c
libi386_la_LDFLAGS = -Xcompiler -nostdlib
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libi386.la
@ -519,6 +531,78 @@ lib_a-f_rintl.o: f_rintl.c
lib_a-f_rintl.obj: f_rintl.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_rintl.obj `if test -f 'f_rintl.c'; then $(CYGPATH_W) 'f_rintl.c'; else $(CYGPATH_W) '$(srcdir)/f_rintl.c'; fi`
lib_a-fenv.o: fenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv.o `test -f 'fenv.c' || echo '$(srcdir)/'`fenv.c
lib_a-fenv.obj: fenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv.obj `if test -f 'fenv.c'; then $(CYGPATH_W) 'fenv.c'; else $(CYGPATH_W) '$(srcdir)/fenv.c'; fi`
lib_a-feclearexcept.o: feclearexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.o `test -f 'feclearexcept.c' || echo '$(srcdir)/'`feclearexcept.c
lib_a-feclearexcept.obj: feclearexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.obj `if test -f 'feclearexcept.c'; then $(CYGPATH_W) 'feclearexcept.c'; else $(CYGPATH_W) '$(srcdir)/feclearexcept.c'; fi`
lib_a-fegetenv.o: fegetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.o `test -f 'fegetenv.c' || echo '$(srcdir)/'`fegetenv.c
lib_a-fegetenv.obj: fegetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.obj `if test -f 'fegetenv.c'; then $(CYGPATH_W) 'fegetenv.c'; else $(CYGPATH_W) '$(srcdir)/fegetenv.c'; fi`
lib_a-fegetexceptflag.o: fegetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.o `test -f 'fegetexceptflag.c' || echo '$(srcdir)/'`fegetexceptflag.c
lib_a-fegetexceptflag.obj: fegetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.obj `if test -f 'fegetexceptflag.c'; then $(CYGPATH_W) 'fegetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/fegetexceptflag.c'; fi`
lib_a-fegetround.o: fegetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.o `test -f 'fegetround.c' || echo '$(srcdir)/'`fegetround.c
lib_a-fegetround.obj: fegetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.obj `if test -f 'fegetround.c'; then $(CYGPATH_W) 'fegetround.c'; else $(CYGPATH_W) '$(srcdir)/fegetround.c'; fi`
lib_a-feholdexcept.o: feholdexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.o `test -f 'feholdexcept.c' || echo '$(srcdir)/'`feholdexcept.c
lib_a-feholdexcept.obj: feholdexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.obj `if test -f 'feholdexcept.c'; then $(CYGPATH_W) 'feholdexcept.c'; else $(CYGPATH_W) '$(srcdir)/feholdexcept.c'; fi`
lib_a-feraiseexcept.o: feraiseexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.o `test -f 'feraiseexcept.c' || echo '$(srcdir)/'`feraiseexcept.c
lib_a-feraiseexcept.obj: feraiseexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.obj `if test -f 'feraiseexcept.c'; then $(CYGPATH_W) 'feraiseexcept.c'; else $(CYGPATH_W) '$(srcdir)/feraiseexcept.c'; fi`
lib_a-fesetenv.o: fesetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.o `test -f 'fesetenv.c' || echo '$(srcdir)/'`fesetenv.c
lib_a-fesetenv.obj: fesetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.obj `if test -f 'fesetenv.c'; then $(CYGPATH_W) 'fesetenv.c'; else $(CYGPATH_W) '$(srcdir)/fesetenv.c'; fi`
lib_a-fesetexceptflag.o: fesetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.o `test -f 'fesetexceptflag.c' || echo '$(srcdir)/'`fesetexceptflag.c
lib_a-fesetexceptflag.obj: fesetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.obj `if test -f 'fesetexceptflag.c'; then $(CYGPATH_W) 'fesetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/fesetexceptflag.c'; fi`
lib_a-fesetround.o: fesetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.o `test -f 'fesetround.c' || echo '$(srcdir)/'`fesetround.c
lib_a-fesetround.obj: fesetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.obj `if test -f 'fesetround.c'; then $(CYGPATH_W) 'fesetround.c'; else $(CYGPATH_W) '$(srcdir)/fesetround.c'; fi`
lib_a-fetestexcept.o: fetestexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.o `test -f 'fetestexcept.c' || echo '$(srcdir)/'`fetestexcept.c
lib_a-fetestexcept.obj: fetestexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.obj `if test -f 'fetestexcept.c'; then $(CYGPATH_W) 'fetestexcept.c'; else $(CYGPATH_W) '$(srcdir)/fetestexcept.c'; fi`
lib_a-feupdateenv.o: feupdateenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.o `test -f 'feupdateenv.c' || echo '$(srcdir)/'`feupdateenv.c
lib_a-feupdateenv.obj: feupdateenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.obj `if test -f 'feupdateenv.c'; then $(CYGPATH_W) 'feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/feupdateenv.c'; fi`
mostlyclean-libtool:
-rm -f *.lo

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../x86_64/fenv.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1,28 @@
## Process this file with automake to generate Makefile.in
INCLUDES = -I $(newlib_basedir)/../newlib/libm/common $(NEWLIB_CFLAGS) \
$(CROSS_CFLAGS) $(TARGET_CFLAGS)
LIB_SOURCES = \
feclearexcept.c fegetenv.c fegetexceptflag.c fegetround.c \
feholdexcept.c fenv.c feraiseexcept.c fesetenv.c fesetexceptflag.c \
fesetround.c fetestexcept.c feupdateenv.c
libx86_64_la_LDFLAGS = -Xcompiler -nostdlib
if USE_LIBTOOL
noinst_LTLIBRARIES = libx86_64.la
libx86_64_la_SOURCES = $(LIB_SOURCES)
noinst_DATA = objectlist.awk.in
else
noinst_LIBRARIES = lib.a
lib_a_SOURCES = $(LIB_SOURCES)
lib_a_CFLAGS = $(AM_CFLAGS)
lib_a_CCASFLAGS = $(AM_CCASFLAGS)
noinst_DATA =
endif # USE_LIBTOOL
include $(srcdir)/../../../Makefile.shared
ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host

View File

@ -0,0 +1,633 @@
# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/../../../Makefile.shared $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(srcdir)/../../../../mkinstalldirs
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = \
$(top_srcdir)/../../../../newlib-3.1.0libtool.m4 \
$(top_srcdir)/../../../../newlib-3.1.0ltoptions.m4 \
$(top_srcdir)/../../../../newlib-3.1.0ltsugar.m4 \
$(top_srcdir)/../../../../newlib-3.1.0ltversion.m4 \
$(top_srcdir)/../../../../newlib-3.1.0lt~obsolete.m4 \
$(top_srcdir)/../../../acinclude.m4 $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(SHELL) $(top_srcdir)/../../../../mkinstalldirs
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
lib_a_AR = $(AR) $(ARFLAGS)
lib_a_LIBADD =
am__objects_1 = lib_a-feclearexcept.$(OBJEXT) lib_a-fegetenv.$(OBJEXT) \
lib_a-fegetexceptflag.$(OBJEXT) lib_a-fegetround.$(OBJEXT) \
lib_a-feholdexcept.$(OBJEXT) lib_a-fenv.$(OBJEXT) \
lib_a-feraiseexcept.$(OBJEXT) lib_a-fesetenv.$(OBJEXT) \
lib_a-fesetexceptflag.$(OBJEXT) lib_a-fesetround.$(OBJEXT) \
lib_a-fetestexcept.$(OBJEXT) lib_a-feupdateenv.$(OBJEXT)
@USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1)
lib_a_OBJECTS = $(am_lib_a_OBJECTS)
LTLIBRARIES = $(noinst_LTLIBRARIES)
libx86_64_la_LIBADD =
am__objects_2 = feclearexcept.lo fegetenv.lo fegetexceptflag.lo \
fegetround.lo feholdexcept.lo fenv.lo feraiseexcept.lo \
fesetenv.lo fesetexceptflag.lo fesetround.lo fetestexcept.lo \
feupdateenv.lo
@USE_LIBTOOL_TRUE@am_libx86_64_la_OBJECTS = $(am__objects_2)
libx86_64_la_OBJECTS = $(am_libx86_64_la_OBJECTS)
libx86_64_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libx86_64_la_LDFLAGS) $(LDFLAGS) -o $@
@USE_LIBTOOL_TRUE@am_libx86_64_la_rpath =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp =
am__depfiles_maybe =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(lib_a_SOURCES) $(libx86_64_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
DATA = $(noinst_DATA)
ETAGS = etags
CTAGS = ctags
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
NM = @NM@
NMEDIT = @NMEDIT@
NO_INCLUDE_LIST = @NO_INCLUDE_LIST@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
READELF = @READELF@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
aext = @aext@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
libm_machine_dir = @libm_machine_dir@
localedir = @localedir@
localstatedir = @localstatedir@
lpfx = @lpfx@
machine_dir = @machine_dir@
mandir = @mandir@
mkdir_p = @mkdir_p@
newlib_basedir = @newlib_basedir@
oext = @oext@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sys_dir = @sys_dir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
INCLUDES = -I $(newlib_basedir)/../newlib/libm/common $(NEWLIB_CFLAGS) \
$(CROSS_CFLAGS) $(TARGET_CFLAGS)
LIB_SOURCES = \
feclearexcept.c fegetenv.c fegetexceptflag.c fegetround.c \
feholdexcept.c fenv.c feraiseexcept.c fesetenv.c fesetexceptflag.c \
fesetround.c fetestexcept.c feupdateenv.c
libx86_64_la_LDFLAGS = -Xcompiler -nostdlib
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libx86_64.la
@USE_LIBTOOL_TRUE@libx86_64_la_SOURCES = $(LIB_SOURCES)
@USE_LIBTOOL_FALSE@noinst_DATA =
@USE_LIBTOOL_TRUE@noinst_DATA = objectlist.awk.in
@USE_LIBTOOL_FALSE@noinst_LIBRARIES = lib.a
@USE_LIBTOOL_FALSE@lib_a_SOURCES = $(LIB_SOURCES)
@USE_LIBTOOL_FALSE@lib_a_CFLAGS = $(AM_CFLAGS)
@USE_LIBTOOL_FALSE@lib_a_CCASFLAGS = $(AM_CCASFLAGS)
#
# documentation rules
#
SUFFIXES = .def .xml
CHEW = ${top_builddir}/../doc/makedoc -f $(top_srcdir)/../doc/doc.str
DOCBOOK_CHEW = ${top_srcdir}/../doc/makedocbook.py
DOCBOOK_OUT_FILES = $(CHEWOUT_FILES:.def=.xml)
DOCBOOK_CHAPTERS = $(CHAPTERS:.tex=.xml)
CLEANFILES = $(CHEWOUT_FILES) $(DOCBOOK_OUT_FILES)
ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host
all: all-am
.SUFFIXES:
.SUFFIXES: .def .xml .c .lo .o .obj
am--refresh: Makefile
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../../Makefile.shared $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --cygnus'; \
$(am__cd) $(srcdir) && $(AUTOMAKE) --cygnus \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --cygnus Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(srcdir)/../../../Makefile.shared:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES) $(EXTRA_lib_a_DEPENDENCIES)
-rm -f lib.a
$(lib_a_AR) lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
$(RANLIB) lib.a
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libx86_64.la: $(libx86_64_la_OBJECTS) $(libx86_64_la_DEPENDENCIES) $(EXTRA_libx86_64_la_DEPENDENCIES)
$(libx86_64_la_LINK) $(am_libx86_64_la_rpath) $(libx86_64_la_OBJECTS) $(libx86_64_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
.c.o:
$(COMPILE) -c $<
.c.obj:
$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
$(LTCOMPILE) -c -o $@ $<
lib_a-feclearexcept.o: feclearexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.o `test -f 'feclearexcept.c' || echo '$(srcdir)/'`feclearexcept.c
lib_a-feclearexcept.obj: feclearexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.obj `if test -f 'feclearexcept.c'; then $(CYGPATH_W) 'feclearexcept.c'; else $(CYGPATH_W) '$(srcdir)/feclearexcept.c'; fi`
lib_a-fegetenv.o: fegetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.o `test -f 'fegetenv.c' || echo '$(srcdir)/'`fegetenv.c
lib_a-fegetenv.obj: fegetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.obj `if test -f 'fegetenv.c'; then $(CYGPATH_W) 'fegetenv.c'; else $(CYGPATH_W) '$(srcdir)/fegetenv.c'; fi`
lib_a-fegetexceptflag.o: fegetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.o `test -f 'fegetexceptflag.c' || echo '$(srcdir)/'`fegetexceptflag.c
lib_a-fegetexceptflag.obj: fegetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.obj `if test -f 'fegetexceptflag.c'; then $(CYGPATH_W) 'fegetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/fegetexceptflag.c'; fi`
lib_a-fegetround.o: fegetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.o `test -f 'fegetround.c' || echo '$(srcdir)/'`fegetround.c
lib_a-fegetround.obj: fegetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.obj `if test -f 'fegetround.c'; then $(CYGPATH_W) 'fegetround.c'; else $(CYGPATH_W) '$(srcdir)/fegetround.c'; fi`
lib_a-feholdexcept.o: feholdexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.o `test -f 'feholdexcept.c' || echo '$(srcdir)/'`feholdexcept.c
lib_a-feholdexcept.obj: feholdexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.obj `if test -f 'feholdexcept.c'; then $(CYGPATH_W) 'feholdexcept.c'; else $(CYGPATH_W) '$(srcdir)/feholdexcept.c'; fi`
lib_a-fenv.o: fenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv.o `test -f 'fenv.c' || echo '$(srcdir)/'`fenv.c
lib_a-fenv.obj: fenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fenv.obj `if test -f 'fenv.c'; then $(CYGPATH_W) 'fenv.c'; else $(CYGPATH_W) '$(srcdir)/fenv.c'; fi`
lib_a-feraiseexcept.o: feraiseexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.o `test -f 'feraiseexcept.c' || echo '$(srcdir)/'`feraiseexcept.c
lib_a-feraiseexcept.obj: feraiseexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.obj `if test -f 'feraiseexcept.c'; then $(CYGPATH_W) 'feraiseexcept.c'; else $(CYGPATH_W) '$(srcdir)/feraiseexcept.c'; fi`
lib_a-fesetenv.o: fesetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.o `test -f 'fesetenv.c' || echo '$(srcdir)/'`fesetenv.c
lib_a-fesetenv.obj: fesetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.obj `if test -f 'fesetenv.c'; then $(CYGPATH_W) 'fesetenv.c'; else $(CYGPATH_W) '$(srcdir)/fesetenv.c'; fi`
lib_a-fesetexceptflag.o: fesetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.o `test -f 'fesetexceptflag.c' || echo '$(srcdir)/'`fesetexceptflag.c
lib_a-fesetexceptflag.obj: fesetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.obj `if test -f 'fesetexceptflag.c'; then $(CYGPATH_W) 'fesetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/fesetexceptflag.c'; fi`
lib_a-fesetround.o: fesetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.o `test -f 'fesetround.c' || echo '$(srcdir)/'`fesetround.c
lib_a-fesetround.obj: fesetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.obj `if test -f 'fesetround.c'; then $(CYGPATH_W) 'fesetround.c'; else $(CYGPATH_W) '$(srcdir)/fesetround.c'; fi`
lib_a-fetestexcept.o: fetestexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.o `test -f 'fetestexcept.c' || echo '$(srcdir)/'`fetestexcept.c
lib_a-fetestexcept.obj: fetestexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.obj `if test -f 'fetestexcept.c'; then $(CYGPATH_W) 'fetestexcept.c'; else $(CYGPATH_W) '$(srcdir)/fetestexcept.c'; fi`
lib_a-feupdateenv.o: feupdateenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.o `test -f 'feupdateenv.c' || echo '$(srcdir)/'`feupdateenv.c
lib_a-feupdateenv.obj: feupdateenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.obj `if test -f 'feupdateenv.c'; then $(CYGPATH_W) 'feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/feupdateenv.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool config.lt
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
check-am:
check: check-am
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(DATA)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
clean-generic clean-libtool clean-noinstLIBRARIES \
clean-noinstLTLIBRARIES ctags distclean distclean-compile \
distclean-generic distclean-libtool distclean-tags dvi dvi-am \
html html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags uninstall uninstall-am
objectlist.awk.in: $(noinst_LTLIBRARIES)
-rm -f objectlist.awk.in
for i in `ls *.lo` ; \
do \
echo $$i `pwd`/$$i >> objectlist.awk.in ; \
done
.c.def:
$(CHEW) < $< > $*.def || ( rm $*.def && false )
@touch stmp-def
TARGETDOC ?= ../tmp.texi
doc: $(CHEWOUT_FILES)
for chapter in $(CHAPTERS) ; \
do \
cat $(srcdir)/$$chapter >> $(TARGETDOC) ; \
done
.c.xml:
$(DOCBOOK_CHEW) < $< > $*.xml || ( rm $*.xml && false )
@touch stmp-xml
docbook: $(DOCBOOK_OUT_FILES)
for chapter in $(DOCBOOK_CHAPTERS) ; \
do \
${top_srcdir}/../doc/chapter-texi2docbook.py <$(srcdir)/$${chapter%.xml}.tex >../$$chapter ; \
done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

1017
newlib/libm/machine/x86_64/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

14047
newlib/libm/machine/x86_64/configure vendored Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
dnl This is the newlib/libc/machine/x86_64 configure.in file.
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([newlib],[NEWLIB_VERSION])
AC_CONFIG_SRCDIR([Makefile.am])
dnl Can't be done in NEWLIB_CONFIGURE because that confuses automake.
AC_CONFIG_AUX_DIR(../../../..)
NEWLIB_CONFIGURE(../../..)
dnl We have to add the following lines because automake detects the
dnl references to libtool libraries from aclocal and tries to verify that
dnl AM_PROG_LIBTOOL is being used. This code must occur after
dnl NEWLIB_CONFIGURE.
_LT_DECL_SED
_LT_PROG_ECHO_BACKSLASH
if test "${use_libtool}" = "yes"; then
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
fi
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1,477 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2010-2019 Red Hat, Inc.
*/
#define _GNU_SOURCE // for FE_NOMASK_ENV
#include <fenv.h>
#include <errno.h>
#include <string.h> // for memcpy
#include <stdbool.h>
/* x87 supports subnormal numbers so we need it below. */
#define __FE_DENORM (1 << 1)
/* mask (= 0x3f) to disable all exceptions at initialization */
#define __FE_ALL_EXCEPT_X86 (FE_ALL_EXCEPT | __FE_DENORM)
/* Mask and shift amount for rounding bits. */
#define FE_CW_ROUND_MASK (0x0c00)
#define FE_CW_ROUND_SHIFT (10)
/* Same, for SSE MXCSR. */
#define FE_MXCSR_ROUND_MASK (0x6000)
#define FE_MXCSR_ROUND_SHIFT (13)
/* Mask and shift amount for precision bits. */
#define FE_CW_PREC_MASK (0x0300)
#define FE_CW_PREC_SHIFT (8)
/* In x87, exception status bits and mask bits occupy
corresponding bit positions in the status and control
registers, respectively. In SSE, they are both located
in the control-and-status register, with the status bits
corresponding to the x87 positions, and the mask bits
shifted by this amount to the left. */
#define FE_SSE_EXCEPT_MASK_SHIFT (7)
/* These are writable so we can initialise them at startup. */
static fenv_t fe_nomask_env;
/* These pointers provide the outside world with read-only access to them. */
const fenv_t *_fe_nomask_env = &fe_nomask_env;
/* Assume i686 or above (hence SSE available) these days, with the
compiler feels free to use it (depending on compile- time flags of
course), but we should avoid needlessly breaking any purely integer mode
apps (or apps compiled with -mno-sse), so we only manage SSE state in this
fenv module if we detect that SSE instructions are available at runtime.
If we didn't do this, all applications run on older machines would bomb
out with an invalid instruction exception right at startup; let's not
be *that* WJM! */
static inline bool use_sse(void)
{
unsigned int edx, eax;
/* Check for presence of SSE: invoke CPUID #1, check EDX bit 25. */
eax = 1;
__asm__ volatile ("cpuid" : "=d" (edx), "+a" (eax) :: "%ecx", "%ebx");
/* If this flag isn't set we'll avoid trying to execute any SSE. */
if ((edx & (1 << 25)) != 0)
return true;
return false;
}
/* forward declaration */
static void _feinitialise (void);
/* This function enables traps for each of the exceptions as indicated
by the parameter except. The individual exceptions are described in
[ ... glibc manual xref elided ...]. Only the specified exceptions are
enabled, the status of the other exceptions is not changed.
The function returns the previous enabled exceptions in case the
operation was successful, -1 otherwise. */
int
feenableexcept (int excepts)
{
unsigned short cw, old_cw;
unsigned int mxcsr = 0;
if (excepts & ~FE_ALL_EXCEPT)
return -1;
/* Get control words. */
__asm__ volatile ("fnstcw %0" : "=m" (old_cw) : );
if (use_sse())
__asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
/* Enable exceptions by clearing mask bits. */
cw = old_cw & ~excepts;
mxcsr &= ~(excepts << FE_SSE_EXCEPT_MASK_SHIFT);
/* Store updated control words. */
__asm__ volatile ("fldcw %0" :: "m" (cw));
if (use_sse())
__asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
/* Return old value. We assume SSE and x87 stay in sync. Note that
we are returning a mask of enabled exceptions, which is the opposite
of the flags in the register, which are set to disable (mask) their
related exceptions. */
return (~old_cw) & FE_ALL_EXCEPT;
}
/* This function disables traps for each of the exceptions as indicated
by the parameter except. The individual exceptions are described in
[ ... glibc manual xref elided ...]. Only the specified exceptions are
disabled, the status of the other exceptions is not changed.
The function returns the previous enabled exceptions in case the
operation was successful, -1 otherwise. */
int
fedisableexcept (int excepts)
{
unsigned short cw, old_cw;
unsigned int mxcsr = 0;
if (excepts & ~FE_ALL_EXCEPT)
return -1;
/* Get control words. */
__asm__ volatile ("fnstcw %0" : "=m" (old_cw) : );
if (use_sse())
__asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
/* Disable exceptions by setting mask bits. */
cw = old_cw | excepts;
mxcsr |= (excepts << FE_SSE_EXCEPT_MASK_SHIFT);
/* Store updated control words. */
__asm__ volatile ("fldcw %0" :: "m" (cw));
if (use_sse())
__asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
/* Return old value. We assume SSE and x87 stay in sync. Note that
we are returning a mask of enabled exceptions, which is the opposite
of the flags in the register, which are set to disable (mask) their
related exceptions. */
return (~old_cw) & FE_ALL_EXCEPT;
}
/* This function returns a bitmask of all currently enabled exceptions. It
returns -1 in case of failure. */
int
fegetexcept (void)
{
unsigned short cw;
/* Get control word. We assume SSE and x87 stay in sync. */
__asm__ volatile ("fnstcw %0" : "=m" (cw) : );
/* Exception is *dis*abled when mask bit is set. */
return (~cw) & FE_ALL_EXCEPT;
}
/* Store the floating-point environment in the variable pointed to by envp.
The function returns zero in case the operation was successful, a non-zero
value otherwise. */
int
fegetenv (fenv_t *envp)
{
/* fnstenv disables all exceptions in the x87 FPU; as this is not what is
desired here, reload the cfg saved from the x87 FPU, back to the FPU */
__asm__ volatile ("fnstenv %0\n\
fldenv %0"
: "=m" (envp->_fpu) : );
if (use_sse())
__asm__ volatile ("stmxcsr %0" : "=m" (envp->_sse_mxcsr) : );
return 0;
}
/* Store the current floating-point environment in the object pointed to
by envp. Then clear all exception flags, and set the FPU to trap no
exceptions. Not all FPUs support trapping no exceptions; if feholdexcept
cannot set this mode, it returns nonzero value. If it succeeds, it
returns zero. */
int
feholdexcept (fenv_t *envp)
{
unsigned int mxcsr;
fegetenv (envp);
mxcsr = envp->_sse_mxcsr & ~FE_ALL_EXCEPT;
if (use_sse())
__asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
__asm__ volatile ("fnclex");
fedisableexcept (FE_ALL_EXCEPT);
return 0;
}
/* Set the floating-point environment to that described by envp. The
function returns zero in case the operation was successful, a non-zero
value otherwise. */
int
fesetenv (const fenv_t *envp)
{
if ((envp == FE_DFL_ENV || envp == FE_NOMASK_ENV) &&
envp->_fpu._fpu_cw == 0)
_feinitialise ();
__asm__ volatile ("fldenv %0" :: "m" (envp->_fpu) );
if (use_sse())
__asm__ volatile ("ldmxcsr %0" :: "m" (envp->_sse_mxcsr));
return 0;
}
/* Like fesetenv, this function sets the floating-point environment to
that described by envp. However, if any exceptions were flagged in the
status word before feupdateenv was called, they remain flagged after
the call. In other words, after feupdateenv is called, the status
word is the bitwise OR of the previous status word and the one saved
in envp. The function returns zero in case the operation was successful,
a non-zero value otherwise. */
int
feupdateenv (const fenv_t *envp)
{
fenv_t envcopy;
unsigned int mxcsr = 0;
unsigned short sw;
/* Don't want to modify *envp, but want to update environment atomically,
so take a copy and merge the existing exceptions into it. */
memcpy (&envcopy, envp, sizeof *envp);
__asm__ volatile ("fnstsw %0" : "=m" (sw) : );
if (use_sse())
__asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
envcopy._fpu._fpu_sw |= (sw & FE_ALL_EXCEPT);
envcopy._sse_mxcsr |= (mxcsr & FE_ALL_EXCEPT);
return fesetenv (&envcopy);
}
/* This function clears all of the supported exception flags indicated by
excepts. The function returns zero in case the operation was successful,
a non-zero value otherwise. */
int
feclearexcept (int excepts)
{
fenv_t fenv;
if (excepts & ~FE_ALL_EXCEPT)
return EINVAL;
/* Need to save/restore whole environment to modify status word. */
fegetenv (&fenv);
/* Mask undesired bits out. */
fenv._fpu._fpu_sw &= ~excepts;
fenv._sse_mxcsr &= ~excepts;
/* Set back into FPU state. */
return fesetenv (&fenv);
}
/* This function raises the supported exceptions indicated by
excepts. If more than one exception bit in excepts is set the order
in which the exceptions are raised is undefined except that overflow
(FE_OVERFLOW) or underflow (FE_UNDERFLOW) are raised before inexact
(FE_INEXACT). Whether for overflow or underflow the inexact exception
is also raised is also implementation dependent. The function returns
zero in case the operation was successful, a non-zero value otherwise. */
int
feraiseexcept (int excepts)
{
fenv_t fenv;
if (excepts & ~FE_ALL_EXCEPT)
return EINVAL;
/* Need to save/restore whole environment to modify status word. */
__asm__ volatile ("fnstenv %0" : "=m" (fenv) : );
/* Set desired exception bits. */
fenv._fpu._fpu_sw |= excepts;
/* Set back into FPU state. */
__asm__ volatile ("fldenv %0" :: "m" (fenv));
/* And trigger them - whichever are unmasked. */
__asm__ volatile ("fwait");
return 0;
}
/* Test whether the exception flags indicated by the parameter except
are currently set. If any of them are, a nonzero value is returned
which specifies which exceptions are set. Otherwise the result is zero. */
int
fetestexcept (int excepts)
{
unsigned short sw;
unsigned int mxcsr = 0;
if (excepts & ~FE_ALL_EXCEPT)
return EINVAL;
/* Get status registers. */
__asm__ volatile ("fnstsw %0" : "=m" (sw) : );
if (use_sse())
__asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
/* Mask undesired bits out and return result. */
return (sw | mxcsr) & excepts;
}
/* This function stores in the variable pointed to by flagp an
implementation-defined value representing the current setting of the
exception flags indicated by excepts. The function returns zero in
case the operation was successful, a non-zero value otherwise. */
int
fegetexceptflag (fexcept_t *flagp, int excepts)
{
unsigned short sw;
unsigned int mxcsr = 0;
if (excepts & ~FE_ALL_EXCEPT)
return EINVAL;
/* Get status registers. */
__asm__ volatile ("fnstsw %0" : "=m" (sw) : );
if (use_sse())
__asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
/* Mask undesired bits out and set result. */
*flagp = (sw | mxcsr) & excepts;
return 0;
}
/* This function restores the flags for the exceptions indicated by
excepts to the values stored in the variable pointed to by flagp. */
int
fesetexceptflag (const fexcept_t *flagp, int excepts)
{
fenv_t fenv;
if (excepts & ~FE_ALL_EXCEPT)
return EINVAL;
/* Need to save/restore whole environment to modify status word. */
fegetenv (&fenv);
/* Set/Clear desired exception bits. */
fenv._fpu._fpu_sw &= ~excepts;
fenv._fpu._fpu_sw |= excepts & *flagp;
fenv._sse_mxcsr &= ~excepts;
fenv._sse_mxcsr |= excepts & *flagp;
/* Set back into FPU state. */
return fesetenv (&fenv);
}
/* Returns the currently selected rounding mode, represented by one of the
values of the defined rounding mode macros. */
int
fegetround (void)
{
unsigned short cw;
/* Get control word. We assume SSE and x87 stay in sync. */
__asm__ volatile ("fnstcw %0" : "=m" (cw) : );
return (cw & FE_CW_ROUND_MASK) >> FE_CW_ROUND_SHIFT;
}
/* Changes the currently selected rounding mode to round. If round does
not correspond to one of the supported rounding modes nothing is changed.
fesetround returns zero if it changed the rounding mode, a nonzero value
if the mode is not supported. */
int
fesetround (int round)
{
unsigned short cw;
unsigned int mxcsr = 0;
/* Will succeed for any valid value of the input parameter. */
if (round < FE_TONEAREST || round > FE_TOWARDZERO)
return EINVAL;
/* Get control words. */
__asm__ volatile ("fnstcw %0" : "=m" (cw) : );
if (use_sse())
__asm__ volatile ("stmxcsr %0" : "=m" (mxcsr) : );
/* Twiddle bits. */
cw &= ~FE_CW_ROUND_MASK;
cw |= (round << FE_CW_ROUND_SHIFT);
mxcsr &= ~FE_MXCSR_ROUND_MASK;
mxcsr |= (round << FE_MXCSR_ROUND_SHIFT);
/* Set back into FPU state. */
__asm__ volatile ("fldcw %0" :: "m" (cw));
if (use_sse())
__asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
/* Indicate success. */
return 0;
}
#if defined(__CYGWIN__)
/* Returns the currently selected precision, represented by one of the
values of the defined precision macros. */
int
fegetprec (void)
{
unsigned short cw;
/* Get control word. */
__asm__ volatile ("fnstcw %0" : "=m" (cw) : );
return (cw & FE_CW_PREC_MASK) >> FE_CW_PREC_SHIFT;
}
/* http://www.open-std.org/jtc1/sc22//WG14/www/docs/n752.htm:
The fesetprec function establishes the precision represented by its
argument prec. If the argument does not match a precision macro, the
precision is not changed.
The fesetprec function returns a nonzero value if and only if the
argument matches a precision macro (that is, if and only if the requested
precision can be established). */
int
fesetprec (int prec)
{
unsigned short cw;
/* Will succeed for any valid value of the input parameter. */
switch (prec)
{
case FE_FLTPREC:
case FE_DBLPREC:
case FE_LDBLPREC:
break;
default:
return 0;
}
/* Get control word. */
__asm__ volatile ("fnstcw %0" : "=m" (cw) : );
/* Twiddle bits. */
cw &= ~FE_CW_PREC_MASK;
cw |= (prec << FE_CW_PREC_SHIFT);
/* Set back into FPU state. */
__asm__ volatile ("fldcw %0" :: "m" (cw));
/* Indicate success. */
return 1;
}
#endif
/* Set up the FPU and SSE environment at the start of execution. */
static void
_feinitialise (void)
{
extern fenv_t __fe_dfl_env;
/* Reset FPU: extended prec, all exceptions cleared and masked off. */
__asm__ volatile ("fninit");
/* The default cw value, 0x37f, is rounding mode zero. The MXCSR has
no precision control, so the only thing to do is set the exception
mask bits. */
/* initialize the MXCSR register: mask all exceptions */
unsigned int mxcsr = __FE_ALL_EXCEPT_X86 << FE_SSE_EXCEPT_MASK_SHIFT;
if (use_sse())
__asm__ volatile ("ldmxcsr %0" :: "m" (mxcsr));
/* Setup unmasked environment, but leave __FE_DENORM masked. */
feenableexcept (FE_ALL_EXCEPT);
fegetenv (&fe_nomask_env);
/* Restore default exception masking (all masked). */
fedisableexcept (FE_ALL_EXCEPT);
/* Finally cache state as default environment. */
fegetenv (&__fe_dfl_env);
}

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c

View File

@ -0,0 +1 @@
../../fenv/fenv_stub.c