Mercurial > projects > ldc
diff druntime/import/stdc/fenv.d @ 760:6f33b427bfd1
Seems like hg ignores .di files, so I missed a bunch of stuff. complete druntime should be there now :)
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 12 Nov 2008 00:19:18 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/druntime/import/stdc/fenv.d Wed Nov 12 00:19:18 2008 +0100 @@ -0,0 +1,137 @@ +/** + * D header file for C99. + * + * Copyright: Public Domain + * License: Public Domain + * Authors: Sean Kelly, Walter Bright + * Standards: ISO/IEC 9899:1999 (E) + */ +module stdc.fenv; + +extern (C): + +version( Windows ) +{ + struct fenv_t + { + ushort status; + ushort control; + ushort round; + ushort[2] reserved; + } + + alias int fexcept_t; +} +else version( linux ) +{ + struct fenv_t + { + ushort __control_word; + ushort __unused1; + ushort __status_word; + ushort __unused2; + ushort __tags; + ushort __unused3; + uint __eip; + ushort __cs_selector; + ushort __opcode; + uint __data_offset; + ushort __data_selector; + ushort __unused5; + } + + alias int fexcept_t; +} +else version ( darwin ) +{ + version ( BigEndian ) + { + alias uint fenv_t; + alias uint fexcept_t; + } + version ( LittleEndian ) + { + struct fenv_t + { + ushort __control; + ushort __status; + uint __mxcsr; + byte[8] __reserved; + } + + alias ushort fexcept_t; + } +} +else version ( freebsd ) +{ + struct fenv_t + { + ushort __control; + ushort __mxcsr_hi; + ushort __status; + ushort __mxcsr_lo; + uint __tag; + byte[16] __other; + } + + alias ushort fexcept_t; +} +else +{ + static assert( false ); +} + +enum +{ + FE_INVALID = 1, + FE_DENORMAL = 2, // non-standard + FE_DIVBYZERO = 4, + FE_OVERFLOW = 8, + FE_UNDERFLOW = 0x10, + FE_INEXACT = 0x20, + FE_ALL_EXCEPT = 0x3F, + FE_TONEAREST = 0, + FE_UPWARD = 0x800, + FE_DOWNWARD = 0x400, + FE_TOWARDZERO = 0xC00, +} + +version( Windows ) +{ + private extern fenv_t _FE_DFL_ENV; + fenv_t* FE_DFL_ENV = &_FE_DFL_ENV; +} +else version( linux ) +{ + fenv_t* FE_DFL_ENV = cast(fenv_t*)(-1); +} +else version( darwin ) +{ + private extern fenv_t _FE_DFL_ENV; + fenv_t* FE_DFL_ENV = &_FE_DFL_ENV; +} +else version( freebsd ) +{ + private extern fenv_t __fe_dfl_env; + fenv_t* FE_DFL_ENV = &__fe_dfl_env; +} +else +{ + static assert( false ); +} + +void feraiseexcept(int excepts); +void feclearexcept(int excepts); + +int fetestexcept(int excepts); +int feholdexcept(fenv_t* envp); + +void fegetexceptflag(fexcept_t* flagp, int excepts); +void fesetexceptflag(in fexcept_t* flagp, int excepts); + +int fegetround(); +int fesetround(int round); + +void fegetenv(fenv_t* envp); +void fesetenv(in fenv_t* envp); +void feupdateenv(in fenv_t* envp);