6 /* FPU status word exception flags */
7 #define FE_INVALID 0x01
8 #define FE_DENORMAL 0x02
9 #define FE_DIVBYZERO 0x04
10 #define FE_OVERFLOW 0x08
11 #define FE_UNDERFLOW 0x10
12 #define FE_INEXACT 0x20
13 #define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \
14 | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
16 /* FPU control word rounding flags */
17 #define FE_TONEAREST 0x0000
18 #define FE_DOWNWARD 0x0400
19 #define FE_UPWARD 0x0800
20 #define FE_TOWARDZERO 0x0c00
22 /* The MXCSR exception flags are the same as the
24 #define __MXCSR_EXCEPT_FLAG_SHIFT 0
26 /* How much to shift FE status word exception flags
27 to get the MXCSR exeptions masks, */
28 #define __MXCSR_EXCEPT_MASK_SHIFT 7
30 /* How much to shift FE control word rounding flags
31 to get MXCSR rounding flags, */
32 #define __MXCSR_ROUND_FLAG_SHIFT 3
36 For now, support only for the basic abstraction of flags that are
37 either set or clear. fexcept_t could be structure that holds more
38 info about the fp environment.
40 typedef unsigned short fexcept_t
;
42 /* This 32-byte struct represents the entire floating point
43 environment as stored by fnstenv or fstenv, augmented by
44 the contents of the MXCSR register, as stored by stmxcsr
45 (if CPU supports it). */
48 unsigned short __control_word
;
49 unsigned short __unused0
;
50 unsigned short __status_word
;
51 unsigned short __unused1
;
52 unsigned short __tag_word
;
53 unsigned short __unused2
;
54 unsigned int __ip_offset
; /* instruction pointer offset */
55 unsigned short __ip_selector
;
56 unsigned short __opcode
;
57 unsigned int __data_offset
;
58 unsigned short __data_selector
;
59 unsigned short __unused3
;
60 unsigned int __mxcsr
; /* contents of the MXCSR register */
64 /*The C99 standard (7.6.9) allows us to define implementation-specific macros for
65 different fp environments */
67 /* The default Intel x87 floating point environment (64-bit mantissa) */
68 #define FE_PC64_ENV ((const fenv_t *)-1)
70 /* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */
71 #define FE_PC53_ENV ((const fenv_t *)-2)
73 /* The FE_DFL_ENV macro is required by standard.
74 fesetenv will use the environment set at app startup.*/
75 #define FE_DFL_ENV ((const fenv_t *) 0)
81 /*TODO: Some of these could be inlined */
84 extern int __cdecl __MINGW_NOTHROW
feclearexcept (int);
85 extern int __cdecl __MINGW_NOTHROW
fegetexceptflag (fexcept_t
* flagp
, int excepts
);
86 extern int __cdecl __MINGW_NOTHROW
feraiseexcept (int excepts
);
87 extern int __cdecl __MINGW_NOTHROW
fesetexceptflag (const fexcept_t
*, int);
88 extern int __cdecl __MINGW_NOTHROW
fetestexcept (int excepts
);
92 extern int __cdecl __MINGW_NOTHROW
fegetround (void);
93 extern int __cdecl __MINGW_NOTHROW
fesetround (int mode
);
95 /* 7.6.4 Environment */
97 extern int __cdecl __MINGW_NOTHROW
fegetenv (fenv_t
* envp
);
98 extern int __cdecl __MINGW_NOTHROW
fesetenv (const fenv_t
* );
99 extern int __cdecl __MINGW_NOTHROW
feupdateenv (const fenv_t
*);
100 extern int __cdecl __MINGW_NOTHROW
feholdexcept (fenv_t
*);
105 #endif /* Not RC_INVOKED */
107 #endif /* ndef _FENV_H */