OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgcc/] [config/] [libbid/] [bid_gcc_intrinsics.h] - Blame information for rev 734

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 734 jeremybenn
/* Copyright (C) 2007, 2009, 2010, 2011  Free Software Foundation, Inc.
2
 
3
This file is part of GCC.
4
 
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
8
version.
9
 
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
13
for more details.
14
 
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.
18
 
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/>.  */
23
 
24
#ifndef _BID_GCC_INTRINSICS_H
25
#define _BID_GCC_INTRINSICS_H
26
 
27
#ifdef IN_LIBGCC2
28
 
29
#include "tconfig.h"
30
#include "coretypes.h"
31
#include "tm.h"
32
#include "libgcc_tm.h"
33
 
34
#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
35
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
36
#endif
37
 
38
#ifndef LIBGCC2_HAS_XF_MODE
39
#define LIBGCC2_HAS_XF_MODE \
40
  (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80)
41
#endif
42
 
43
#ifndef LIBGCC2_HAS_TF_MODE
44
#define LIBGCC2_HAS_TF_MODE \
45
  (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
46
#endif
47
 
48
#ifndef BID_HAS_XF_MODE
49
#define BID_HAS_XF_MODE LIBGCC2_HAS_XF_MODE
50
#endif
51
 
52
#ifndef BID_HAS_TF_MODE
53
#define BID_HAS_TF_MODE LIBGCC2_HAS_TF_MODE
54
#endif
55
 
56
/* Some handy typedefs.  */
57
 
58
typedef float SFtype __attribute__ ((mode (SF)));
59
typedef float DFtype __attribute__ ((mode (DF)));
60
#if LIBGCC2_HAS_XF_MODE
61
typedef float XFtype __attribute__ ((mode (XF)));
62
#endif /* LIBGCC2_HAS_XF_MODE */
63
#if LIBGCC2_HAS_TF_MODE
64
typedef float TFtype __attribute__ ((mode (TF)));
65
#endif /* LIBGCC2_HAS_XF_MODE */
66
 
67
typedef int SItype __attribute__ ((mode (SI)));
68
typedef int DItype __attribute__ ((mode (DI)));
69
typedef unsigned int USItype __attribute__ ((mode (SI)));
70
typedef unsigned int UDItype __attribute__ ((mode (DI)));
71
 
72
/* The type of the result of a decimal float comparison.  This must
73
   match `word_mode' in GCC for the target.  */
74
 
75
typedef int CMPtype __attribute__ ((mode (word)));
76
 
77
typedef int SINT8 __attribute__ ((mode (QI)));
78
typedef unsigned int UINT8 __attribute__ ((mode (QI)));
79
typedef USItype UINT32;
80
typedef SItype SINT32;
81
typedef UDItype UINT64;
82
typedef DItype SINT64;
83
 
84
/* It has to be identical to the one defined in bid_functions.h.  */
85
typedef __attribute__ ((aligned(16))) struct
86
{
87
  UINT64 w[2];
88
} UINT128;
89
#else   /* if not IN_LIBGCC2 */
90
 
91
#ifndef BID_HAS_XF_MODE
92
#define BID_HAS_XF_MODE 1
93
#endif
94
 
95
#ifndef BID_HAS_TF_MODE
96
#if defined __i386__
97
#define BID_HAS_TF_MODE 0
98
#else
99
#define BID_HAS_TF_MODE 1
100
#endif
101
#endif
102
 
103
#ifndef SFtype
104
#define SFtype float
105
#endif
106
 
107
#ifndef DFtype
108
#define DFtype double
109
#endif
110
 
111
#if BID_HAS_XF_MODE
112
#ifndef XFtype
113
#define XFtype long double
114
#endif
115
 
116
#endif   /* IN_LIBGCC2 */
117
 
118
#if BID_HAS_TF_MODE
119
#ifndef TFtype
120
#define TFtype __float128
121
#endif
122
#endif
123
 
124
#ifndef SItype
125
#define SItype SINT32
126
#endif
127
 
128
#ifndef DItype
129
#define DItype SINT64
130
#endif
131
 
132
#ifndef USItype
133
#define USItype UINT32
134
#endif
135
 
136
#ifndef UDItype
137
#define UDItype UINT64
138
#endif
139
 
140
#ifndef CMPtype
141
#define CMPtype long
142
#endif
143
#endif  /* IN_LIBGCC2 */
144
 
145
#if BID_HAS_GCC_DECIMAL_INTRINSICS
146
/* Prototypes for gcc instrinsics  */
147
 
148
extern _Decimal64 __bid_adddd3 (_Decimal64, _Decimal64);
149
extern _Decimal64 __bid_subdd3 (_Decimal64, _Decimal64);
150
extern _Decimal32 __bid_addsd3 (_Decimal32, _Decimal32);
151
extern _Decimal32 __bid_subsd3 (_Decimal32, _Decimal32);
152
extern _Decimal128 __bid_addtd3 (_Decimal128, _Decimal128);
153
extern _Decimal128 __bid_subtd3 (_Decimal128, _Decimal128);
154
extern DFtype __bid_truncdddf (_Decimal64);
155
extern DItype __bid_fixdddi (_Decimal64);
156
extern _Decimal32 __bid_truncddsd2 (_Decimal64);
157
extern SFtype __bid_truncddsf (_Decimal64);
158
extern SItype __bid_fixddsi (_Decimal64);
159
extern _Decimal128 __bid_extendddtd2 (_Decimal64);
160
#if BID_HAS_TF_MODE
161
extern TFtype __bid_extendddtf (_Decimal64);
162
#endif
163
extern UDItype __bid_fixunsdddi (_Decimal64);
164
extern USItype __bid_fixunsddsi (_Decimal64);
165
#if BID_HAS_XF_MODE
166
extern XFtype __bid_extendddxf (_Decimal64);
167
#endif
168
extern _Decimal64 __bid_extenddfdd (DFtype);
169
extern _Decimal32 __bid_truncdfsd (DFtype);
170
extern _Decimal128 __bid_extenddftd (DFtype);
171
extern _Decimal64 __bid_floatdidd (DItype);
172
extern _Decimal32 __bid_floatdisd (DItype);
173
extern _Decimal128 __bid_floatditd (DItype);
174
extern _Decimal64 __bid_divdd3 (_Decimal64, _Decimal64);
175
extern _Decimal32 __bid_divsd3 (_Decimal32, _Decimal32);
176
extern _Decimal128 __bid_divtd3 (_Decimal128, _Decimal128);
177
extern CMPtype __bid_eqdd2 (_Decimal64, _Decimal64);
178
extern CMPtype __bid_eqsd2 (_Decimal32, _Decimal32);
179
extern CMPtype __bid_eqtd2 (_Decimal128, _Decimal128);
180
extern CMPtype __bid_gedd2 (_Decimal64, _Decimal64);
181
extern CMPtype __bid_gesd2 (_Decimal32, _Decimal32);
182
extern CMPtype __bid_getd2 (_Decimal128, _Decimal128);
183
extern CMPtype __bid_gtdd2 (_Decimal64, _Decimal64);
184
extern CMPtype __bid_gtsd2 (_Decimal32, _Decimal32);
185
extern CMPtype __bid_gttd2 (_Decimal128, _Decimal128);
186
extern CMPtype __bid_ledd2 (_Decimal64, _Decimal64);
187
extern CMPtype __bid_lesd2 (_Decimal32, _Decimal32);
188
extern CMPtype __bid_letd2 (_Decimal128, _Decimal128);
189
extern CMPtype __bid_ltdd2 (_Decimal64, _Decimal64);
190
extern CMPtype __bid_ltsd2 (_Decimal32, _Decimal32);
191
extern CMPtype __bid_lttd2 (_Decimal128, _Decimal128);
192
extern CMPtype __bid_nedd2 (_Decimal64, _Decimal64);
193
extern CMPtype __bid_nesd2 (_Decimal32, _Decimal32);
194
extern CMPtype __bid_netd2 (_Decimal128, _Decimal128);
195
extern CMPtype __bid_unorddd2 (_Decimal64, _Decimal64);
196
extern CMPtype __bid_unordsd2 (_Decimal32, _Decimal32);
197
extern CMPtype __bid_unordtd2 (_Decimal128, _Decimal128);
198
extern _Decimal64 __bid_muldd3 (_Decimal64, _Decimal64);
199
extern _Decimal32 __bid_mulsd3 (_Decimal32, _Decimal32);
200
extern _Decimal128 __bid_multd3 (_Decimal128, _Decimal128);
201
extern _Decimal64 __bid_extendsddd2 (_Decimal32);
202
extern DFtype __bid_extendsddf (_Decimal32);
203
extern DItype __bid_fixsddi (_Decimal32);
204
extern SFtype __bid_truncsdsf (_Decimal32);
205
extern SItype __bid_fixsdsi (_Decimal32);
206
extern _Decimal128 __bid_extendsdtd2 (_Decimal32);
207
#if BID_HAS_TF_MODE
208
extern TFtype __bid_extendsdtf (_Decimal32);
209
#endif
210
extern UDItype __bid_fixunssddi (_Decimal32);
211
extern USItype __bid_fixunssdsi (_Decimal32);
212
#if BID_HAS_XF_MODE
213
extern XFtype __bid_extendsdxf (_Decimal32);
214
#endif
215
extern _Decimal64 __bid_extendsfdd (SFtype);
216
extern _Decimal32 __bid_extendsfsd (SFtype);
217
extern _Decimal128 __bid_extendsftd (SFtype);
218
extern _Decimal64 __bid_floatsidd (SItype);
219
extern _Decimal32 __bid_floatsisd (SItype);
220
extern _Decimal128 __bid_floatsitd (SItype);
221
extern _Decimal64 __bid_trunctddd2 (_Decimal128);
222
extern DFtype __bid_trunctddf (_Decimal128);
223
extern DItype __bid_fixtddi (_Decimal128);
224
extern _Decimal32 __bid_trunctdsd2 (_Decimal128);
225
extern SFtype __bid_trunctdsf (_Decimal128);
226
extern SItype __bid_fixtdsi (_Decimal128);
227
#if BID_HAS_TF_MODE
228
extern TFtype __bid_trunctdtf (_Decimal128);
229
#endif
230
extern UDItype __bid_fixunstddi (_Decimal128);
231
extern USItype __bid_fixunstdsi (_Decimal128);
232
#if BID_HAS_XF_MODE
233
extern XFtype __bid_trunctdxf (_Decimal128);
234
#endif
235
#if BID_HAS_TF_MODE
236
extern _Decimal64 __bid_trunctfdd (TFtype);
237
extern _Decimal32 __bid_trunctfsd (TFtype);
238
extern _Decimal128 __bid_extendtftd (TFtype);
239
#endif
240
extern _Decimal64 __bid_floatunsdidd (UDItype);
241
extern _Decimal32 __bid_floatunsdisd (UDItype);
242
extern _Decimal128 __bid_floatunsditd (UDItype);
243
extern _Decimal64 __bid_floatunssidd (USItype);
244
extern _Decimal32 __bid_floatunssisd (USItype);
245
extern _Decimal128 __bid_floatunssitd (USItype);
246
#if BID_HAS_XF_MODE
247
extern _Decimal64 __bid_truncxfdd (XFtype);
248
extern _Decimal32 __bid_truncxfsd (XFtype);
249
extern _Decimal128 __bid_extendxftd (XFtype);
250
#endif
251
extern int isinfd32 (_Decimal32);
252
extern int isinfd64 (_Decimal64);
253
extern int isinfd128 (_Decimal128);
254
#endif  /* BID_HAS_GCC_DECIMAL_INTRINSICS */
255
 
256
extern void __dfp_set_round (int);
257
extern int __dfp_get_round (void);
258
extern void __dfp_clear_except (void);
259
extern int __dfp_test_except (int);
260
extern void __dfp_raise_except (int);
261
 
262
#if BID_HAS_GCC_DECIMAL_INTRINSICS
263
/* Used by gcc intrinsics.  We have to define them after UINT128
264
   is defined.  */
265
union decimal32 {
266
  _Decimal32 d;
267
  UINT32 i;
268
};
269
 
270
union decimal64 {
271
  _Decimal64 d;
272
  UINT64 i;
273
};
274
 
275
union decimal128 {
276
  _Decimal128 d;
277
  UINT128 i;
278
};
279
 
280
#if BID_HAS_TF_MODE
281
union float128 {
282
  TFtype f;
283
  UINT128 i;
284
};
285
#endif
286
#endif  /* BID_HAS_GCC_DECIMAL_INTRINSICS */
287
 
288
#endif /* _BID_GCC_INTRINSICS_H */

powered by: WebSVN 2.1.0

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