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:
@ -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);
|
||||
|
Reference in New Issue
Block a user