Rev 4874 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4874 | Rev 6099 | ||
---|---|---|---|
Line 2... | Line 2... | ||
2 | #define _IEEE_FP_H_ |
2 | #define _IEEE_FP_H_ |
Line 3... | Line 3... | ||
3 | 3 | ||
Line 4... | Line 4... | ||
4 | #include "_ansi.h" |
4 | #include "_ansi.h" |
- | 5 | ||
Line 5... | Line 6... | ||
5 | 6 | #include |
|
Line 6... | Line 7... | ||
6 | #include |
7 | #include |
7 | 8 | ||
8 | _BEGIN_STD_C |
9 | _BEGIN_STD_C |
9 | 10 | ||
10 | /* FIXME FIXME FIXME: |
11 | /* FIXME FIXME FIXME: |
Line 11... | Line 12... | ||
11 | Neither of __ieee_{float,double}_shape_tape seem to be used anywhere |
12 | Neither of __ieee_{float,double}_shape_type seem to be used anywhere |
Line 44... | Line 45... | ||
44 | unsigned long lsw; |
45 | unsigned long lsw; |
45 | } parts; |
46 | } parts; |
46 | long aslong[2]; |
47 | long aslong[2]; |
47 | } __ieee_double_shape_type; |
48 | } __ieee_double_shape_type; |
Line 48... | Line -... | ||
48 | - | ||
49 | #endif |
- | |
50 | 49 | ||
Line 51... | Line 50... | ||
51 | #ifdef __IEEE_LITTLE_ENDIAN |
50 | #elif defined __IEEE_LITTLE_ENDIAN |
52 | 51 | ||
53 | typedef union |
52 | typedef union |
54 | { |
53 | { |
Line 90... | Line 89... | ||
90 | 89 | ||
Line 91... | Line 90... | ||
91 | long aslong[2]; |
90 | long aslong[2]; |
Line 92... | Line 91... | ||
92 | 91 | ||
Line 93... | Line 92... | ||
93 | } __ieee_double_shape_type; |
92 | } __ieee_double_shape_type; |
Line 94... | Line 93... | ||
94 | 93 | ||
95 | #endif |
94 | #endif /* __IEEE_LITTLE_ENDIAN */ |
Line 116... | Line 115... | ||
116 | } nan; |
115 | } nan; |
117 | long p1; |
116 | long p1; |
Line 118... | Line 117... | ||
118 | 117 | ||
Line 119... | Line -... | ||
119 | } __ieee_float_shape_type; |
- | |
120 | - | ||
121 | #endif |
118 | } __ieee_float_shape_type; |
Line 122... | Line 119... | ||
122 | 119 | ||
123 | #ifdef __IEEE_LITTLE_ENDIAN |
120 | #elif defined __IEEE_LITTLE_ENDIAN |
124 | 121 | ||
125 | typedef union |
122 | typedef union |
Line 142... | Line 139... | ||
142 | } nan; |
139 | } nan; |
143 | long p1; |
140 | long p1; |
Line 144... | Line 141... | ||
144 | 141 | ||
Line -... | Line 142... | ||
- | 142 | } __ieee_float_shape_type; |
|
- | 143 | ||
- | 144 | #endif /* __IEEE_LITTLE_ENDIAN */ |
|
- | 145 | ||
- | 146 | #ifndef _LDBL_EQ_DBL |
|
- | 147 | ||
- | 148 | #ifndef LDBL_MANT_DIG |
|
- | 149 | #error "LDBL_MANT_DIG not defined - should be found in float.h" |
|
- | 150 | ||
- | 151 | #elif LDBL_MANT_DIG == DBL_MANT_DIG |
|
- | 152 | #error "double and long double are the same size but LDBL_EQ_DBL is not defined" |
|
- | 153 | ||
- | 154 | #elif LDBL_MANT_DIG == 53 |
|
- | 155 | /* This happens when doubles are 32-bits and long doubles are 64-bits. */ |
|
- | 156 | #define EXT_EXPBITS 11 |
|
- | 157 | #define EXT_FRACHBITS 20 |
|
- | 158 | #define EXT_FRACLBITS 32 |
|
- | 159 | #define __ieee_ext_field_type unsigned long |
|
- | 160 | ||
- | 161 | #elif LDBL_MANT_DIG == 64 |
|
- | 162 | #define EXT_EXPBITS 15 |
|
- | 163 | #define EXT_FRACHBITS 32 |
|
- | 164 | #define EXT_FRACLBITS 32 |
|
- | 165 | #define __ieee_ext_field_type unsigned int |
|
- | 166 | ||
- | 167 | #elif LDBL_MANT_DIG == 65 |
|
- | 168 | #define EXT_EXPBITS 15 |
|
- | 169 | #define EXT_FRACHBITS 32 |
|
- | 170 | #define EXT_FRACLBITS 32 |
|
- | 171 | #define __ieee_ext_field_type unsigned int |
|
- | 172 | ||
- | 173 | #elif LDBL_MANT_DIG == 112 |
|
- | 174 | #define EXT_EXPBITS 15 |
|
- | 175 | #define EXT_FRACHBITS 48 |
|
- | 176 | #define EXT_FRACLBITS 64 |
|
- | 177 | #define __ieee_ext_field_type unsigned long long |
|
- | 178 | ||
- | 179 | #elif LDBL_MANT_DIG == 113 |
|
- | 180 | #define EXT_EXPBITS 15 |
|
- | 181 | #define EXT_FRACHBITS 48 |
|
- | 182 | #define EXT_FRACLBITS 64 |
|
- | 183 | #define __ieee_ext_field_type unsigned long long |
|
- | 184 | ||
145 | } __ieee_float_shape_type; |
185 | #else |
Line -... | Line 186... | ||
- | 186 | #error Unsupported value for LDBL_MANT_DIG |
|
- | 187 | #endif |
|
- | 188 | ||
Line -... | Line 189... | ||
- | 189 | #define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1) /* 32767 */ |
|
- | 190 | #define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1) /* 16383 */ |
|
- | 191 | #define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS) |
|
- | 192 | ||
- | 193 | typedef struct ieee_ext |
|
- | 194 | { |
|
- | 195 | __ieee_ext_field_type ext_fracl : EXT_FRACLBITS; |
|
- | 196 | __ieee_ext_field_type ext_frach : EXT_FRACHBITS; |
|
- | 197 | __ieee_ext_field_type ext_exp : EXT_EXPBITS; |
|
- | 198 | __ieee_ext_field_type ext_sign : 1; |
|
- | 199 | } ieee_ext; |
|
- | 200 | ||
- | 201 | typedef union ieee_ext_u |
|
Line -... | Line 202... | ||
- | 202 | { |
|
Line 146... | Line 203... | ||
146 | 203 | long double extu_ld; |
|
Line 147... | Line 204... | ||
147 | #endif |
204 | struct ieee_ext extu_ext; |