Cygwin: fenv.h: Add feature test macros, fix values
- feenableexcept,fedisableexcept, fegetexcept are GNU-only - fegetprec, fesetprec are Solaris, use __MISC_VISIBLE - _feinitialise is Cygwin-internal only - Replace self-named FP precision values to values from http://www.open-std.org/jtc1/sc22//WG14/www/docs/n752.htm as used by Solaris. - Change return value of fesetprec to adhere to the above document and Solaris. - Document fegetprec, fesetprec as Solaris functions, not as GNU functions Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
@ -106,11 +106,14 @@ typedef __uint32_t fexcept_t;
|
||||
#define FE_TOWARDZERO (3)
|
||||
#define FE_UPWARD (2)
|
||||
|
||||
/* Precision bit values. Not defined by Posix, but follow logically. */
|
||||
#define FE_SINGLEPREC (0)
|
||||
#define FE_RESERVEDPREC (1)
|
||||
#define FE_DOUBLEPREC (2)
|
||||
#define FE_EXTENDEDPREC (3)
|
||||
/* 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
|
||||
@ -138,30 +141,34 @@ extern const fenv_t *_fe_nomask_env;
|
||||
|
||||
/* The following shall be declared as functions and may also be
|
||||
defined as macros. Function prototypes shall be provided. */
|
||||
extern int feclearexcept (int excepts);
|
||||
extern int fegetexceptflag (fexcept_t *flagp, int excepts);
|
||||
extern int feraiseexcept (int excepts);
|
||||
extern int fesetexceptflag (const fexcept_t *flagp, int excepts);
|
||||
extern int fetestexcept (int excepts);
|
||||
extern int feclearexcept (int __excepts);
|
||||
extern int fegetexceptflag (fexcept_t *__flagp, int __excepts);
|
||||
extern int feraiseexcept (int __excepts);
|
||||
extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts);
|
||||
extern int fetestexcept (int __excepts);
|
||||
extern int fegetround (void);
|
||||
extern int fesetround (int round);
|
||||
extern int fegetenv (fenv_t *envp);
|
||||
extern int feholdexcept (fenv_t *envp);
|
||||
extern int fesetenv (const fenv_t *envp);
|
||||
extern int feupdateenv (const fenv_t *envp);
|
||||
|
||||
/* These are not defined in Posix, but make sense by obvious extension. */
|
||||
extern int fegetprec (void);
|
||||
extern int fesetprec (int prec);
|
||||
|
||||
/* This is Cygwin-custom, not from the standard, for use in the Cygwin CRT. */
|
||||
extern void _feinitialise (void);
|
||||
extern int fesetround (int __round);
|
||||
extern int fegetenv (fenv_t *__envp);
|
||||
extern int feholdexcept (fenv_t *__envp);
|
||||
extern int fesetenv (const fenv_t *__envp);
|
||||
extern int feupdateenv (const fenv_t *__envp);
|
||||
|
||||
#if __GNU_VISIBLE
|
||||
/* These are GNU extensions defined in glibc. */
|
||||
extern int feenableexcept (int excepts);
|
||||
extern int fedisableexcept (int excepts);
|
||||
extern int feenableexcept (int __excepts);
|
||||
extern int fedisableexcept (int __excepts);
|
||||
extern int fegetexcept (void);
|
||||
#endif
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
extern int fegetprec (void);
|
||||
extern int fesetprec (int __prec);
|
||||
#endif
|
||||
|
||||
#ifdef __INSIDE_CYGWIN__
|
||||
/* This is Cygwin-custom, not from the standard, for use in the Cygwin CRT. */
|
||||
extern void _feinitialise ();
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Reference in New Issue
Block a user