Mercurial > projects > ldc
comparison tango/tango/stdc/fenv.d @ 132:1700239cab2e trunk
[svn r136] MAJOR UNSTABLE UPDATE!!!
Initial commit after moving to Tango instead of Phobos.
Lots of bugfixes...
This build is not suitable for most things.
author | lindquist |
---|---|
date | Fri, 11 Jan 2008 17:57:40 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
131:5825d48b27d1 | 132:1700239cab2e |
---|---|
1 /** | |
2 * D header file for C99. | |
3 * | |
4 * Copyright: Public Domain | |
5 * License: Public Domain | |
6 * Authors: Sean Kelly, Walter Bright | |
7 * Standards: ISO/IEC 9899:1999 (E) | |
8 */ | |
9 module tango.stdc.fenv; | |
10 | |
11 extern (C): | |
12 | |
13 version( Win32 ) | |
14 { | |
15 struct fenv_t | |
16 { | |
17 ushort status; | |
18 ushort control; | |
19 ushort round; | |
20 ushort[2] reserved; | |
21 } | |
22 | |
23 alias int fexcept_t; | |
24 } | |
25 else version( linux ) | |
26 { | |
27 struct fenv_t | |
28 { | |
29 ushort __control_word; | |
30 ushort __unused1; | |
31 ushort __status_word; | |
32 ushort __unused2; | |
33 ushort __tags; | |
34 ushort __unused3; | |
35 uint __eip; | |
36 ushort __cs_selector; | |
37 ushort __opcode; | |
38 uint __data_offset; | |
39 ushort __data_selector; | |
40 ushort __unused5; | |
41 } | |
42 | |
43 alias int fexcept_t; | |
44 } | |
45 else version ( darwin ) | |
46 { | |
47 version ( BigEndian ) | |
48 { | |
49 alias uint fenv_t; | |
50 alias uint fexcept_t; | |
51 } | |
52 version ( LittleEndian ) | |
53 { | |
54 struct fenv_t | |
55 { | |
56 ushort __control; | |
57 ushort __status; | |
58 uint __mxcsr; | |
59 byte[8] __reserved; | |
60 } | |
61 | |
62 alias ushort fexcept_t; | |
63 } | |
64 } | |
65 else | |
66 { | |
67 static assert( false ); | |
68 } | |
69 | |
70 enum | |
71 { | |
72 FE_INVALID = 1, | |
73 FE_DENORMAL = 2, // non-standard | |
74 FE_DIVBYZERO = 4, | |
75 FE_OVERFLOW = 8, | |
76 FE_UNDERFLOW = 0x10, | |
77 FE_INEXACT = 0x20, | |
78 FE_ALL_EXCEPT = 0x3F, | |
79 FE_TONEAREST = 0, | |
80 FE_UPWARD = 0x800, | |
81 FE_DOWNWARD = 0x400, | |
82 FE_TOWARDZERO = 0xC00, | |
83 } | |
84 | |
85 version( Win32 ) | |
86 { | |
87 private extern fenv_t _FE_DFL_ENV; | |
88 fenv_t* FE_DFL_ENV = &_FE_DFL_ENV; | |
89 } | |
90 else version( linux ) | |
91 { | |
92 fenv_t* FE_DFL_ENV = cast(fenv_t*)(-1); | |
93 } | |
94 else version( darwin ) | |
95 { | |
96 private extern fenv_t _FE_DFL_ENV; | |
97 fenv_t* FE_DFL_ENV = &_FE_DFL_ENV; | |
98 } | |
99 else | |
100 { | |
101 static assert( false ); | |
102 } | |
103 | |
104 void feraiseexcept(int excepts); | |
105 void feclearexcept(int excepts); | |
106 | |
107 int fetestexcept(int excepts); | |
108 int feholdexcept(fenv_t* envp); | |
109 | |
110 void fegetexceptflag(fexcept_t* flagp, int excepts); | |
111 void fesetexceptflag(fexcept_t* flagp, int excepts); | |
112 | |
113 int fegetround(); | |
114 int fesetround(int round); | |
115 | |
116 void fegetenv(fenv_t* envp); | |
117 void fesetenv(fenv_t* envp); | |
118 void feupdateenv(fenv_t* envp); |