1 /* Copyright (C) 2007-2017 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"
32 #include "libgcc_tm.h"
34 #ifdef __LIBGCC_HAS_XF_MODE__
35 #define LIBGCC2_HAS_XF_MODE 1
37 #define LIBGCC2_HAS_XF_MODE 0
40 #ifdef __LIBGCC_HAS_TF_MODE__
41 #define LIBGCC2_HAS_TF_MODE 1
43 #define LIBGCC2_HAS_TF_MODE 0
46 #ifndef BID_HAS_XF_MODE
47 #define BID_HAS_XF_MODE LIBGCC2_HAS_XF_MODE
50 #ifndef BID_HAS_TF_MODE
51 #define BID_HAS_TF_MODE LIBGCC2_HAS_TF_MODE
54 /* Some handy typedefs. */
56 typedef float SFtype
__attribute__ ((mode (SF
)));
57 typedef float DFtype
__attribute__ ((mode (DF
)));
58 #if LIBGCC2_HAS_XF_MODE
59 typedef float XFtype
__attribute__ ((mode (XF
)));
60 #endif /* LIBGCC2_HAS_XF_MODE */
61 #if LIBGCC2_HAS_TF_MODE
62 typedef float TFtype
__attribute__ ((mode (TF
)));
63 #endif /* LIBGCC2_HAS_XF_MODE */
65 typedef int SItype
__attribute__ ((mode (SI
)));
66 typedef int DItype
__attribute__ ((mode (DI
)));
67 typedef unsigned int USItype
__attribute__ ((mode (SI
)));
68 typedef unsigned int UDItype
__attribute__ ((mode (DI
)));
70 /* The type of the result of a decimal float comparison. This must
71 match `word_mode' in GCC for the target. */
73 typedef int CMPtype
__attribute__ ((mode (word
)));
75 typedef int SINT8
__attribute__ ((mode (QI
)));
76 typedef unsigned int UINT8
__attribute__ ((mode (QI
)));
77 typedef USItype UINT32
;
78 typedef SItype SINT32
;
79 typedef UDItype UINT64
;
80 typedef DItype SINT64
;
82 /* It has to be identical to the one defined in bid_functions.h. */
83 typedef __attribute__ ((aligned(16))) struct
87 #else /* if not IN_LIBGCC2 */
89 #ifndef BID_HAS_XF_MODE
90 #define BID_HAS_XF_MODE 1
93 #ifndef BID_HAS_TF_MODE
95 #define BID_HAS_TF_MODE 0
97 #define BID_HAS_TF_MODE 1
106 #define DFtype double
111 #define XFtype long double
114 #endif /* IN_LIBGCC2 */
118 #define TFtype __float128
123 #define SItype SINT32
127 #define DItype SINT64
131 #define USItype UINT32
135 #define UDItype UINT64
141 #endif /* IN_LIBGCC2 */
143 #if BID_HAS_GCC_DECIMAL_INTRINSICS
144 /* Prototypes for gcc instrinsics */
146 extern _Decimal64
__bid_adddd3 (_Decimal64
, _Decimal64
);
147 extern _Decimal64
__bid_subdd3 (_Decimal64
, _Decimal64
);
148 extern _Decimal32
__bid_addsd3 (_Decimal32
, _Decimal32
);
149 extern _Decimal32
__bid_subsd3 (_Decimal32
, _Decimal32
);
150 extern _Decimal128
__bid_addtd3 (_Decimal128
, _Decimal128
);
151 extern _Decimal128
__bid_subtd3 (_Decimal128
, _Decimal128
);
152 extern DFtype
__bid_truncdddf (_Decimal64
);
153 extern DItype
__bid_fixdddi (_Decimal64
);
154 extern _Decimal32
__bid_truncddsd2 (_Decimal64
);
155 extern SFtype
__bid_truncddsf (_Decimal64
);
156 extern SItype
__bid_fixddsi (_Decimal64
);
157 extern _Decimal128
__bid_extendddtd2 (_Decimal64
);
159 extern TFtype
__bid_extendddtf (_Decimal64
);
161 extern UDItype
__bid_fixunsdddi (_Decimal64
);
162 extern USItype
__bid_fixunsddsi (_Decimal64
);
164 extern XFtype
__bid_extendddxf (_Decimal64
);
166 extern _Decimal64
__bid_extenddfdd (DFtype
);
167 extern _Decimal32
__bid_truncdfsd (DFtype
);
168 extern _Decimal128
__bid_extenddftd (DFtype
);
169 extern _Decimal64
__bid_floatdidd (DItype
);
170 extern _Decimal32
__bid_floatdisd (DItype
);
171 extern _Decimal128
__bid_floatditd (DItype
);
172 extern _Decimal64
__bid_divdd3 (_Decimal64
, _Decimal64
);
173 extern _Decimal32
__bid_divsd3 (_Decimal32
, _Decimal32
);
174 extern _Decimal128
__bid_divtd3 (_Decimal128
, _Decimal128
);
175 extern CMPtype
__bid_eqdd2 (_Decimal64
, _Decimal64
);
176 extern CMPtype
__bid_eqsd2 (_Decimal32
, _Decimal32
);
177 extern CMPtype
__bid_eqtd2 (_Decimal128
, _Decimal128
);
178 extern CMPtype
__bid_gedd2 (_Decimal64
, _Decimal64
);
179 extern CMPtype
__bid_gesd2 (_Decimal32
, _Decimal32
);
180 extern CMPtype
__bid_getd2 (_Decimal128
, _Decimal128
);
181 extern CMPtype
__bid_gtdd2 (_Decimal64
, _Decimal64
);
182 extern CMPtype
__bid_gtsd2 (_Decimal32
, _Decimal32
);
183 extern CMPtype
__bid_gttd2 (_Decimal128
, _Decimal128
);
184 extern CMPtype
__bid_ledd2 (_Decimal64
, _Decimal64
);
185 extern CMPtype
__bid_lesd2 (_Decimal32
, _Decimal32
);
186 extern CMPtype
__bid_letd2 (_Decimal128
, _Decimal128
);
187 extern CMPtype
__bid_ltdd2 (_Decimal64
, _Decimal64
);
188 extern CMPtype
__bid_ltsd2 (_Decimal32
, _Decimal32
);
189 extern CMPtype
__bid_lttd2 (_Decimal128
, _Decimal128
);
190 extern CMPtype
__bid_nedd2 (_Decimal64
, _Decimal64
);
191 extern CMPtype
__bid_nesd2 (_Decimal32
, _Decimal32
);
192 extern CMPtype
__bid_netd2 (_Decimal128
, _Decimal128
);
193 extern CMPtype
__bid_unorddd2 (_Decimal64
, _Decimal64
);
194 extern CMPtype
__bid_unordsd2 (_Decimal32
, _Decimal32
);
195 extern CMPtype
__bid_unordtd2 (_Decimal128
, _Decimal128
);
196 extern _Decimal64
__bid_muldd3 (_Decimal64
, _Decimal64
);
197 extern _Decimal32
__bid_mulsd3 (_Decimal32
, _Decimal32
);
198 extern _Decimal128
__bid_multd3 (_Decimal128
, _Decimal128
);
199 extern _Decimal64
__bid_extendsddd2 (_Decimal32
);
200 extern DFtype
__bid_extendsddf (_Decimal32
);
201 extern DItype
__bid_fixsddi (_Decimal32
);
202 extern SFtype
__bid_truncsdsf (_Decimal32
);
203 extern SItype
__bid_fixsdsi (_Decimal32
);
204 extern _Decimal128
__bid_extendsdtd2 (_Decimal32
);
206 extern TFtype
__bid_extendsdtf (_Decimal32
);
208 extern UDItype
__bid_fixunssddi (_Decimal32
);
209 extern USItype
__bid_fixunssdsi (_Decimal32
);
211 extern XFtype
__bid_extendsdxf (_Decimal32
);
213 extern _Decimal64
__bid_extendsfdd (SFtype
);
214 extern _Decimal32
__bid_extendsfsd (SFtype
);
215 extern _Decimal128
__bid_extendsftd (SFtype
);
216 extern _Decimal64
__bid_floatsidd (SItype
);
217 extern _Decimal32
__bid_floatsisd (SItype
);
218 extern _Decimal128
__bid_floatsitd (SItype
);
219 extern _Decimal64
__bid_trunctddd2 (_Decimal128
);
220 extern DFtype
__bid_trunctddf (_Decimal128
);
221 extern DItype
__bid_fixtddi (_Decimal128
);
222 extern _Decimal32
__bid_trunctdsd2 (_Decimal128
);
223 extern SFtype
__bid_trunctdsf (_Decimal128
);
224 extern SItype
__bid_fixtdsi (_Decimal128
);
226 extern TFtype
__bid_trunctdtf (_Decimal128
);
228 extern UDItype
__bid_fixunstddi (_Decimal128
);
229 extern USItype
__bid_fixunstdsi (_Decimal128
);
231 extern XFtype
__bid_trunctdxf (_Decimal128
);
234 extern _Decimal64
__bid_trunctfdd (TFtype
);
235 extern _Decimal32
__bid_trunctfsd (TFtype
);
236 extern _Decimal128
__bid_extendtftd (TFtype
);
238 extern _Decimal64
__bid_floatunsdidd (UDItype
);
239 extern _Decimal32
__bid_floatunsdisd (UDItype
);
240 extern _Decimal128
__bid_floatunsditd (UDItype
);
241 extern _Decimal64
__bid_floatunssidd (USItype
);
242 extern _Decimal32
__bid_floatunssisd (USItype
);
243 extern _Decimal128
__bid_floatunssitd (USItype
);
245 extern _Decimal64
__bid_truncxfdd (XFtype
);
246 extern _Decimal32
__bid_truncxfsd (XFtype
);
247 extern _Decimal128
__bid_extendxftd (XFtype
);
249 extern int isinfd32 (_Decimal32
);
250 extern int isinfd64 (_Decimal64
);
251 extern int isinfd128 (_Decimal128
);
252 #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
254 extern void __dfp_set_round (int);
255 extern int __dfp_get_round (void);
256 extern void __dfp_clear_except (void);
257 extern int __dfp_test_except (int);
258 extern void __dfp_raise_except (int);
260 #if BID_HAS_GCC_DECIMAL_INTRINSICS
261 /* Used by gcc intrinsics. We have to define them after UINT128
284 #endif /* BID_HAS_GCC_DECIMAL_INTRINSICS */
286 #endif /* _BID_GCC_INTRINSICS_H */