OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [newlib/] [libc/] [include/] [machine/] [ieeefp.h] - Blame information for rev 868

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 148 jeremybenn
#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__ ({__typeof__(y) __y = (y); \
81
                           (sizeof (__y) == sizeof (float))  ? (1) : \
82
                           fpclassify(__y) != FP_INFINITE && fpclassify(__y) != FP_NAN;}))
83
#define isinf(x) \
84
          (__extension__ ({__typeof__(x) __x = (x); \
85
                           (sizeof (__x) == sizeof (float))  ? (0) : __isinfd(__x);}))
86
#define isnan(x) \
87
          (__extension__ ({__typeof__(x) __x = (x); \
88
                           (sizeof (__x) == sizeof (float))  ? (0) : __isnand(__x);}))
89
 
90
/*
91
 * Macros for use in ieeefp.h. We can't just define the real ones here
92
 * (like those above) as we have name space issues when this is *not*
93
 * included via generic the ieeefp.h.
94
 */
95
#define __ieeefp_isnanf(x)      0
96
#define __ieeefp_isinff(x)      0
97
#define __ieeefp_finitef(x)     1
98
#endif
99
 
100
#ifdef __sparc__
101
#ifdef __LITTLE_ENDIAN_DATA__
102
#define __IEEE_LITTLE_ENDIAN
103
#else
104
#define __IEEE_BIG_ENDIAN
105
#endif
106
#endif
107
 
108
#if defined(__m68k__) || defined(__mc68000__)
109
#define __IEEE_BIG_ENDIAN
110
#endif
111
 
112
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
113
#define __IEEE_BIG_ENDIAN
114
#ifdef __HAVE_SHORT_DOUBLE__
115
# define _DOUBLE_IS_32BITS
116
#endif
117
#endif
118
 
119
#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__) || defined (__H8300SX__)
120
#define __IEEE_BIG_ENDIAN
121
#define _FLOAT_ARG float
122
#define _DOUBLE_IS_32BITS
123
#endif
124
 
125
#ifdef __sh__
126
#ifdef __LITTLE_ENDIAN__
127
#define __IEEE_LITTLE_ENDIAN
128
#else
129
#define __IEEE_BIG_ENDIAN
130
#endif
131
#if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A_SINGLE_ONLY__)
132
#define _DOUBLE_IS_32BITS
133
#endif
134
#endif
135
 
136
#ifdef _AM29K
137
#define __IEEE_BIG_ENDIAN
138
#endif
139
 
140
#ifdef _WIN32
141
#define __IEEE_LITTLE_ENDIAN
142
#endif
143
 
144
#ifdef __i386__
145
#define __IEEE_LITTLE_ENDIAN
146
#endif
147
 
148
#ifdef __i960__
149
#define __IEEE_LITTLE_ENDIAN
150
#endif
151
 
152
#ifdef __lm32__
153
#define __IEEE_BIG_ENDIAN
154
#endif
155
 
156
#ifdef __M32R__
157
#define __IEEE_BIG_ENDIAN
158
#endif
159
 
160
#if defined(_C4x) || defined(_C3x)
161
#define __IEEE_BIG_ENDIAN
162
#define _DOUBLE_IS_32BITS
163
#endif
164
 
165
#ifdef __TIC80__
166
#define __IEEE_LITTLE_ENDIAN
167
#endif
168
 
169
#ifdef __MIPSEL__
170
#define __IEEE_LITTLE_ENDIAN
171
#endif
172
#ifdef __MIPSEB__
173
#define __IEEE_BIG_ENDIAN
174
#endif
175
 
176
#ifdef __MMIX__
177
#define __IEEE_BIG_ENDIAN
178
#endif
179
 
180
#ifdef __D30V__
181
#define __IEEE_BIG_ENDIAN
182
#endif
183
 
184
/* necv70 was __IEEE_LITTLE_ENDIAN. */
185
 
186
#ifdef __W65__
187
#define __IEEE_LITTLE_ENDIAN
188
#define _DOUBLE_IS_32BITS
189
#endif
190
 
191
#if defined(__Z8001__) || defined(__Z8002__)
192
#define __IEEE_BIG_ENDIAN
193
#endif
194
 
195
#ifdef __m88k__
196
#define __IEEE_BIG_ENDIAN
197
#endif
198
 
199
#ifdef __mn10300__
200
#define __IEEE_LITTLE_ENDIAN
201
#endif
202
 
203
#ifdef __mn10200__
204
#define __IEEE_LITTLE_ENDIAN
205
#define _DOUBLE_IS_32BITS
206
#endif
207
 
208
#ifdef __v800
209
#define __IEEE_LITTLE_ENDIAN
210
#endif
211
 
212
#ifdef __v850
213
#define __IEEE_LITTLE_ENDIAN
214
#endif
215
 
216
#ifdef __D10V__
217
#define __IEEE_BIG_ENDIAN
218
#if __DOUBLE__ == 32
219
#define _DOUBLE_IS_32BITS
220
#endif
221
#endif
222
 
223
#ifdef __PPC__
224
#if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
225
#define __IEEE_BIG_ENDIAN
226
#else
227
#if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
228
#define __IEEE_LITTLE_ENDIAN
229
#endif
230
#endif
231
#endif
232
 
233
#ifdef __xstormy16__
234
#define __IEEE_LITTLE_ENDIAN
235
#endif
236
 
237
#ifdef __arc__
238
#ifdef __big_endian__
239
#define __IEEE_BIG_ENDIAN
240
#else
241
#define __IEEE_LITTLE_ENDIAN
242
#endif
243
#endif
244
 
245
#ifdef __CRX__
246
#define __IEEE_LITTLE_ENDIAN
247
#endif
248
 
249
#ifdef __fr30__
250
#define __IEEE_BIG_ENDIAN
251
#endif
252
 
253
#ifdef __mcore__
254
#define __IEEE_BIG_ENDIAN
255
#endif
256
 
257
#ifdef __mt__
258
#define __IEEE_BIG_ENDIAN
259
#endif
260
 
261
#ifdef __frv__
262
#define __IEEE_BIG_ENDIAN
263
#endif
264
 
265
#ifdef __ia64__
266
#ifdef __BIG_ENDIAN__
267
#define __IEEE_BIG_ENDIAN
268
#else
269
#define __IEEE_LITTLE_ENDIAN
270
#endif
271
#endif
272
 
273
#ifdef __AVR__
274
#define __IEEE_LITTLE_ENDIAN
275
#define _DOUBLE_IS_32BITS
276
#endif
277
 
278
#if defined(__or32__) || defined(__or1k__) || defined(__or16__) || defined(__OR32__) || defined(__OR1K__) 
279
#define __IEEE_BIG_ENDIAN
280
#endif
281
 
282
#ifdef __IP2K__
283
#define __IEEE_BIG_ENDIAN
284
#define __SMALL_BITFIELDS
285
#define _DOUBLE_IS_32BITS
286
#endif
287
 
288
#ifdef __iq2000__
289
#define __IEEE_BIG_ENDIAN
290
#endif
291
 
292
#ifdef __MAVERICK__
293
#ifdef __ARMEL__
294
#  define __IEEE_LITTLE_ENDIAN
295
#else  /* must be __ARMEB__ */
296
#  define __IEEE_BIG_ENDIAN
297
#endif /* __ARMEL__ */
298
#endif /* __MAVERICK__ */
299
 
300
#ifdef __m32c__
301
#define __IEEE_LITTLE_ENDIAN
302
#define __SMALL_BITFIELDS
303
#endif
304
 
305
#ifdef __CRIS__
306
#define __IEEE_LITTLE_ENDIAN
307
#endif
308
 
309
#ifdef __BFIN__
310
#define __IEEE_LITTLE_ENDIAN
311
#endif
312
 
313
#ifdef __x86_64__
314
#define __IEEE_LITTLE_ENDIAN
315
#endif
316
 
317
#ifdef __mep__
318
#ifdef __LITTLE_ENDIAN__
319
#define __IEEE_LITTLE_ENDIAN
320
#else
321
#define __IEEE_BIG_ENDIAN
322
#endif
323
#endif
324
 
325
#ifndef __IEEE_BIG_ENDIAN
326
#ifndef __IEEE_LITTLE_ENDIAN
327
#error Endianess not declared!!
328
#endif /* not __IEEE_LITTLE_ENDIAN */
329
#endif /* not __IEEE_BIG_ENDIAN */
330
 
331
#endif /* not __IEEE_LITTLE_ENDIAN */
332
#endif /* not __IEEE_BIG_ENDIAN */
333
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.