OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [tools/] [riscv-gnu-toolchain-master/] [glibc/] [sysdeps/] [riscv/] [ieee754.h] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 serginhofr
/* Copyright (C) 1992, 1995, 1996, 1999, 2002, 2003
2
        Free Software Foundation, Inc.
3
   This file is part of the GNU C Library.
4
 
5
   The GNU C Library is free software; you can redistribute it and/or
6
   modify it under the terms of the GNU Lesser General Public
7
   License as published by the Free Software Foundation; either
8
   version 2.1 of the License, or (at your option) any later version.
9
 
10
   The GNU C Library is distributed in the hope that it will be useful,
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
   Lesser General Public License for more details.
14
 
15
   You should have received a copy of the GNU Lesser General Public
16
   License along with the GNU C Library; if not, write to the Free
17
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18
   02111-1307 USA.  */
19
 
20
#ifndef _IEEE754_H
21
 
22
#define _IEEE754_H 1
23
#include <features.h>
24
 
25
#include <endian.h>
26
 
27
#include <float.h>
28
 
29
__BEGIN_DECLS
30
 
31
union ieee754_float
32
  {
33
    float f;
34
 
35
    /* This is the IEEE 754 single-precision format.  */
36
    struct
37
      {
38
#if     __BYTE_ORDER == __BIG_ENDIAN
39
        unsigned int negative:1;
40
        unsigned int exponent:8;
41
        unsigned int mantissa:23;
42
#endif                          /* Big endian.  */
43
#if     __BYTE_ORDER == __LITTLE_ENDIAN
44
        unsigned int mantissa:23;
45
        unsigned int exponent:8;
46
        unsigned int negative:1;
47
#endif                          /* Little endian.  */
48
      } ieee;
49
 
50
    /* This format makes it easier to see if a NaN is a signalling NaN.  */
51
    struct
52
      {
53
#if     __BYTE_ORDER == __BIG_ENDIAN
54
        unsigned int negative:1;
55
        unsigned int exponent:8;
56
        unsigned int quiet_nan:1;
57
        unsigned int mantissa:22;
58
#endif                          /* Big endian.  */
59
#if     __BYTE_ORDER == __LITTLE_ENDIAN
60
        unsigned int mantissa:22;
61
        unsigned int quiet_nan:1;
62
        unsigned int exponent:8;
63
        unsigned int negative:1;
64
#endif                          /* Little endian.  */
65
      } ieee_nan;
66
  };
67
 
68
#define IEEE754_FLOAT_BIAS      0x7f /* Added to exponent.  */
69
 
70
 
71
union ieee754_double
72
  {
73
    double d;
74
 
75
    /* This is the IEEE 754 double-precision format.  */
76
    struct
77
      {
78
#if     __BYTE_ORDER == __BIG_ENDIAN
79
        unsigned int negative:1;
80
        unsigned int exponent:11;
81
        /* Together these comprise the mantissa.  */
82
        unsigned int mantissa0:20;
83
        unsigned int mantissa1:32;
84
#endif                          /* Big endian.  */
85
#if     __BYTE_ORDER == __LITTLE_ENDIAN
86
# if    __FLOAT_WORD_ORDER == __BIG_ENDIAN
87
        unsigned int mantissa0:20;
88
        unsigned int exponent:11;
89
        unsigned int negative:1;
90
        unsigned int mantissa1:32;
91
# else
92
        /* Together these comprise the mantissa.  */
93
        unsigned int mantissa1:32;
94
        unsigned int mantissa0:20;
95
        unsigned int exponent:11;
96
        unsigned int negative:1;
97
# endif
98
#endif                          /* Little endian.  */
99
      } ieee;
100
 
101
    /* This format makes it easier to see if a NaN is a signalling NaN.  */
102
    struct
103
      {
104
#if     __BYTE_ORDER == __BIG_ENDIAN
105
        unsigned int negative:1;
106
        unsigned int exponent:11;
107
        unsigned int quiet_nan:1;
108
        /* Together these comprise the mantissa.  */
109
        unsigned int mantissa0:19;
110
        unsigned int mantissa1:32;
111
#else
112
# if    __FLOAT_WORD_ORDER == __BIG_ENDIAN
113
        unsigned int mantissa0:19;
114
        unsigned int quiet_nan:1;
115
        unsigned int exponent:11;
116
        unsigned int negative:1;
117
        unsigned int mantissa1:32;
118
# else
119
        /* Together these comprise the mantissa.  */
120
        unsigned int mantissa1:32;
121
        unsigned int mantissa0:19;
122
        unsigned int quiet_nan:1;
123
        unsigned int exponent:11;
124
        unsigned int negative:1;
125
# endif
126
#endif
127
      } ieee_nan;
128
  };
129
 
130
#define IEEE754_DOUBLE_BIAS     0x3ff /* Added to exponent.  */
131
 
132
#if LDBL_MANT_DIG == 113
133
 
134
union ieee854_long_double
135
  {
136
    long double d;
137
 
138
    /* This is the IEEE 854 quad-precision format.  */
139
    struct
140
      {
141
#if     __BYTE_ORDER == __BIG_ENDIAN
142
        unsigned int negative:1;
143
        unsigned int exponent:15;
144
        /* Together these comprise the mantissa.  */
145
        unsigned int mantissa0:16;
146
        unsigned int mantissa1:32;
147
        unsigned int mantissa2:32;
148
        unsigned int mantissa3:32;
149
#endif                          /* Big endian.  */
150
#if     __BYTE_ORDER == __LITTLE_ENDIAN
151
        /* Together these comprise the mantissa.  */
152
        unsigned int mantissa3:32;
153
        unsigned int mantissa2:32;
154
        unsigned int mantissa1:32;
155
        unsigned int mantissa0:16;
156
        unsigned int exponent:15;
157
        unsigned int negative:1;
158
#endif                          /* Little endian.  */
159
      } ieee;
160
 
161
    /* This format makes it easier to see if a NaN is a signalling NaN.  */
162
    struct
163
      {
164
#if     __BYTE_ORDER == __BIG_ENDIAN
165
        unsigned int negative:1;
166
        unsigned int exponent:15;
167
        unsigned int quiet_nan:1;
168
        /* Together these comprise the mantissa.  */
169
        unsigned int mantissa0:15;
170
        unsigned int mantissa1:32;
171
        unsigned int mantissa2:32;
172
        unsigned int mantissa3:32;
173
#endif                          /* Big endian.  */
174
#if     __BYTE_ORDER == __LITTLE_ENDIAN
175
        /* Together these comprise the mantissa.  */
176
        unsigned int mantissa3:32;
177
        unsigned int mantissa2:32;
178
        unsigned int mantissa1:32;
179
        unsigned int mantissa0:15;
180
        unsigned int quiet_nan:1;
181
        unsigned int exponent:15;
182
        unsigned int negative:1;
183
#endif                          /* Little endian.  */
184
      } ieee_nan;
185
  };
186
 
187
#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent.  */
188
 
189
#elif LDBL_MANT_DIG == 64
190
 
191
union ieee854_long_double
192
  {
193
    long double d;
194
 
195
    /* This is the IEEE 854 double-extended-precision format.  */
196
    struct
197
      {
198
#if     __BYTE_ORDER == __BIG_ENDIAN
199
        unsigned int negative:1;
200
        unsigned int exponent:15;
201
        unsigned int empty:16;
202
        unsigned int mantissa0:32;
203
        unsigned int mantissa1:32;
204
#endif
205
#if     __BYTE_ORDER == __LITTLE_ENDIAN
206
# if    __FLOAT_WORD_ORDER == __BIG_ENDIAN
207
        unsigned int exponent:15;
208
        unsigned int negative:1;
209
        unsigned int empty:16;
210
        unsigned int mantissa0:32;
211
        unsigned int mantissa1:32;
212
# else
213
        unsigned int mantissa1:32;
214
        unsigned int mantissa0:32;
215
        unsigned int exponent:15;
216
        unsigned int negative:1;
217
        unsigned int empty:16;
218
# endif
219
#endif
220
      } ieee;
221
 
222
    /* This is for NaNs in the IEEE 854 double-extended-precision format.  */
223
    struct
224
      {
225
#if     __BYTE_ORDER == __BIG_ENDIAN
226
        unsigned int negative:1;
227
        unsigned int exponent:15;
228
        unsigned int empty:16;
229
        unsigned int one:1;
230
        unsigned int quiet_nan:1;
231
        unsigned int mantissa0:30;
232
        unsigned int mantissa1:32;
233
#endif
234
#if     __BYTE_ORDER == __LITTLE_ENDIAN
235
# if    __FLOAT_WORD_ORDER == __BIG_ENDIAN
236
        unsigned int exponent:15;
237
        unsigned int negative:1;
238
        unsigned int empty:16;
239
        unsigned int mantissa0:30;
240
        unsigned int quiet_nan:1;
241
        unsigned int one:1;
242
        unsigned int mantissa1:32;
243
# else
244
        unsigned int mantissa1:32;
245
        unsigned int mantissa0:30;
246
        unsigned int quiet_nan:1;
247
        unsigned int one:1;
248
        unsigned int exponent:15;
249
        unsigned int negative:1;
250
        unsigned int empty:16;
251
# endif
252
#endif
253
      } ieee_nan;
254
  };
255
 
256
#define IEEE854_LONG_DOUBLE_BIAS 0x3fff
257
 
258
#elif LDBL_MANT_DIG == 53
259
 
260
union ieee854_long_double
261
  {
262
    long double d;
263
 
264
    /* This is the IEEE 754 double-precision format.  */
265
    struct
266
      {
267
#if     __BYTE_ORDER == __BIG_ENDIAN
268
        unsigned int negative:1;
269
        unsigned int exponent:11;
270
        /* Together these comprise the mantissa.  */
271
        unsigned int mantissa0:20;
272
        unsigned int mantissa1:32;
273
#endif                          /* Big endian.  */
274
#if     __BYTE_ORDER == __LITTLE_ENDIAN
275
# if    __FLOAT_WORD_ORDER == __BIG_ENDIAN
276
        unsigned int mantissa0:20;
277
        unsigned int exponent:11;
278
        unsigned int negative:1;
279
        unsigned int mantissa1:32;
280
# else
281
        /* Together these comprise the mantissa.  */
282
        unsigned int mantissa1:32;
283
        unsigned int mantissa0:20;
284
        unsigned int exponent:11;
285
        unsigned int negative:1;
286
# endif
287
#endif                          /* Little endian.  */
288
      } ieee;
289
 
290
    /* This format makes it easier to see if a NaN is a signalling NaN.  */
291
    struct
292
      {
293
#if     __BYTE_ORDER == __BIG_ENDIAN
294
        unsigned int negative:1;
295
        unsigned int exponent:11;
296
        unsigned int quiet_nan:1;
297
        /* Together these comprise the mantissa.  */
298
        unsigned int mantissa0:19;
299
        unsigned int mantissa1:32;
300
#else
301
# if    __FLOAT_WORD_ORDER == __BIG_ENDIAN
302
        unsigned int mantissa0:19;
303
        unsigned int quiet_nan:1;
304
        unsigned int exponent:11;
305
        unsigned int negative:1;
306
        unsigned int mantissa1:32;
307
# else
308
        /* Together these comprise the mantissa.  */
309
        unsigned int mantissa1:32;
310
        unsigned int mantissa0:19;
311
        unsigned int quiet_nan:1;
312
        unsigned int exponent:11;
313
        unsigned int negative:1;
314
# endif
315
#endif
316
      } ieee_nan;
317
  };
318
 
319
#define IEEE854_LONG_DOUBLE_BIAS        0x3ff /* Added to exponent.  */
320
 
321
#endif /* LDBL_MANT_DIG == 53 */
322
 
323
__END_DECLS
324
 
325
#endif /* ieee754.h */

powered by: WebSVN 2.1.0

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