Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
4349 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
 
4921 Serge 72
#if defined (__aarch64__)
73
#if defined (__AARCH64EL__)
74
#define __IEEE_LITTLE_ENDIAN
75
#else
76
#define __IEEE_BIG_ENDIAN
77
#endif
78
#endif
79
 
80
#ifdef __epiphany__
81
#define __IEEE_LITTLE_ENDIAN
82
#define Sudden_Underflow 1
83
#endif
84
 
4349 Serge 85
#ifdef __hppa__
86
#define __IEEE_BIG_ENDIAN
87
#endif
88
 
4921 Serge 89
#ifdef __nds32__
90
#ifdef __big_endian__
91
#define __IEEE_BIG_ENDIAN
92
#else
93
#define __IEEE_LITTLE_ENDIAN
94
#endif
95
#endif
96
 
4349 Serge 97
#ifdef __SPU__
98
#define __IEEE_BIG_ENDIAN
99
 
100
#define isfinite(__y) \
101
	(__extension__ ({int __cy; \
102
                           (sizeof (__y) == sizeof (float))  ? (1) : \
103
		(__cy = fpclassify(__y)) != FP_INFINITE && __cy != FP_NAN;}))
104
 
105
#define isinf(__x) ((sizeof (__x) == sizeof (float))  ?  (0) : __isinfd(__x))
106
#define isnan(__x) ((sizeof (__x) == sizeof (float))  ?  (0) : __isnand(__x))
107
 
108
/*
109
 * Macros for use in ieeefp.h. We can't just define the real ones here
110
 * (like those above) as we have name space issues when this is *not*
111
 * included via generic the ieeefp.h.
112
 */
113
#define __ieeefp_isnanf(x)	0
114
#define __ieeefp_isinff(x)	0
115
#define __ieeefp_finitef(x)	1
116
#endif
117
 
118
#ifdef __sparc__
119
#ifdef __LITTLE_ENDIAN_DATA__
120
#define __IEEE_LITTLE_ENDIAN
121
#else
122
#define __IEEE_BIG_ENDIAN
123
#endif
124
#endif
125
 
126
#if defined(__m68k__) || defined(__mc68000__)
127
#define __IEEE_BIG_ENDIAN
128
#endif
129
 
130
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
131
#define __IEEE_BIG_ENDIAN
132
#ifdef __HAVE_SHORT_DOUBLE__
133
# define _DOUBLE_IS_32BITS
134
#endif
135
#endif
136
 
137
#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__) || defined (__H8300SX__)
138
#define __IEEE_BIG_ENDIAN
139
#define _FLOAT_ARG float
140
#define _DOUBLE_IS_32BITS
141
#endif
142
 
143
#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__)
144
#define __IEEE_LITTLE_ENDIAN
145
#define _FLOAT_ARG float
146
#define _DOUBLE_IS_32BITS
147
#endif
148
 
149
 
150
#ifdef __sh__
151
#ifdef __LITTLE_ENDIAN__
152
#define __IEEE_LITTLE_ENDIAN
153
#else
154
#define __IEEE_BIG_ENDIAN
155
#endif
156
#if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A_SINGLE_ONLY__)
157
#define _DOUBLE_IS_32BITS
158
#endif
159
#endif
160
 
161
#ifdef _AM29K
162
#define __IEEE_BIG_ENDIAN
163
#endif
164
 
165
#ifdef _WIN32
166
#define __IEEE_LITTLE_ENDIAN
167
#endif
168
 
169
#ifdef __i386__
170
#define __IEEE_LITTLE_ENDIAN
171
#endif
172
 
173
#ifdef __i960__
174
#define __IEEE_LITTLE_ENDIAN
175
#endif
176
 
177
#ifdef __lm32__
178
#define __IEEE_BIG_ENDIAN
179
#endif
180
 
181
#ifdef __M32R__
182
#define __IEEE_BIG_ENDIAN
183
#endif
184
 
185
#if defined(_C4x) || defined(_C3x)
186
#define __IEEE_BIG_ENDIAN
187
#define _DOUBLE_IS_32BITS
188
#endif
189
 
190
#ifdef __TMS320C6X__
191
#ifdef _BIG_ENDIAN
192
#define __IEEE_BIG_ENDIAN
193
#else
194
#define __IEEE_LITTLE_ENDIAN
195
#endif
196
#endif
197
 
198
#ifdef __TIC80__
199
#define __IEEE_LITTLE_ENDIAN
200
#endif
201
 
202
#ifdef __MIPSEL__
203
#define __IEEE_LITTLE_ENDIAN
204
#endif
205
#ifdef __MIPSEB__
206
#define __IEEE_BIG_ENDIAN
207
#endif
208
 
209
#ifdef __MMIX__
210
#define __IEEE_BIG_ENDIAN
211
#endif
212
 
213
#ifdef __D30V__
214
#define __IEEE_BIG_ENDIAN
215
#endif
216
 
217
/* necv70 was __IEEE_LITTLE_ENDIAN. */
218
 
219
#ifdef __W65__
220
#define __IEEE_LITTLE_ENDIAN
221
#define _DOUBLE_IS_32BITS
222
#endif
223
 
224
#if defined(__Z8001__) || defined(__Z8002__)
225
#define __IEEE_BIG_ENDIAN
226
#endif
227
 
228
#ifdef __m88k__
229
#define __IEEE_BIG_ENDIAN
230
#endif
231
 
232
#ifdef __mn10300__
233
#define __IEEE_LITTLE_ENDIAN
234
#endif
235
 
236
#ifdef __mn10200__
237
#define __IEEE_LITTLE_ENDIAN
238
#define _DOUBLE_IS_32BITS
239
#endif
240
 
241
#ifdef __v800
242
#define __IEEE_LITTLE_ENDIAN
243
#endif
244
 
245
#ifdef __v850
246
#define __IEEE_LITTLE_ENDIAN
247
#endif
248
 
249
#ifdef __D10V__
250
#define __IEEE_BIG_ENDIAN
251
#if __DOUBLE__ == 32
252
#define _DOUBLE_IS_32BITS
253
#endif
254
#endif
255
 
256
#ifdef __PPC__
257
#if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
258
#define __IEEE_BIG_ENDIAN
259
#else
260
#if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
261
#define __IEEE_LITTLE_ENDIAN
262
#endif
263
#endif
264
#endif
265
 
266
#ifdef __xstormy16__
267
#define __IEEE_LITTLE_ENDIAN
268
#endif
269
 
270
#ifdef __arc__
271
#ifdef __big_endian__
272
#define __IEEE_BIG_ENDIAN
273
#else
274
#define __IEEE_LITTLE_ENDIAN
275
#endif
276
#endif
277
 
278
#ifdef __CRX__
279
#define __IEEE_LITTLE_ENDIAN
280
#endif
281
 
282
#ifdef __fr30__
283
#define __IEEE_BIG_ENDIAN
284
#endif
285
 
286
#ifdef __mcore__
287
#define __IEEE_BIG_ENDIAN
288
#endif
289
 
290
#ifdef __mt__
291
#define __IEEE_BIG_ENDIAN
292
#endif
293
 
294
#ifdef __frv__
295
#define __IEEE_BIG_ENDIAN
296
#endif
297
 
298
#ifdef __moxie__
4921 Serge 299
#ifdef __MOXIE_BIG_ENDIAN__
4349 Serge 300
#define __IEEE_BIG_ENDIAN
4921 Serge 301
#else
302
#define __IEEE_LITTLE_ENDIAN
4349 Serge 303
#endif
4921 Serge 304
#endif
4349 Serge 305
 
306
#ifdef __ia64__
307
#ifdef __BIG_ENDIAN__
308
#define __IEEE_BIG_ENDIAN
309
#else
310
#define __IEEE_LITTLE_ENDIAN
311
#endif
312
#endif
313
 
314
#ifdef __AVR__
315
#define __IEEE_LITTLE_ENDIAN
316
#define _DOUBLE_IS_32BITS
317
#endif
318
 
319
#if defined(__or32__) || defined(__or1k__) || defined(__or16__)
320
#define __IEEE_BIG_ENDIAN
321
#endif
322
 
323
#ifdef __IP2K__
324
#define __IEEE_BIG_ENDIAN
325
#define __SMALL_BITFIELDS
326
#define _DOUBLE_IS_32BITS
327
#endif
328
 
329
#ifdef __iq2000__
330
#define __IEEE_BIG_ENDIAN
331
#endif
332
 
333
#ifdef __MAVERICK__
334
#ifdef __ARMEL__
335
#  define __IEEE_LITTLE_ENDIAN
336
#else  /* must be __ARMEB__ */
337
#  define __IEEE_BIG_ENDIAN
338
#endif /* __ARMEL__ */
339
#endif /* __MAVERICK__ */
340
 
341
#ifdef __m32c__
342
#define __IEEE_LITTLE_ENDIAN
343
#define __SMALL_BITFIELDS
344
#endif
345
 
346
#ifdef __CRIS__
347
#define __IEEE_LITTLE_ENDIAN
348
#endif
349
 
350
#ifdef __BFIN__
351
#define __IEEE_LITTLE_ENDIAN
352
#endif
353
 
354
#ifdef __x86_64__
355
#define __IEEE_LITTLE_ENDIAN
356
#endif
357
 
358
#ifdef __mep__
359
#ifdef __LITTLE_ENDIAN__
360
#define __IEEE_LITTLE_ENDIAN
361
#else
362
#define __IEEE_BIG_ENDIAN
363
#endif
364
#endif
365
 
366
#ifdef __MICROBLAZE__
4921 Serge 367
#ifndef __MICROBLAZEEL__
4349 Serge 368
#define __IEEE_BIG_ENDIAN
4921 Serge 369
#else
370
#define __IEEE_LITTLE_ENDIAN
4349 Serge 371
#endif
4921 Serge 372
#endif
4349 Serge 373
 
4921 Serge 374
#ifdef __MSP430__
375
#define __IEEE_LITTLE_ENDIAN
376
#define __SMALL_BITFIELDS	/* 16 Bit INT */
377
#endif
378
 
4349 Serge 379
#ifdef __RL78__
380
#define __IEEE_LITTLE_ENDIAN
381
#define __SMALL_BITFIELDS	/* 16 Bit INT */
382
#define _DOUBLE_IS_32BITS
383
#endif
384
 
385
#ifdef __RX__
386
 
387
#ifdef __RX_BIG_ENDIAN__
388
#define __IEEE_BIG_ENDIAN
389
#else
390
#define __IEEE_LITTLE_ENDIAN
391
#endif
392
 
393
#ifndef __RX_64BIT_DOUBLES__
394
#define _DOUBLE_IS_32BITS
395
#endif
396
 
397
#ifdef __RX_16BIT_INTS__
398
#define __SMALL_BITFIELDS
399
#endif
400
 
401
#endif
402
 
403
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
404
#define __IEEE_LITTLE_ENDIAN
405
#define __SMALL_BITFIELDS	/* 16 Bit INT */
406
#endif
407
 
4921 Serge 408
#ifdef __NIOS2__
409
# ifdef __nios2_big_endian__
410
#  define __IEEE_BIG_ENDIAN
411
# else
412
#  define __IEEE_LITTLE_ENDIAN
413
# endif
414
#endif
415
 
4349 Serge 416
#ifndef __IEEE_BIG_ENDIAN
417
#ifndef __IEEE_LITTLE_ENDIAN
418
#error Endianess not declared!!
419
#endif /* not __IEEE_LITTLE_ENDIAN */
420
#endif /* not __IEEE_BIG_ENDIAN */
421
 
422
#endif /* not __IEEE_LITTLE_ENDIAN */
423
#endif /* not __IEEE_BIG_ENDIAN */
424