~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to system/include/libc/machine/ieeefp.h

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
345
#ifdef __RX__
 
346
 
 
347
#ifdef __RX_BIG_ENDIAN__
 
348
#define __IEEE_BIG_ENDIAN
 
349
#else
 
350
#define __IEEE_LITTLE_ENDIAN
 
351
#endif
 
352
 
 
353
#ifndef __RX_64BIT_DOUBLES__
 
354
#define _DOUBLE_IS_32BITS
 
355
#endif
 
356
 
 
357
#ifdef __RX_16BIT_INTS__
 
358
#define __SMALL_BITFIELDS
 
359
#endif
 
360
 
 
361
#endif
 
362
 
 
363
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
 
364
#define __IEEE_LITTLE_ENDIAN
 
365
#define __SMALL_BITFIELDS       /* 16 Bit INT */
 
366
#endif
 
367
 
 
368
#ifndef __IEEE_BIG_ENDIAN
 
369
#ifndef __IEEE_LITTLE_ENDIAN
 
370
/* XXX Emscripten #error Endianess not declared!! */
 
371
#endif /* not __IEEE_LITTLE_ENDIAN */
 
372
#endif /* not __IEEE_BIG_ENDIAN */
 
373
 
 
374
#endif /* not __IEEE_LITTLE_ENDIAN */
 
375
#endif /* not __IEEE_BIG_ENDIAN */
 
376