Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/fp-bit.h @ 67:f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Mar 2011 17:18:12 +0900 |
parents | a06113de4d67 |
children |
rev | line source |
---|---|
0 | 1 /* Header file for fp-bit.c. */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2 /* Copyright (C) 2000, 2002, 2003, 2006, 2009, 2010 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
3 Free Software Foundation, Inc. |
0 | 4 |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify it under | |
8 the terms of the GNU General Public License as published by the Free | |
9 Software Foundation; either version 3, or (at your option) any later | |
10 version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 Under Section 7 of GPL version 3, you are granted additional | |
18 permissions described in the GCC Runtime Library Exception, version | |
19 3.1, as published by the Free Software Foundation. | |
20 | |
21 You should have received a copy of the GNU General Public License and | |
22 a copy of the GCC Runtime Library Exception along with this program; | |
23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
24 <http://www.gnu.org/licenses/>. */ | |
25 | |
26 #ifndef GCC_FP_BIT_H | |
27 #define GCC_FP_BIT_H | |
28 | |
29 /* Defining FINE_GRAINED_LIBRARIES allows one to select which routines | |
30 from this file are compiled via additional -D options. | |
31 | |
32 This avoids the need to pull in the entire fp emulation library | |
33 when only a small number of functions are needed. | |
34 | |
35 If FINE_GRAINED_LIBRARIES is not defined, then compile every | |
36 suitable routine. */ | |
37 #ifndef FINE_GRAINED_LIBRARIES | |
38 #define L_pack_df | |
39 #define L_unpack_df | |
40 #define L_pack_sf | |
41 #define L_unpack_sf | |
42 #define L_addsub_sf | |
43 #define L_addsub_df | |
44 #define L_mul_sf | |
45 #define L_mul_df | |
46 #define L_div_sf | |
47 #define L_div_df | |
48 #define L_fpcmp_parts_sf | |
49 #define L_fpcmp_parts_df | |
50 #define L_compare_sf | |
51 #define L_compare_df | |
52 #define L_eq_sf | |
53 #define L_eq_df | |
54 #define L_ne_sf | |
55 #define L_ne_df | |
56 #define L_gt_sf | |
57 #define L_gt_df | |
58 #define L_ge_sf | |
59 #define L_ge_df | |
60 #define L_lt_sf | |
61 #define L_lt_df | |
62 #define L_le_sf | |
63 #define L_le_df | |
64 #define L_unord_sf | |
65 #define L_unord_df | |
66 #define L_usi_to_sf | |
67 #define L_usi_to_df | |
68 #define L_si_to_sf | |
69 #define L_si_to_df | |
70 #define L_sf_to_si | |
71 #define L_df_to_si | |
72 #define L_f_to_usi | |
73 #define L_df_to_usi | |
74 #define L_negate_sf | |
75 #define L_negate_df | |
76 #define L_make_sf | |
77 #define L_make_df | |
78 #define L_sf_to_df | |
79 #define L_df_to_sf | |
80 #ifdef FLOAT | |
81 #define L_thenan_sf | |
82 #else | |
83 #define L_thenan_df | |
84 #endif | |
85 #endif /* ! FINE_GRAINED_LIBRARIES */ | |
86 | |
87 #if __LDBL_MANT_DIG__ == 113 || __LDBL_MANT_DIG__ == 106 | |
88 # if defined(TFLOAT) || defined(L_sf_to_tf) || defined(L_df_to_tf) | |
89 # define TMODES | |
90 # endif | |
91 #endif | |
92 | |
93 typedef float SFtype __attribute__ ((mode (SF))); | |
94 typedef float DFtype __attribute__ ((mode (DF))); | |
95 #ifdef TMODES | |
96 typedef float TFtype __attribute__ ((mode (TF))); | |
97 #endif | |
98 | |
99 typedef int HItype __attribute__ ((mode (HI))); | |
100 typedef int SItype __attribute__ ((mode (SI))); | |
101 typedef int DItype __attribute__ ((mode (DI))); | |
102 #ifdef TMODES | |
103 typedef int TItype __attribute__ ((mode (TI))); | |
104 #endif | |
105 | |
106 /* The type of the result of a floating point comparison. This must | |
107 match `__libgcc_cmp_return__' in GCC for the target. */ | |
108 #ifndef CMPtype | |
109 typedef int CMPtype __attribute__ ((mode (__libgcc_cmp_return__))); | |
110 #endif | |
111 | |
112 typedef unsigned int UHItype __attribute__ ((mode (HI))); | |
113 typedef unsigned int USItype __attribute__ ((mode (SI))); | |
114 typedef unsigned int UDItype __attribute__ ((mode (DI))); | |
115 #ifdef TMODES | |
116 typedef unsigned int UTItype __attribute__ ((mode (TI))); | |
117 #endif | |
118 | |
119 #define MAX_USI_INT (~(USItype)0) | |
120 #define MAX_SI_INT ((SItype) (MAX_USI_INT >> 1)) | |
121 #define BITS_PER_SI (4 * BITS_PER_UNIT) | |
122 #ifdef TMODES | |
123 #define MAX_UDI_INT (~(UDItype)0) | |
124 #define MAX_DI_INT ((DItype) (MAX_UDI_INT >> 1)) | |
125 #define BITS_PER_DI (8 * BITS_PER_UNIT) | |
126 #endif | |
127 | |
128 #ifdef FLOAT_ONLY | |
129 #define NO_DI_MODE | |
130 #endif | |
131 | |
132 #ifdef TFLOAT | |
133 # ifndef TMODES | |
134 # error "TFLOAT requires long double to have 113 bits of mantissa" | |
135 # endif | |
136 | |
137 # define PREFIXFPDP tp | |
138 # define PREFIXSFDF tf | |
139 # define NGARDS 10L /* Is this right? */ | |
140 # define GARDROUND 0x1ff | |
141 # define GARDMASK 0x3ff | |
142 # define GARDMSB 0x200 | |
143 # define FRAC_NBITS 128 | |
144 | |
145 # if __LDBL_MANT_DIG__ == 113 /* IEEE quad */ | |
146 # define EXPBITS 15 | |
147 # define EXPBIAS 16383 | |
148 # define EXPMAX (0x7fff) | |
149 # define QUIET_NAN ((TItype)0x8 << 108) | |
150 # define FRACHIGH ((TItype)0x8 << 124) | |
151 # define FRACHIGH2 ((TItype)0xc << 124) | |
152 # define FRACBITS 112 | |
153 # endif | |
154 | |
155 # if __LDBL_MANT_DIG__ == 106 /* IBM extended (double+double) */ | |
156 # define EXPBITS 11 | |
157 # define EXPBIAS 1023 | |
158 # define EXPMAX (0x7ff) | |
159 # define QUIET_NAN ((TItype)0x8 << (48 + 64)) | |
160 # define FRACHIGH ((TItype)0x8 << 124) | |
161 # define FRACHIGH2 ((TItype)0xc << 124) | |
162 # define FRACBITS 105 | |
163 # define HALFFRACBITS 52 | |
164 # define HALFSHIFT 64 | |
165 # endif | |
166 | |
167 # define pack_d __pack_t | |
168 # define unpack_d __unpack_t | |
169 # define __fpcmp_parts __fpcmp_parts_t | |
170 typedef UTItype fractype; | |
171 typedef UDItype halffractype; | |
172 typedef USItype qrtrfractype; | |
173 #define qrtrfractype qrtrfractype | |
174 typedef TFtype FLO_type; | |
175 typedef TItype intfrac; | |
176 #elif defined FLOAT | |
177 # define NGARDS 7L | |
178 # define GARDROUND 0x3f | |
179 # define GARDMASK 0x7f | |
180 # define GARDMSB 0x40 | |
181 # define EXPBITS 8 | |
182 # define EXPBIAS 127 | |
183 # define FRACBITS 23 | |
184 # define EXPMAX (0xff) | |
185 # define QUIET_NAN 0x100000L | |
186 # define FRAC_NBITS 32 | |
187 # define FRACHIGH 0x80000000L | |
188 # define FRACHIGH2 0xc0000000L | |
189 # define pack_d __pack_f | |
190 # define unpack_d __unpack_f | |
191 # define __fpcmp_parts __fpcmp_parts_f | |
192 typedef USItype fractype; | |
193 typedef UHItype halffractype; | |
194 typedef SFtype FLO_type; | |
195 typedef SItype intfrac; | |
196 | |
197 #else | |
198 # define PREFIXFPDP dp | |
199 # define PREFIXSFDF df | |
200 # define NGARDS 8L | |
201 # define GARDROUND 0x7f | |
202 # define GARDMASK 0xff | |
203 # define GARDMSB 0x80 | |
204 # define EXPBITS 11 | |
205 # define EXPBIAS 1023 | |
206 # define FRACBITS 52 | |
207 # define EXPMAX (0x7ff) | |
208 # define QUIET_NAN 0x8000000000000LL | |
209 # define FRAC_NBITS 64 | |
210 # define FRACHIGH 0x8000000000000000LL | |
211 # define FRACHIGH2 0xc000000000000000LL | |
212 # define pack_d __pack_d | |
213 # define unpack_d __unpack_d | |
214 # define __fpcmp_parts __fpcmp_parts_d | |
215 typedef UDItype fractype; | |
216 typedef USItype halffractype; | |
217 typedef DFtype FLO_type; | |
218 typedef DItype intfrac; | |
219 #endif /* FLOAT */ | |
220 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
221 #ifdef TFLOAT |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
222 # define add __addtf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
223 # define sub __subtf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
224 # define multiply __multf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
225 # define divide __divtf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
226 # define compare __cmptf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
227 # define _eq_f2 __eqtf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
228 # define _ne_f2 __netf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
229 # define _gt_f2 __gttf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
230 # define _ge_f2 __getf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
231 # define _lt_f2 __lttf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
232 # define _le_f2 __letf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
233 # define _unord_f2 __unordtf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
234 # define usi_to_float __floatunsitf |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
235 # define si_to_float __floatsitf |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
236 # define float_to_si __fixtfsi |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
237 # define float_to_usi __fixunstfsi |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
238 # define negate __negtf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
239 # define tf_to_sf __trunctfsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
240 # define tf_to_df __trunctfdf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
241 #elif defined FLOAT |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
242 # define add __addsf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
243 # define sub __subsf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
244 # define multiply __mulsf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
245 # define divide __divsf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
246 # define compare __cmpsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
247 # define _eq_f2 __eqsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
248 # define _ne_f2 __nesf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
249 # define _gt_f2 __gtsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
250 # define _ge_f2 __gesf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
251 # define _lt_f2 __ltsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
252 # define _le_f2 __lesf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
253 # define _unord_f2 __unordsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
254 # define usi_to_float __floatunsisf |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
255 # define si_to_float __floatsisf |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
256 # define float_to_si __fixsfsi |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
257 # define float_to_usi __fixunssfsi |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
258 # define negate __negsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
259 # define sf_to_df __extendsfdf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
260 # define sf_to_tf __extendsftf2 |
0 | 261 #else |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
262 # define add __adddf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
263 # define sub __subdf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
264 # define multiply __muldf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
265 # define divide __divdf3 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
266 # define compare __cmpdf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
267 # define _eq_f2 __eqdf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
268 # define _ne_f2 __nedf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
269 # define _gt_f2 __gtdf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
270 # define _ge_f2 __gedf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
271 # define _lt_f2 __ltdf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
272 # define _le_f2 __ledf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
273 # define _unord_f2 __unorddf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
274 # define usi_to_float __floatunsidf |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
275 # define si_to_float __floatsidf |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
276 # define float_to_si __fixdfsi |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
277 # define float_to_usi __fixunsdfsi |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
278 # define negate __negdf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
279 # define df_to_sf __truncdfsf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
280 # define df_to_tf __extenddftf2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
281 #endif /* FLOAT */ |
0 | 282 |
283 #ifndef INLINE | |
284 #define INLINE __inline__ | |
285 #endif | |
286 | |
287 /* Preserve the sticky-bit when shifting fractions to the right. */ | |
288 #define LSHIFT(a, s) { a = (a >> s) | !!(a & (((fractype) 1 << s) - 1)); } | |
289 | |
290 /* numeric parameters */ | |
291 /* F_D_BITOFF is the number of bits offset between the MSB of the mantissa | |
292 of a float and of a double. Assumes there are only two float types. | |
293 (double::FRAC_BITS+double::NGARDS-(float::FRAC_BITS-float::NGARDS)) | |
294 */ | |
295 #define F_D_BITOFF (52+8-(23+7)) | |
296 | |
297 #ifdef TMODES | |
298 # define F_T_BITOFF (__LDBL_MANT_DIG__-1+10-(23+7)) | |
299 # define D_T_BITOFF (__LDBL_MANT_DIG__-1+10-(52+8)) | |
300 #endif | |
301 | |
302 | |
303 #define NORMAL_EXPMIN (-(EXPBIAS)+1) | |
304 #define IMPLICIT_1 ((fractype)1<<(FRACBITS+NGARDS)) | |
305 #define IMPLICIT_2 ((fractype)1<<(FRACBITS+1+NGARDS)) | |
306 | |
307 /* common types */ | |
308 | |
309 typedef enum | |
310 { | |
311 CLASS_SNAN, | |
312 CLASS_QNAN, | |
313 CLASS_ZERO, | |
314 CLASS_NUMBER, | |
315 CLASS_INFINITY | |
316 } fp_class_type; | |
317 | |
318 typedef struct | |
319 { | |
320 #ifdef SMALL_MACHINE | |
321 char class; | |
322 unsigned char sign; | |
323 short normal_exp; | |
324 #else | |
325 fp_class_type class; | |
326 unsigned int sign; | |
327 int normal_exp; | |
328 #endif | |
329 | |
330 union | |
331 { | |
332 fractype ll; | |
333 halffractype l[2]; | |
334 } fraction; | |
335 } fp_number_type; | |
336 | |
337 typedef union | |
338 { | |
339 FLO_type value; | |
340 fractype value_raw; | |
341 | |
342 #ifndef FLOAT | |
343 # ifdef qrtrfractype | |
344 qrtrfractype qwords[4]; | |
345 # else | |
346 halffractype words[2]; | |
347 # endif | |
348 #endif | |
349 | |
350 #ifdef FLOAT_BIT_ORDER_MISMATCH | |
351 struct | |
352 { | |
353 fractype fraction:FRACBITS __attribute__ ((packed)); | |
354 unsigned int exp:EXPBITS __attribute__ ((packed)); | |
355 unsigned int sign:1 __attribute__ ((packed)); | |
356 } | |
357 bits; | |
358 #endif | |
359 | |
360 #ifdef _DEBUG_BITFLOAT | |
361 struct | |
362 { | |
363 unsigned int sign:1 __attribute__ ((packed)); | |
364 unsigned int exp:EXPBITS __attribute__ ((packed)); | |
365 fractype fraction:FRACBITS __attribute__ ((packed)); | |
366 } | |
367 bits_big_endian; | |
368 | |
369 struct | |
370 { | |
371 fractype fraction:FRACBITS __attribute__ ((packed)); | |
372 unsigned int exp:EXPBITS __attribute__ ((packed)); | |
373 unsigned int sign:1 __attribute__ ((packed)); | |
374 } | |
375 bits_little_endian; | |
376 #endif | |
377 } | |
378 FLO_union_type; | |
379 | |
380 /* Prototypes. */ | |
381 | |
382 #if defined(L_pack_df) || defined(L_pack_sf) || defined(L_pack_tf) | |
383 extern FLO_type pack_d (const fp_number_type *); | |
384 #endif | |
385 | |
386 extern void unpack_d (FLO_union_type *, fp_number_type *); | |
387 | |
388 #if defined(L_addsub_sf) || defined(L_addsub_df) || defined(L_addsub_tf) | |
389 extern FLO_type add (FLO_type, FLO_type); | |
390 extern FLO_type sub (FLO_type, FLO_type); | |
391 #endif | |
392 | |
393 #if defined(L_mul_sf) || defined(L_mul_df) || defined(L_mul_tf) | |
394 extern FLO_type multiply (FLO_type, FLO_type); | |
395 #endif | |
396 | |
397 #if defined(L_div_sf) || defined(L_div_df) || defined(L_div_tf) | |
398 extern FLO_type divide (FLO_type, FLO_type); | |
399 #endif | |
400 | |
401 extern int __fpcmp_parts (fp_number_type *, fp_number_type *); | |
402 | |
403 #if defined(L_compare_sf) || defined(L_compare_df) || defined(L_compare_tf) | |
404 extern CMPtype compare (FLO_type, FLO_type); | |
405 #endif | |
406 | |
407 #if defined(L_eq_sf) || defined(L_eq_df) || defined(L_eq_tf) | |
408 extern CMPtype _eq_f2 (FLO_type, FLO_type); | |
409 #endif | |
410 | |
411 #if defined(L_ne_sf) || defined(L_ne_df) || defined(L_ne_tf) | |
412 extern CMPtype _ne_f2 (FLO_type, FLO_type); | |
413 #endif | |
414 | |
415 #if defined(L_gt_sf) || defined(L_gt_df) || defined(L_gt_tf) | |
416 extern CMPtype _gt_f2 (FLO_type, FLO_type); | |
417 #endif | |
418 | |
419 #if defined(L_ge_sf) || defined(L_ge_df) || defined(L_ge_tf) | |
420 extern CMPtype _ge_f2 (FLO_type, FLO_type); | |
421 #endif | |
422 | |
423 #if defined(L_lt_sf) || defined(L_lt_df) || defined(L_lt_tf) | |
424 extern CMPtype _lt_f2 (FLO_type, FLO_type); | |
425 #endif | |
426 | |
427 #if defined(L_le_sf) || defined(L_le_df) || defined(L_le_tf) | |
428 extern CMPtype _le_f2 (FLO_type, FLO_type); | |
429 #endif | |
430 | |
431 #if defined(L_unord_sf) || defined(L_unord_df) || defined(L_unord_tf) | |
432 extern CMPtype _unord_f2 (FLO_type, FLO_type); | |
433 #endif | |
434 | |
435 #if defined(L_si_to_sf) || defined(L_si_to_df) || defined(L_si_to_tf) | |
436 extern FLO_type si_to_float (SItype); | |
437 #endif | |
438 | |
439 #if defined(L_sf_to_si) || defined(L_df_to_si) || defined(L_tf_to_si) | |
440 extern SItype float_to_si (FLO_type); | |
441 #endif | |
442 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
443 #if defined(L_tf_to_usi) |
0 | 444 extern USItype float_to_usi (FLO_type); |
445 #endif | |
446 | |
447 #if defined(L_usi_to_sf) || defined(L_usi_to_df) || defined(L_usi_to_tf) | |
448 extern FLO_type usi_to_float (USItype); | |
449 #endif | |
450 | |
451 #if defined(L_negate_sf) || defined(L_negate_df) || defined(L_negate_tf) | |
452 extern FLO_type negate (FLO_type); | |
453 #endif | |
454 | |
455 #ifdef FLOAT | |
456 #if defined(L_make_sf) | |
457 extern SFtype __make_fp (fp_class_type, unsigned int, int, USItype); | |
458 #endif | |
459 #ifndef FLOAT_ONLY | |
460 extern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); | |
461 #if defined(L_sf_to_df) | |
462 extern DFtype sf_to_df (SFtype); | |
463 #endif | |
464 #if defined(L_sf_to_tf) && defined(TMODES) | |
465 extern TFtype sf_to_tf (SFtype); | |
466 #endif | |
467 #endif /* ! FLOAT_ONLY */ | |
468 #endif /* FLOAT */ | |
469 | |
470 #ifndef FLOAT | |
471 extern SFtype __make_fp (fp_class_type, unsigned int, int, USItype); | |
472 #if defined(L_make_df) | |
473 extern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); | |
474 #endif | |
475 #if defined(L_df_to_sf) | |
476 extern SFtype df_to_sf (DFtype); | |
477 #endif | |
478 #if defined(L_df_to_tf) && defined(TMODES) | |
479 extern TFtype df_to_tf (DFtype); | |
480 #endif | |
481 #endif /* ! FLOAT */ | |
482 | |
483 #ifdef TMODES | |
484 extern DFtype __make_dp (fp_class_type, unsigned int, int, UDItype); | |
485 extern TFtype __make_tp (fp_class_type, unsigned int, int, UTItype); | |
486 #ifdef TFLOAT | |
487 #if defined(L_tf_to_sf) | |
488 extern SFtype tf_to_sf (TFtype); | |
489 #endif | |
490 #if defined(L_tf_to_df) | |
491 extern DFtype tf_to_df (TFtype); | |
492 #endif | |
493 #if defined(L_di_to_tf) | |
494 extern TFtype di_to_df (DItype); | |
495 #endif | |
496 #endif /* TFLOAT */ | |
497 #endif /* TMODES */ | |
498 | |
499 #endif /* ! GCC_FP_BIT_H */ |