Subversion Repositories Kolibri OS

Rev

Rev 2168 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1693 serge 1
#ifndef __IEEE_BIG_ENDIAN
2
#ifndef __IEEE_LITTLE_ENDIAN
3
 
4
/* This file can define macros to choose variations of the IEEE float
5
   format:
6
 
7
   _FLT_LARGEST_EXPONENT_IS_NORMAL
8
 
9
	Defined if the float format uses the largest exponent for finite
10
	numbers rather than NaN and infinity representations.  Such a
11
	format cannot represent NaNs or infinities at all, but it's FLT_MAX
12
	is twice the IEEE value.
13
 
14
   _FLT_NO_DENORMALS
15
 
16
	Defined if the float format does not support IEEE denormals.  Every
17
	float with a zero exponent is taken to be a zero representation.
18
 
19
   ??? At the moment, there are no equivalent macros above for doubles and
20
   the macros are not fully supported by --enable-newlib-hw-fp.
21
 
22
   __IEEE_BIG_ENDIAN
23
 
24
        Defined if the float format is big endian.  This is mutually exclusive
25
        with __IEEE_LITTLE_ENDIAN.
26
 
27
   __IEEE_LITTLE_ENDIAN
28
 
29
        Defined if the float format is little endian.  This is mutually exclusive
30
        with __IEEE_BIG_ENDIAN.
31
 
32
   Note that one of __IEEE_BIG_ENDIAN or __IEEE_LITTLE_ENDIAN must be specified for a
33
   platform or error will occur.
34
 
35
   __IEEE_BYTES_LITTLE_ENDIAN
36
 
37
        This flag is used in conjunction with __IEEE_BIG_ENDIAN to describe a situation
38
	whereby multiple words of an IEEE floating point are in big endian order, but the
39
	words themselves are little endian with respect to the bytes.
40
 
41
   _DOUBLE_IS_32BITS
42
 
43
        This is used on platforms that support double by using the 32-bit IEEE
44
        float type.
45
 
46
   _FLOAT_ARG
47
 
48
        This represents what type a float arg is passed as.  It is used when the type is
49
        not promoted to double.
50
 
51
*/
52
 
53
#if (defined(__arm__) || defined(__thumb__)) && !defined(__MAVERICK__)
54
/* ARM traditionally used big-endian words; and within those words the
55
   byte ordering was big or little endian depending upon the target.
56
   Modern floating-point formats are naturally ordered; in this case
57
   __VFP_FP__ will be defined, even if soft-float.  */
58
#ifdef __VFP_FP__
59
# ifdef __ARMEL__
60
#  define __IEEE_LITTLE_ENDIAN
61
# else
62
#  define __IEEE_BIG_ENDIAN
63
# endif
64
#else
65
# define __IEEE_BIG_ENDIAN
66
# ifdef __ARMEL__
67
#  define __IEEE_BYTES_LITTLE_ENDIAN
68
# endif
69
#endif
70
#endif
71
 
72
#ifdef __hppa__
73
#define __IEEE_BIG_ENDIAN
74
#endif
75
 
76
#ifdef __SPU__
77
#define __IEEE_BIG_ENDIAN
78
 
79
#define isfinite(__y) \
80
	(__extension__ ({int __cy; \
81
                           (sizeof (__y) == sizeof (float))  ? (1) : \
82
		(__cy = fpclassify(__y)) != FP_INFINITE && __cy != FP_NAN;}))
83
 
84
#define isinf(__x) ((sizeof (__x) == sizeof (float))  ?  (0) : __isinfd(__x))
85
#define isnan(__x) ((sizeof (__x) == sizeof (float))  ?  (0) : __isnand(__x))
86
 
87
/*
88
 * Macros for use in ieeefp.h. We can't just define the real ones here
89
 * (like those above) as we have name space issues when this is *not*
90
 * included via generic the ieeefp.h.
91
 */
92
#define __ieeefp_isnanf(x)	0
93
#define __ieeefp_isinff(x)	0
94
#define __ieeefp_finitef(x)	1
95
#endif
96
 
97
#ifdef __sparc__
98
#ifdef __LITTLE_ENDIAN_DATA__
99
#define __IEEE_LITTLE_ENDIAN
100
#else
101
#define __IEEE_BIG_ENDIAN
102
#endif
103
#endif
104
 
105
#if defined(__m68k__) || defined(__mc68000__)
106
#define __IEEE_BIG_ENDIAN
107
#endif
108
 
109
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
110
#define __IEEE_BIG_ENDIAN
111
#ifdef __HAVE_SHORT_DOUBLE__
112
# define _DOUBLE_IS_32BITS
113
#endif
114
#endif
115
 
116
#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__) || defined (__H8300SX__)
117
#define __IEEE_BIG_ENDIAN
118
#define _FLOAT_ARG float
119
#define _DOUBLE_IS_32BITS
120
#endif
121
 
122
#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__)
123
#define __IEEE_LITTLE_ENDIAN
124
#define _FLOAT_ARG float
125
#define _DOUBLE_IS_32BITS
126
#endif
127
 
128
 
129
#ifdef __sh__
130
#ifdef __LITTLE_ENDIAN__
131
#define __IEEE_LITTLE_ENDIAN
132
#else
133
#define __IEEE_BIG_ENDIAN
134
#endif
135
#if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A_SINGLE_ONLY__)
136
#define _DOUBLE_IS_32BITS
137
#endif
138
#endif
139
 
140
#ifdef _AM29K
141
#define __IEEE_BIG_ENDIAN
142
#endif
143
 
144
#ifdef _WIN32
145
#define __IEEE_LITTLE_ENDIAN
146
#endif
147
 
148
#ifdef __i386__
149
#define __IEEE_LITTLE_ENDIAN
150
#endif
151
 
152
#ifdef __i960__
153
#define __IEEE_LITTLE_ENDIAN
154
#endif
155
 
156
#ifdef __lm32__
157
#define __IEEE_BIG_ENDIAN
158
#endif
159
 
160
#ifdef __M32R__
161
#define __IEEE_BIG_ENDIAN
162
#endif
163
 
164
#if defined(_C4x) || defined(_C3x)
165
#define __IEEE_BIG_ENDIAN
166
#define _DOUBLE_IS_32BITS
167
#endif
168
 
169
#ifdef __TMS320C6X__
170
#ifdef _BIG_ENDIAN
171
#define __IEEE_BIG_ENDIAN
172
#else
173
#define __IEEE_LITTLE_ENDIAN
174
#endif
175
#endif
176
 
177
#ifdef __TIC80__
178
#define __IEEE_LITTLE_ENDIAN
179
#endif
180
 
181
#ifdef __MIPSEL__
182
#define __IEEE_LITTLE_ENDIAN
183
#endif
184
#ifdef __MIPSEB__
185
#define __IEEE_BIG_ENDIAN
186
#endif
187
 
188
#ifdef __MMIX__
189
#define __IEEE_BIG_ENDIAN
190
#endif
191
 
192
#ifdef __D30V__
193
#define __IEEE_BIG_ENDIAN
194
#endif
195
 
196
/* necv70 was __IEEE_LITTLE_ENDIAN. */
197
 
198
#ifdef __W65__
199
#define __IEEE_LITTLE_ENDIAN
200
#define _DOUBLE_IS_32BITS
201
#endif
202
 
203
#if defined(__Z8001__) || defined(__Z8002__)
204
#define __IEEE_BIG_ENDIAN
205
#endif
206
 
207
#ifdef __m88k__
208
#define __IEEE_BIG_ENDIAN
209
#endif
210
 
211
#ifdef __mn10300__
212
#define __IEEE_LITTLE_ENDIAN
213
#endif
214
 
215
#ifdef __mn10200__
216
#define __IEEE_LITTLE_ENDIAN
217
#define _DOUBLE_IS_32BITS
218
#endif
219
 
220
#ifdef __v800
221
#define __IEEE_LITTLE_ENDIAN
222
#endif
223
 
224
#ifdef __v850
225
#define __IEEE_LITTLE_ENDIAN
226
#endif
227
 
228
#ifdef __D10V__
229
#define __IEEE_BIG_ENDIAN
230
#if __DOUBLE__ == 32
231
#define _DOUBLE_IS_32BITS
232
#endif
233
#endif
234
 
235
#ifdef __PPC__
236
#if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
237
#define __IEEE_BIG_ENDIAN
238
#else
239
#if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
240
#define __IEEE_LITTLE_ENDIAN
241
#endif
242
#endif
243
#endif
244
 
245
#ifdef __xstormy16__
246
#define __IEEE_LITTLE_ENDIAN
247
#endif
248
 
249
#ifdef __arc__
250
#ifdef __big_endian__
251
#define __IEEE_BIG_ENDIAN
252
#else
253
#define __IEEE_LITTLE_ENDIAN
254
#endif
255
#endif
256
 
257
#ifdef __CRX__
258
#define __IEEE_LITTLE_ENDIAN
259
#endif
260
 
261
#ifdef __fr30__
262
#define __IEEE_BIG_ENDIAN
263
#endif
264
 
265
#ifdef __mcore__
266
#define __IEEE_BIG_ENDIAN
267
#endif
268
 
269
#ifdef __mt__
270
#define __IEEE_BIG_ENDIAN
271
#endif
272
 
273
#ifdef __frv__
274
#define __IEEE_BIG_ENDIAN
275
#endif
276
 
277
#ifdef __moxie__
278
#define __IEEE_BIG_ENDIAN
279
#endif
280
 
281
#ifdef __ia64__
282
#ifdef __BIG_ENDIAN__
283
#define __IEEE_BIG_ENDIAN
284
#else
285
#define __IEEE_LITTLE_ENDIAN
286
#endif
287
#endif
288
 
289
#ifdef __AVR__
290
#define __IEEE_LITTLE_ENDIAN
291
#define _DOUBLE_IS_32BITS
292
#endif
293
 
294
#if defined(__or32__) || defined(__or1k__) || defined(__or16__)
295
#define __IEEE_BIG_ENDIAN
296
#endif
297
 
298
#ifdef __IP2K__
299
#define __IEEE_BIG_ENDIAN
300
#define __SMALL_BITFIELDS
301
#define _DOUBLE_IS_32BITS
302
#endif
303
 
304
#ifdef __iq2000__
305
#define __IEEE_BIG_ENDIAN
306
#endif
307
 
308
#ifdef __MAVERICK__
309
#ifdef __ARMEL__
310
#  define __IEEE_LITTLE_ENDIAN
311
#else  /* must be __ARMEB__ */
312
#  define __IEEE_BIG_ENDIAN
313
#endif /* __ARMEL__ */
314
#endif /* __MAVERICK__ */
315
 
316
#ifdef __m32c__
317
#define __IEEE_LITTLE_ENDIAN
318
#define __SMALL_BITFIELDS
319
#endif
320
 
321
#ifdef __CRIS__
322
#define __IEEE_LITTLE_ENDIAN
323
#endif
324
 
325
#ifdef __BFIN__
326
#define __IEEE_LITTLE_ENDIAN
327
#endif
328
 
329
#ifdef __x86_64__
330
#define __IEEE_LITTLE_ENDIAN
331
#endif
332
 
333
#ifdef __mep__
334
#ifdef __LITTLE_ENDIAN__
335
#define __IEEE_LITTLE_ENDIAN
336
#else
337
#define __IEEE_BIG_ENDIAN
338
#endif
339
#endif
340
 
341
#ifdef __MICROBLAZE__
342
#define __IEEE_BIG_ENDIAN
343
#endif
344
 
3065 serge 345
#ifdef __RL78__
346
#define __IEEE_LITTLE_ENDIAN
347
#define __SMALL_BITFIELDS	/* 16 Bit INT */
348
#define _DOUBLE_IS_32BITS
349
#endif
350
 
1693 serge 351
#ifdef __RX__
352
 
353
#ifdef __RX_BIG_ENDIAN__
354
#define __IEEE_BIG_ENDIAN
355
#else
356
#define __IEEE_LITTLE_ENDIAN
357
#endif
358
 
359
#ifndef __RX_64BIT_DOUBLES__
360
#define _DOUBLE_IS_32BITS
361
#endif
362
 
363
#ifdef __RX_16BIT_INTS__
364
#define __SMALL_BITFIELDS
365
#endif
366
 
367
#endif
368
 
2168 serge 369
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
370
#define __IEEE_LITTLE_ENDIAN
371
#define __SMALL_BITFIELDS	/* 16 Bit INT */
372
#endif
373
 
1693 serge 374
#ifndef __IEEE_BIG_ENDIAN
375
#ifndef __IEEE_LITTLE_ENDIAN
376
#error Endianess not declared!!
377
#endif /* not __IEEE_LITTLE_ENDIAN */
378
#endif /* not __IEEE_BIG_ENDIAN */
379
 
380
#endif /* not __IEEE_LITTLE_ENDIAN */
381
#endif /* not __IEEE_BIG_ENDIAN */
382