Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfenv.h
Go to the documentation of this file.
00001 00006 #ifndef _FENV_H_ 00007 #define _FENV_H_ 00008 00009 /* FPU status word exception flags */ 00010 #define FE_INVALID 0x01 00011 #define FE_DENORMAL 0x02 00012 #define FE_DIVBYZERO 0x04 00013 #define FE_OVERFLOW 0x08 00014 #define FE_UNDERFLOW 0x10 00015 #define FE_INEXACT 0x20 00016 #define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \ 00017 | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) 00018 00019 /* FPU control word rounding flags */ 00020 #define FE_TONEAREST 0x0000 00021 #define FE_DOWNWARD 0x0400 00022 #define FE_UPWARD 0x0800 00023 #define FE_TOWARDZERO 0x0c00 00024 00025 /* The MXCSR exception flags are the same as the 00026 FE flags. */ 00027 #define __MXCSR_EXCEPT_FLAG_SHIFT 0 00028 00029 /* How much to shift FE status word exception flags 00030 to get MXCSR rounding flags, */ 00031 #define __MXCSR_ROUND_FLAG_SHIFT 3 00032 00033 #ifndef RC_INVOKED 00034 /* 00035 For now, support only for the basic abstraction of flags that are 00036 either set or clear. fexcept_t could be structure that holds more 00037 info about the fp environment. 00038 */ 00039 typedef unsigned short fexcept_t; 00040 00041 /* This 32-byte struct represents the entire floating point 00042 environment as stored by fnstenv or fstenv, augmented by 00043 the contents of the MXCSR register, as stored by stmxcsr 00044 (if CPU supports it). */ 00045 typedef struct 00046 { 00047 unsigned short __control_word; 00048 unsigned short __unused0; 00049 unsigned short __status_word; 00050 unsigned short __unused1; 00051 unsigned short __tag_word; 00052 unsigned short __unused2; 00053 unsigned int __ip_offset; /* instruction pointer offset */ 00054 unsigned short __ip_selector; 00055 unsigned short __opcode; 00056 unsigned int __data_offset; 00057 unsigned short __data_selector; 00058 unsigned short __unused3; 00059 unsigned int __mxcsr; /* contents of the MXCSR register */ 00060 } fenv_t; 00061 00062 00063 /*The C99 standard (7.6.9) allows us to define implementation-specific macros for 00064 different fp environments */ 00065 00066 /* The default Intel x87 floating point environment (64-bit mantissa) */ 00067 #define FE_PC64_ENV ((const fenv_t *)-1) 00068 00069 /* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */ 00070 #define FE_PC53_ENV ((const fenv_t *)-2) 00071 00072 /* The FE_DFL_ENV macro is required by standard. 00073 fesetenv will use the environment set at app startup.*/ 00074 #define FE_DFL_ENV ((const fenv_t *) 0) 00075 00076 #ifdef __cplusplus 00077 extern "C" { 00078 #endif 00079 00080 /*TODO: Some of these could be inlined */ 00081 /* 7.6.2 Exception */ 00082 00083 extern int __cdecl feclearexcept (int); 00084 extern int __cdecl fegetexceptflag (fexcept_t * flagp, int excepts); 00085 extern int __cdecl feraiseexcept (int excepts ); 00086 extern int __cdecl fesetexceptflag (const fexcept_t *, int); 00087 extern int __cdecl fetestexcept (int excepts); 00088 00089 /* 7.6.3 Rounding */ 00090 00091 extern int __cdecl fegetround (void); 00092 extern int __cdecl fesetround (int mode); 00093 00094 /* 7.6.4 Environment */ 00095 00096 extern int __cdecl fegetenv(fenv_t * envp); 00097 extern int __cdecl fesetenv(const fenv_t * ); 00098 extern int __cdecl feupdateenv(const fenv_t *); 00099 extern int __cdecl feholdexcept(fenv_t *); 00100 00101 #ifdef __cplusplus 00102 } 00103 #endif 00104 #endif /* Not RC_INVOKED */ 00105 00106 #endif /* ndef _FENV_H */ Generated on Sat May 26 2012 04:28:26 for ReactOS by
1.7.6.1
|