source: svn/trunk/newcon3bcm2_21bu/toolchain/mipsel-linux-uclibc/include/ieee754.h @ 2

Last change on this file since 2 was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 4.9 KB
Line 
1/* Copyright (C) 1992, 1995, 1996, 1999 Free Software Foundation, Inc.
2   This file is part of the GNU C Library.
3
4   The GNU C Library is free software; you can redistribute it and/or
5   modify it under the terms of the GNU Lesser General Public
6   License as published by the Free Software Foundation; either
7   version 2.1 of the License, or (at your option) any later version.
8
9   The GNU C Library is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   Lesser General Public License for more details.
13
14   You should have received a copy of the GNU Lesser General Public
15   License along with the GNU C Library; if not, write to the Free
16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17   02111-1307 USA.  */
18
19#ifndef _IEEE754_H
20
21#define _IEEE754_H 1
22#include <features.h>
23
24#include <endian.h>
25
26__BEGIN_DECLS
27
28union ieee754_float
29  {
30    float f;
31
32    /* This is the IEEE 754 single-precision format.  */
33    struct
34      {
35#if     __BYTE_ORDER == __BIG_ENDIAN
36        unsigned int negative:1;
37        unsigned int exponent:8;
38        unsigned int mantissa:23;
39#endif                          /* Big endian.  */
40#if     __BYTE_ORDER == __LITTLE_ENDIAN
41        unsigned int mantissa:23;
42        unsigned int exponent:8;
43        unsigned int negative:1;
44#endif                          /* Little endian.  */
45      } ieee;
46
47    /* This format makes it easier to see if a NaN is a signalling NaN.  */
48    struct
49      {
50#if     __BYTE_ORDER == __BIG_ENDIAN
51        unsigned int negative:1;
52        unsigned int exponent:8;
53        unsigned int quiet_nan:1;
54        unsigned int mantissa:22;
55#endif                          /* Big endian.  */
56#if     __BYTE_ORDER == __LITTLE_ENDIAN
57        unsigned int mantissa:22;
58        unsigned int quiet_nan:1;
59        unsigned int exponent:8;
60        unsigned int negative:1;
61#endif                          /* Little endian.  */
62      } ieee_nan;
63  };
64
65#define IEEE754_FLOAT_BIAS      0x7f /* Added to exponent.  */
66
67
68union ieee754_double
69  {
70    double d;
71
72    /* This is the IEEE 754 double-precision format.  */
73    struct
74      {
75#if     __BYTE_ORDER == __BIG_ENDIAN
76        unsigned int negative:1;
77        unsigned int exponent:11;
78        /* Together these comprise the mantissa.  */
79        unsigned int mantissa0:20;
80        unsigned int mantissa1:32;
81#endif                          /* Big endian.  */
82#if     __BYTE_ORDER == __LITTLE_ENDIAN
83# if    __FLOAT_WORD_ORDER == BIG_ENDIAN
84        unsigned int mantissa0:20;
85        unsigned int exponent:11;
86        unsigned int negative:1;
87        unsigned int mantissa1:32;
88# else
89        /* Together these comprise the mantissa.  */
90        unsigned int mantissa1:32;
91        unsigned int mantissa0:20;
92        unsigned int exponent:11;
93        unsigned int negative:1;
94# endif
95#endif                          /* Little endian.  */
96      } ieee;
97
98    /* This format makes it easier to see if a NaN is a signalling NaN.  */
99    struct
100      {
101#if     __BYTE_ORDER == __BIG_ENDIAN
102        unsigned int negative:1;
103        unsigned int exponent:11;
104        unsigned int quiet_nan:1;
105        /* Together these comprise the mantissa.  */
106        unsigned int mantissa0:19;
107        unsigned int mantissa1:32;
108#else
109# if    __FLOAT_WORD_ORDER == BIG_ENDIAN
110        unsigned int mantissa0:19;
111        unsigned int quiet_nan:1;
112        unsigned int exponent:11;
113        unsigned int negative:1;
114        unsigned int mantissa1:32;
115# else
116        /* Together these comprise the mantissa.  */
117        unsigned int mantissa1:32;
118        unsigned int mantissa0:19;
119        unsigned int quiet_nan:1;
120        unsigned int exponent:11;
121        unsigned int negative:1;
122# endif
123#endif
124      } ieee_nan;
125  };
126
127#define IEEE754_DOUBLE_BIAS     0x3ff /* Added to exponent.  */
128
129
130union ieee854_long_double
131  {
132    long double d;
133
134    /* This is the IEEE 854 double-extended-precision format.  */
135    struct
136      {
137#if     __BYTE_ORDER == __BIG_ENDIAN
138        unsigned int negative:1;
139        unsigned int exponent:15;
140        unsigned int empty:16;
141        unsigned int mantissa0:32;
142        unsigned int mantissa1:32;
143#endif
144#if     __BYTE_ORDER == __LITTLE_ENDIAN
145# if    __FLOAT_WORD_ORDER == BIG_ENDIAN
146        unsigned int exponent:15;
147        unsigned int negative:1;
148        unsigned int empty:16;
149        unsigned int mantissa0:32;
150        unsigned int mantissa1:32;
151# else
152        unsigned int mantissa1:32;
153        unsigned int mantissa0:32;
154        unsigned int exponent:15;
155        unsigned int negative:1;
156        unsigned int empty:16;
157# endif
158#endif
159      } ieee;
160
161    /* This is for NaNs in the IEEE 854 double-extended-precision format.  */
162    struct
163      {
164#if     __BYTE_ORDER == __BIG_ENDIAN
165        unsigned int negative:1;
166        unsigned int exponent:15;
167        unsigned int empty:16;
168        unsigned int one:1;
169        unsigned int quiet_nan:1;
170        unsigned int mantissa0:30;
171        unsigned int mantissa1:32;
172#endif
173#if     __BYTE_ORDER == __LITTLE_ENDIAN
174# if    __FLOAT_WORD_ORDER == BIG_ENDIAN
175        unsigned int exponent:15;
176        unsigned int negative:1;
177        unsigned int empty:16;
178        unsigned int mantissa0:30;
179        unsigned int quiet_nan:1;
180        unsigned int one:1;
181        unsigned int mantissa1:32;
182# else
183        unsigned int mantissa1:32;
184        unsigned int mantissa0:30;
185        unsigned int quiet_nan:1;
186        unsigned int one:1;
187        unsigned int exponent:15;
188        unsigned int negative:1;
189        unsigned int empty:16;
190# endif
191#endif
192      } ieee_nan;
193  };
194
195#define IEEE854_LONG_DOUBLE_BIAS 0x3fff
196
197__END_DECLS
198
199#endif /* ieee754.h */
Note: See TracBrowser for help on using the repository browser.