1 /* Copyright (C) 2007, 2009 Free Software Foundation, Inc.
3 This file is part of GCC.
5 GCC is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 3, or (at your option) any later
10 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 Under Section 7 of GPL version 3, you are granted additional
16 permissions described in the GCC Runtime Library Exception, version
17 3.1, as published by the Free Software Foundation.
19 You should have received a copy of the GNU General Public License and
20 a copy of the GCC Runtime Library Exception along with this program;
21 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22 <http://www.gnu.org/licenses/>. */
24 #ifndef _BID_GCC_INTRINSICS_H
25 #define _BID_GCC_INTRINSICS_H
30 #include "coretypes.h"
33 #ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
34 #define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN \
35 (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__)
38 #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
39 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
42 #ifndef LIBGCC2_HAS_XF_MODE
43 #define LIBGCC2_HAS_XF_MODE \
44 (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80)
47 #ifndef LIBGCC2_HAS_TF_MODE
48 #define LIBGCC2_HAS_TF_MODE \
49 (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
52 #ifndef BID_HAS_XF_MODE
53 #define BID_HAS_XF_MODE LIBGCC2_HAS_XF_MODE
56 #ifndef BID_HAS_TF_MODE
57 #define BID_HAS_TF_MODE LIBGCC2_HAS_TF_MODE
60 /* Some handy typedefs. */
62 typedef float SFtype
__attribute__ ((mode (SF
)));
63 typedef float DFtype
__attribute__ ((mode (DF
)));
64 #if LIBGCC2_HAS_XF_MODE
65 typedef float XFtype
__attribute__ ((mode (XF
)));
66 #endif /* LIBGCC2_HAS_XF_MODE */
67 #if LIBGCC2_HAS_TF_MODE
68 typedef float TFtype
__attribute__ ((mode (TF
)));
69 #endif /* LIBGCC2_HAS_XF_MODE */
71 typedef int SItype
__attribute__ ((mode (SI
)));
72 typedef int DItype
__attribute__ ((mode (DI
)));
73 typedef unsigned int USItype
__attribute__ ((mode (SI
)));
74 typedef unsigned int UDItype
__attribute__ ((mode (DI
)));
76 /* The type of the result of a decimal float comparison. This must
77 match `word_mode' in GCC for the target. */
79 typedef int CMPtype
__attribute__ ((mode (word
)));
81 typedef int SINT8
__attribute__ ((mode (QI
)));
82 typedef unsigned int UINT8
__attribute__ ((mode (QI
)));
83 typedef USItype UINT32
;
84 typedef SItype SINT32
;
85 typedef UDItype UINT64
;
86 typedef DItype SINT64
;
88 /* It has to be identical to the one defined in bid_functions.h. */
89 typedef __attribute__ ((aligned(16))) struct
93 #else /* if not IN_LIBGCC2 */
95 #ifndef BID_HAS_XF_MODE
96 #define BID_HAS_XF_MODE 1
99 #ifndef BID_HAS_TF_MODE
101 #define BID_HAS_TF_MODE 0
103 #define BID_HAS_TF_MODE 1
112 #define DFtype double
117 #define XFtype long double
120 #endif /* IN_LIBGCC2 */
124 #define TFtype __float128
129 #define SItype SINT32
133 #define DItype SINT64
137 #define USItype UINT32
141 #define UDItype UINT64
147 #endif /* IN_LIBGCC2 */
149 #if BID_HAS_GCC_DECIMAL_INTRINSICS
150 /* Prototypes for gcc instrinsics */
152 extern _Decimal64
__bid_adddd3 (_Decimal64
, _Decimal64
);
153 extern _Decimal64
__bid_subdd3 (_Decimal64
, _Decimal64
);
154 extern _Decimal32
__bid_addsd3 (_Decimal32
, _Decimal32
);
155 extern _Decimal32
__bid_subsd3 (_Decimal32
, _Decimal32
);
156 extern _Decimal128
__bid_addtd3 (_Decimal128
, _Decimal128
);
157 extern _Decimal128
__bid_subtd3 (_Decimal128
, _Decimal128
);
158 extern DFtype
__bid_truncdddf (_Decimal64
);
159 extern DItype
__bid_fixdddi (_Decimal64
);
160 extern _Decimal32
__bid_truncddsd2 (_Decimal64
);
161 extern SFtype
__bid_truncddsf (_Decimal64
);
162 extern SItype
__bid_fixddsi (_Decimal64
);
163 extern _Decimal128
__bid_extendddtd2 (_Decimal64
);
165 extern TFtype
__bid_extendddtf (_Decimal64
);
167 extern UDItype
__bid_fixunsdddi (_Decimal64
);
168 extern USItype
__bid_fixunsddsi (_Decimal64
);
170 extern XFtype
__bid_extendddxf (_Decimal64
);
172 extern _Decimal64
__bid_extenddfdd (DFtype
);
173 extern _Decimal32
__bid_truncdfsd (DFtype
);
174 extern _Decimal128
__bid_extenddftd (DFtype
);
175 extern _Decimal64
__bid_floatdidd (DItype
);
176 extern _Decimal32
__bid_floatdisd (DItype
);
177 extern _Decimal128
__bid_floatditd (DItype
);
178 extern _Decimal64
__bid_divdd3 (_Decimal64
, _Decimal64
);
179 extern _Decimal32
__bid_divsd3 (_Decimal32
, _Decimal32
);
180 extern _Decimal128
__bid_divtd3 (_Decimal128
, _Decimal128
);
181 extern CMPtype
__bid_eqdd2 (_Decimal64
, _Decimal64
);
182 extern CMPtype
__bid_eqsd2 (_Decimal32
, _Decimal32
);
183 extern CMPtype
__bid_eqtd2 (_Decimal128
, _Decimal128
);
184 extern CMPtype
__bid_gedd2 (_Decimal64
, _Decimal64
);
185 extern CMPtype
__bid_gesd2 (_Decimal32
, _Decimal32
);
186 extern CMPtype
__bid_getd2 (_Decimal128
, _Decimal128
);
187 extern CMPtype
__bid_gtdd2 (_Decimal64
, _Decimal64
);
188 extern CMPtype
__bid_gtsd2 (_Decimal32
, _Decimal32
);
189 extern CMPtype
__bid_gttd2 (_Decimal128
, _Decimal128
);
190 extern CMPtype
__bid_ledd2 (_Decimal64
, _Decimal64
);
191 extern CMPtype
__bid_lesd2 (_Decimal32
, _Decimal32
);
192 extern CMPtype
__bid_letd2 (_Decimal128
, _Decimal128
);
193 extern CMPtype
__bid_ltdd2 (_Decimal64
, _Decimal64
);
194 extern CMPtype
__bid_ltsd2 (_Decimal32
, _Decimal32
);
195 extern CMPtype
__bid_lttd2 (_Decimal128
, _Decimal128
);
196 extern CMPtype
__bid_nedd2 (_Decimal64
, _Decimal64
);
197 extern CMPtype
__bid_nesd2 (_Decimal32
, _Decimal32
);
198 extern CMPtype
__bid_netd2 (_Decimal128
, _Decimal128
);
199 extern CMPtype
__bid_unorddd2 (_Decimal64
, _Decimal64
);
200 extern CMPtype
__bid_unordsd2 (_Decimal32
, _Decimal32
);
201 extern CMPtype
__bid_unordtd2 (_Decimal128
, _Decimal128
);
202 extern _Decimal64
__bid_muldd3 (_Decimal64
, _Decimal64
);
203 extern _Decimal32
__bid_mulsd3 (_Decimal32
, _Decimal32
);
204 extern _Decimal128
__bid_multd3 (_Decimal128
, _Decimal128
);
205 extern _Decimal64
__bid_extendsddd2 (_Decimal32
);
206 extern DFtype
__bid_extendsddf (_Decimal32
);
207 extern DItype
__bid_fixsddi (_Decimal32
);
208 extern SFtype
__bid_truncsdsf (_Decimal32
);
209 extern SItype
__bid_fixsdsi (_Decimal32
);
210 extern _Decimal128
__bid_extendsdtd2 (_Decimal32
);
212 extern TFtype
__bid_extendsdtf (_Decimal32
);
214 extern UDItype
__bid_fixunssddi (_Decimal32
);
215 extern USItype
__bid_fixunssdsi (_Decimal32
);
217 extern XFtype
__bid_extendsdxf (_Decimal32
);
219 extern _Decimal64
__bid_extendsfdd (SFtype
);
220 extern _Decimal32
__bid_extendsfsd (SFtype
);
221 extern _Decimal128
__bid_extendsftd (SFtype
);
222 extern _Decimal64
__bid_floatsidd (SItype
);
223 extern _Decimal32
__bid_floatsisd (SItype
);
224 extern _Decimal128
__bid_floatsitd (SItype
);
225 extern _Decimal64
__bid_trunctddd2 (_Decimal128
);
226 extern DFtype
__bid_trunctddf (_Decimal128
);
227 extern DItype
__bid_fixtddi (_Decimal128
);
228 extern _Decimal32
__bid_trunctdsd2 (_Decimal128
);
229 extern SFtype
__bid_trunctdsf (_Decimal128
);
230 extern SItype
__bid_fixtdsi (_Decimal128
);
232 extern TFtype
__bid_trunctdtf (_Decimal128
);
234 extern UDItype
__bid_fixunstddi (_Decimal128
);
235 extern USItype
__bid_fixunstdsi (_Decimal128
);
237 extern XFtype
__bid_trunctdxf (_Decimal128
);
240 extern _Decimal64
__bid_trunctfdd (TFtype
);
241 extern _Decimal32
__bid_trunctfsd (TFtype
);
242 extern _Decimal128
__bid_extendtftd (TFtype
);
244 extern _Decimal64
__bid_floatunsdidd (UDItype
);
245 extern _Decimal32
__bid_floatunsdisd (UDItype
);
246 extern _Decimal128
__bid_floatunsditd (UDItype
);
247 extern _Decimal64
__bid_floatunssidd (USItype
);
248 extern _Decimal32
__bid_floatunssisd (USItype
);
249 extern _Decimal128
__bid_floatunssitd (USItype
);
251 extern _Decimal64
__bid_truncxfdd (XFtype
);
252 extern _Decimal32
__bid_truncxfsd (XFtype
);
253 extern _Decimal128
__bid_extendxftd (XFtype
);
255 extern int isinfd32 (_Decimal32
);
256 extern int isinfd64 (_Decimal64
);
257 extern int isinfd128 (_Decimal128
);
258 #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
260 extern void __dfp_set_round (int);
261 extern int __dfp_get_round (void);
262 extern void __dfp_clear_except (void);
263 extern int __dfp_test_except (int);
264 extern void __dfp_raise_except (int);
266 #if BID_HAS_GCC_DECIMAL_INTRINSICS
267 /* Used by gcc intrinsics. We have to define them after UINT128
290 #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
292 #endif /* _BID_GCC_INTRINSICS_H */