Subversion Repositories Kolibri OS

Rev

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;