winsup/cygwin/ChangeLog:

* Makefile.in (DLL_OFILES): Add new fenv.o module.
	(fenv_CFLAGS): New flags definition for fenv.o compile.
	* autoload.cc (std_dll_init): Use fenv.h functions instead of direct
	manipulation of x87 FPU registers.
	* crt0.c (mainCRTStartup): Likewise.
	* cygwin.din (feclearexcept, fegetexceptflag, feraiseexcept,
	fesetexceptflag, fetestexcept, fegetround, fesetround, fegetenv,
	feholdexcept, fesetenv, feupdateenv, fegetprec, fesetprec,
	feenableexcept, fedisableexcept, fegetexcept, _feinitialise,
	_fe_dfl_env, _fe_nomask_env): Export new functions and data items.
	* fenv.cc: New file.
	* posix.sgml: Update status of newly-implemented APIs.
	* include/fenv.h: Likewise related header.
	* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.
This commit is contained in:
Dave Korn
2010-09-11 06:53:28 +00:00
parent f7dea7f233
commit 0f81b5d4bc
9 changed files with 683 additions and 34 deletions

View File

@ -13,11 +13,7 @@ details. */
#include "winlean.h"
#include <sys/cygwin.h>
#ifdef __i386__
#define FPU_RESERVED 0xF0C0
#define FPU_DEFAULT 0x033f
#endif
#include "fenv.h"
extern int main (int argc, char **argv);
@ -29,19 +25,7 @@ mainCRTStartup ()
#ifdef __i386__
(void)__builtin_return_address(1);
asm volatile ("andl $-16,%%esp" ::: "%esp");
{
volatile unsigned short cw;
/* Get Control Word */
__asm__ volatile ("fnstcw %0" : "=m" (cw) : );
/* mask in */
cw &= FPU_RESERVED;
cw |= FPU_DEFAULT;
/* set cw */
__asm__ volatile ("fldcw %0" :: "m" (cw));
}
_feinitialise ();
#endif
cygwin_crt0 (main);