1 /* Semantics ops support for CGEN-based simulators.
2 Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
3 Contributed by Cygnus Solutions.
5 This file is part of the GNU Simulators.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 #ifndef CGEN_SEM_OPS_H
24 #define CGEN_SEM_OPS_H
26 #if defined (__GNUC__) && ! defined (SEMOPS_DEFINE_INLINE)
27 #define SEMOPS_DEFINE_INLINE
28 #define SEMOPS_INLINE extern inline
33 /* Semantic operations.
34 At one point this file was machine generated. Maybe it will be again. */
36 /* These don't really have a mode. */
37 #define ANDIF(x, y) ((x) && (y))
38 #define ORIF(x, y) ((x) || (y))
40 #define ANDBI(x, y) ((x) & (y))
41 #define ORBI(x, y) ((x) | (y))
42 #define XORBI(x, y) ((x) ^ (y))
43 #define NEGBI(x) (- (x))
44 #define NOTBI(x) (! (BI) (x))
45 #define INVBI(x) (~ (x))
46 #define EQBI(x, y) ((BI) (x) == (BI) (y))
47 #define NEBI(x, y) ((BI) (x) != (BI) (y))
48 #define LTBI(x, y) ((BI) (x) < (BI) (y))
49 #define LEBI(x, y) ((BI) (x) <= (BI) (y))
50 #define GTBI(x, y) ((BI) (x) > (BI) (y))
51 #define GEBI(x, y) ((BI) (x) >= (BI) (y))
52 #define LTUBI(x, y) ((BI) (x) < (BI) (y))
53 #define LEUBI(x, y) ((BI) (x) <= (BI) (y))
54 #define GTUBI(x, y) ((BI) (x) > (BI) (y))
55 #define GEUBI(x, y) ((BI) (x) >= (BI) (y))
57 #define ADDQI(x, y) ((x) + (y))
58 #define SUBQI(x, y) ((x) - (y))
59 #define MULQI(x, y) ((x) * (y))
60 #define DIVQI(x, y) ((QI) (x) / (QI) (y))
61 #define UDIVQI(x, y) ((UQI) (x) / (UQI) (y))
62 #define MODQI(x, y) ((QI) (x) % (QI) (y))
63 #define UMODQI(x, y) ((UQI) (x) % (UQI) (y))
64 #define SRAQI(x, y) ((QI) (x) >> (y))
65 #define SRLQI(x, y) ((UQI) (x) >> (y))
66 #define SLLQI(x, y) ((UQI) (x) << (y))
67 extern QI RORQI
PARAMS ((QI
, int));
68 extern QI ROLQI
PARAMS ((QI
, int));
69 #define ANDQI(x, y) ((x) & (y))
70 #define ORQI(x, y) ((x) | (y))
71 #define XORQI(x, y) ((x) ^ (y))
72 #define NEGQI(x) (- (x))
73 #define NOTQI(x) (! (QI) (x))
74 #define INVQI(x) (~ (x))
75 #define EQQI(x, y) ((QI) (x) == (QI) (y))
76 #define NEQI(x, y) ((QI) (x) != (QI) (y))
77 #define LTQI(x, y) ((QI) (x) < (QI) (y))
78 #define LEQI(x, y) ((QI) (x) <= (QI) (y))
79 #define GTQI(x, y) ((QI) (x) > (QI) (y))
80 #define GEQI(x, y) ((QI) (x) >= (QI) (y))
81 #define LTUQI(x, y) ((UQI) (x) < (UQI) (y))
82 #define LEUQI(x, y) ((UQI) (x) <= (UQI) (y))
83 #define GTUQI(x, y) ((UQI) (x) > (UQI) (y))
84 #define GEUQI(x, y) ((UQI) (x) >= (UQI) (y))
86 #define ADDHI(x, y) ((x) + (y))
87 #define SUBHI(x, y) ((x) - (y))
88 #define MULHI(x, y) ((x) * (y))
89 #define DIVHI(x, y) ((HI) (x) / (HI) (y))
90 #define UDIVHI(x, y) ((UHI) (x) / (UHI) (y))
91 #define MODHI(x, y) ((HI) (x) % (HI) (y))
92 #define UMODHI(x, y) ((UHI) (x) % (UHI) (y))
93 #define SRAHI(x, y) ((HI) (x) >> (y))
94 #define SRLHI(x, y) ((UHI) (x) >> (y))
95 #define SLLHI(x, y) ((UHI) (x) << (y))
96 extern HI RORHI
PARAMS ((HI
, int));
97 extern HI ROLHI
PARAMS ((HI
, int));
98 #define ANDHI(x, y) ((x) & (y))
99 #define ORHI(x, y) ((x) | (y))
100 #define XORHI(x, y) ((x) ^ (y))
101 #define NEGHI(x) (- (x))
102 #define NOTHI(x) (! (HI) (x))
103 #define INVHI(x) (~ (x))
104 #define EQHI(x, y) ((HI) (x) == (HI) (y))
105 #define NEHI(x, y) ((HI) (x) != (HI) (y))
106 #define LTHI(x, y) ((HI) (x) < (HI) (y))
107 #define LEHI(x, y) ((HI) (x) <= (HI) (y))
108 #define GTHI(x, y) ((HI) (x) > (HI) (y))
109 #define GEHI(x, y) ((HI) (x) >= (HI) (y))
110 #define LTUHI(x, y) ((UHI) (x) < (UHI) (y))
111 #define LEUHI(x, y) ((UHI) (x) <= (UHI) (y))
112 #define GTUHI(x, y) ((UHI) (x) > (UHI) (y))
113 #define GEUHI(x, y) ((UHI) (x) >= (UHI) (y))
115 #define ADDSI(x, y) ((x) + (y))
116 #define SUBSI(x, y) ((x) - (y))
117 #define MULSI(x, y) ((x) * (y))
118 #define DIVSI(x, y) ((SI) (x) / (SI) (y))
119 #define UDIVSI(x, y) ((USI) (x) / (USI) (y))
120 #define MODSI(x, y) ((SI) (x) % (SI) (y))
121 #define UMODSI(x, y) ((USI) (x) % (USI) (y))
122 #define SRASI(x, y) ((SI) (x) >> (y))
123 #define SRLSI(x, y) ((USI) (x) >> (y))
124 #define SLLSI(x, y) ((USI) (x) << (y))
125 extern SI RORSI
PARAMS ((SI
, int));
126 extern SI ROLSI
PARAMS ((SI
, int));
127 #define ANDSI(x, y) ((x) & (y))
128 #define ORSI(x, y) ((x) | (y))
129 #define XORSI(x, y) ((x) ^ (y))
130 #define NEGSI(x) (- (x))
131 #define NOTSI(x) (! (SI) (x))
132 #define INVSI(x) (~ (x))
133 #define EQSI(x, y) ((SI) (x) == (SI) (y))
134 #define NESI(x, y) ((SI) (x) != (SI) (y))
135 #define LTSI(x, y) ((SI) (x) < (SI) (y))
136 #define LESI(x, y) ((SI) (x) <= (SI) (y))
137 #define GTSI(x, y) ((SI) (x) > (SI) (y))
138 #define GESI(x, y) ((SI) (x) >= (SI) (y))
139 #define LTUSI(x, y) ((USI) (x) < (USI) (y))
140 #define LEUSI(x, y) ((USI) (x) <= (USI) (y))
141 #define GTUSI(x, y) ((USI) (x) > (USI) (y))
142 #define GEUSI(x, y) ((USI) (x) >= (USI) (y))
145 extern DI ADDDI
PARAMS ((DI
, DI
));
146 extern DI SUBDI
PARAMS ((DI
, DI
));
147 extern DI MULDI
PARAMS ((DI
, DI
));
148 extern DI DIVDI
PARAMS ((DI
, DI
));
149 extern DI UDIVDI
PARAMS ((DI
, DI
));
150 extern DI MODDI
PARAMS ((DI
, DI
));
151 extern DI UMODDI
PARAMS ((DI
, DI
));
152 extern DI SRADI
PARAMS ((DI
, int));
153 extern UDI SRLDI
PARAMS ((UDI
, int));
154 extern UDI SLLDI
PARAMS ((UDI
, int));
155 extern DI RORDI
PARAMS ((DI
, int));
156 extern DI ROLDI
PARAMS ((DI
, int));
157 extern DI ANDDI
PARAMS ((DI
, DI
));
158 extern DI ORDI
PARAMS ((DI
, DI
));
159 extern DI XORDI
PARAMS ((DI
, DI
));
160 extern DI NEGDI
PARAMS ((DI
));
161 extern int NOTDI
PARAMS ((DI
));
162 extern DI INVDI
PARAMS ((DI
));
163 extern int EQDI
PARAMS ((DI
, DI
));
164 extern int NEDI
PARAMS ((DI
, DI
));
165 extern int LTDI
PARAMS ((DI
, DI
));
166 extern int LEDI
PARAMS ((DI
, DI
));
167 extern int GTDI
PARAMS ((DI
, DI
));
168 extern int GEDI
PARAMS ((DI
, DI
));
169 extern int LTUDI
PARAMS ((UDI
, UDI
));
170 extern int LEUDI
PARAMS ((UDI
, UDI
));
171 extern int GTUDI
PARAMS ((UDI
, UDI
));
172 extern int GEUDI
PARAMS ((UDI
, UDI
));
173 #else /* ! DI_FN_SUPPORT */
174 #define ADDDI(x, y) ((x) + (y))
175 #define SUBDI(x, y) ((x) - (y))
176 #define MULDI(x, y) ((x) * (y))
177 #define DIVDI(x, y) ((DI) (x) / (DI) (y))
178 #define UDIVDI(x, y) ((UDI) (x) / (UDI) (y))
179 #define MODDI(x, y) ((DI) (x) % (DI) (y))
180 #define UMODDI(x, y) ((UDI) (x) % (UDI) (y))
181 #define SRADI(x, y) ((DI) (x) >> (y))
182 #define SRLDI(x, y) ((UDI) (x) >> (y))
183 #define SLLDI(x, y) ((UDI) (x) << (y))
184 extern DI RORDI
PARAMS ((DI
, int));
185 extern DI ROLDI
PARAMS ((DI
, int));
186 #define ANDDI(x, y) ((x) & (y))
187 #define ORDI(x, y) ((x) | (y))
188 #define XORDI(x, y) ((x) ^ (y))
189 #define NEGDI(x) (- (x))
190 #define NOTDI(x) (! (DI) (x))
191 #define INVDI(x) (~ (x))
192 #define EQDI(x, y) ((DI) (x) == (DI) (y))
193 #define NEDI(x, y) ((DI) (x) != (DI) (y))
194 #define LTDI(x, y) ((DI) (x) < (DI) (y))
195 #define LEDI(x, y) ((DI) (x) <= (DI) (y))
196 #define GTDI(x, y) ((DI) (x) > (DI) (y))
197 #define GEDI(x, y) ((DI) (x) >= (DI) (y))
198 #define LTUDI(x, y) ((UDI) (x) < (UDI) (y))
199 #define LEUDI(x, y) ((UDI) (x) <= (UDI) (y))
200 #define GTUDI(x, y) ((UDI) (x) > (UDI) (y))
201 #define GEUDI(x, y) ((UDI) (x) >= (UDI) (y))
202 #endif /* DI_FN_SUPPORT */
205 extern SF ADDSF
PARAMS ((SF
, SF
));
206 extern SF SUBSF
PARAMS ((SF
, SF
));
207 extern SF NEGSF
PARAMS ((SF
));
208 extern SF MULSF
PARAMS ((SF
, SF
));
209 extern SF DIVSF
PARAMS ((SF
, SF
));
210 extern int EQSF
PARAMS ((SF
, SF
));
211 extern int NESF
PARAMS ((SF
, SF
));
212 extern int LTSF
PARAMS ((SF
, SF
));
213 extern int LESF
PARAMS ((SF
, SF
));
214 extern int GTSF
PARAMS ((SF
, SF
));
215 extern int GESF
PARAMS ((SF
, SF
));
216 extern SF ABSSF
PARAMS ((SF
));
217 extern SF SQRTSF
PARAMS ((SF
));
218 extern SF COSSF
PARAMS ((SF
));
219 extern SF SINSF
PARAMS ((SF
));
220 #else /* ! SF_FN_SUPPORT */
221 #define ADDSF(x, y) ((x) + (y))
222 #define SUBSF(x, y) ((x) - (y))
223 #define NEGSF(x) (- (x))
224 #define MULSF(x, y) ((x) * (y))
225 #define DIVSF(x, y) ((x) / (y))
226 #define EQSF(x, y) ((SF) (x) == (SF) (y))
227 #define NESF(x, y) ((SF) (x) != (SF) (y))
228 #define LTSF(x, y) ((SF) (x) < (SF) (y))
229 #define LESF(x, y) ((SF) (x) <= (SF) (y))
230 #define GTSF(x, y) ((SF) (x) > (SF) (y))
231 #define GESF(x, y) ((SF) (x) >= (SF) (y))
232 extern SF ABSSF
PARAMS ((SF
));
233 extern SF SQRTSF
PARAMS ((SF
));
234 extern SF COSSF
PARAMS ((SF
));
235 extern SF SINSF
PARAMS ((SF
));
236 #endif /* SF_FN_SUPPORT */
239 extern DF ADDDF
PARAMS ((DF
, DF
));
240 extern DF SUBDF
PARAMS ((DF
, DF
));
241 extern DF NEGDF
PARAMS ((DF
));
242 extern DF MULDF
PARAMS ((DF
, DF
));
243 extern DF DIVDF
PARAMS ((DF
, DF
));
244 extern int EQDF
PARAMS ((DF
, DF
));
245 extern int NEDF
PARAMS ((DF
, DF
));
246 extern int LTDF
PARAMS ((DF
, DF
));
247 extern int LEDF
PARAMS ((DF
, DF
));
248 extern int GTDF
PARAMS ((DF
, DF
));
249 extern int GEDF
PARAMS ((DF
, DF
));
250 extern DF ABSDF
PARAMS ((DF
));
251 extern DF SQRTDF
PARAMS ((DF
));
252 extern DF COSDF
PARAMS ((DF
));
253 extern DF SINDF
PARAMS ((DF
));
254 #else /* ! DF_FN_SUPPORT */
255 #define ADDDF(x, y) ((x) + (y))
256 #define SUBDF(x, y) ((x) - (y))
257 #define NEGDF(x) (- (x))
258 #define MULDF(x, y) ((x) * (y))
259 #define DIVDF(x, y) ((x) / (y))
260 #define EQDF(x, y) ((DF) (x) == (DF) (y))
261 #define NEDF(x, y) ((DF) (x) != (DF) (y))
262 #define LTDF(x, y) ((DF) (x) < (DF) (y))
263 #define LEDF(x, y) ((DF) (x) <= (DF) (y))
264 #define GTDF(x, y) ((DF) (x) > (DF) (y))
265 #define GEDF(x, y) ((DF) (x) >= (DF) (y))
266 extern DF ABSDF
PARAMS ((DF
));
267 extern DF SQRTDF
PARAMS ((DF
));
268 extern DF COSDF
PARAMS ((DF
));
269 extern DF SINDF
PARAMS ((DF
));
270 #endif /* DF_FN_SUPPORT */
273 extern XF ADDXF
PARAMS ((XF
, XF
));
274 extern XF SUBXF
PARAMS ((XF
, XF
));
275 extern XF NEGXF
PARAMS ((XF
));
276 extern XF MULXF
PARAMS ((XF
, XF
));
277 extern XF DIVXF
PARAMS ((XF
, XF
));
278 extern int EQXF
PARAMS ((XF
, XF
));
279 extern int NEXF
PARAMS ((XF
, XF
));
280 extern int LTXF
PARAMS ((XF
, XF
));
281 extern int LEXF
PARAMS ((XF
, XF
));
282 extern int GTXF
PARAMS ((XF
, XF
));
283 extern int GEXF
PARAMS ((XF
, XF
));
284 extern XF ABSXF
PARAMS ((XF
));
285 extern XF SQRTXF
PARAMS ((XF
));
286 extern XF COSXF
PARAMS ((XF
));
287 extern XF SINXF
PARAMS ((XF
));
288 #else /* ! XF_FN_SUPPORT */
289 #define ADDXF(x, y) ((x) + (y))
290 #define SUBXF(x, y) ((x) - (y))
291 #define NEGXF(x) (- (x))
292 #define MULXF(x, y) ((x) * (y))
293 #define DIVXF(x, y) ((x) / (y))
294 #define EQXF(x, y) ((XF) (x) == (XF) (y))
295 #define NEXF(x, y) ((XF) (x) != (XF) (y))
296 #define LTXF(x, y) ((XF) (x) < (XF) (y))
297 #define LEXF(x, y) ((XF) (x) <= (XF) (y))
298 #define GTXF(x, y) ((XF) (x) > (XF) (y))
299 #define GEXF(x, y) ((XF) (x) >= (XF) (y))
300 extern XF ABSXF
PARAMS ((XF
));
301 extern XF SQRTXF
PARAMS ((XF
));
302 extern XF COSXF
PARAMS ((XF
));
303 extern XF SINXF
PARAMS ((XF
));
304 #endif /* XF_FN_SUPPORT */
307 extern TF ADDTF
PARAMS ((TF
, TF
));
308 extern TF SUBTF
PARAMS ((TF
, TF
));
309 extern TF NEGTF
PARAMS ((TF
));
310 extern TF MULTF
PARAMS ((TF
, TF
));
311 extern TF DIVTF
PARAMS ((TF
, TF
));
312 extern int EQTF
PARAMS ((TF
, TF
));
313 extern int NETF
PARAMS ((TF
, TF
));
314 extern int LTTF
PARAMS ((TF
, TF
));
315 extern int LETF
PARAMS ((TF
, TF
));
316 extern int GTTF
PARAMS ((TF
, TF
));
317 extern int GETF
PARAMS ((TF
, TF
));
318 extern TF ABSTF
PARAMS ((TF
));
319 extern TF SQRTTF
PARAMS ((TF
));
320 extern TF COSTF
PARAMS ((TF
));
321 extern TF SINTF
PARAMS ((TF
));
322 #else /* ! TF_FN_SUPPORT */
323 #define ADDTF(x, y) ((x) + (y))
324 #define SUBTF(x, y) ((x) - (y))
325 #define NEGTF(x) (- (x))
326 #define MULTF(x, y) ((x) * (y))
327 #define DIVTF(x, y) ((x) / (y))
328 #define EQTF(x, y) ((TF) (x) == (TF) (y))
329 #define NETF(x, y) ((TF) (x) != (TF) (y))
330 #define LTTF(x, y) ((TF) (x) < (TF) (y))
331 #define LETF(x, y) ((TF) (x) <= (TF) (y))
332 #define GTTF(x, y) ((TF) (x) > (TF) (y))
333 #define GETF(x, y) ((TF) (x) >= (TF) (y))
334 extern TF ABSTF
PARAMS ((TF
));
335 extern TF SQRTTF
PARAMS ((TF
));
336 extern TF COSTF
PARAMS ((TF
));
337 extern TF SINTF
PARAMS ((TF
));
338 #endif /* TF_FN_SUPPORT */
341 #define EXTBIQI(x) ((QI) (BI) (x))
342 #define EXTBIHI(x) ((HI) (BI) (x))
343 #define EXTBISI(x) ((SI) (BI) (x))
344 #if defined (DI_FN_SUPPORT)
345 extern DI EXTBIDI
PARAMS ((BI
));
347 #define EXTBIDI(x) ((DI) (BI) (x))
349 #define EXTQIHI(x) ((HI) (QI) (x))
350 #define EXTQISI(x) ((SI) (QI) (x))
351 #if defined (DI_FN_SUPPORT)
352 extern DI EXTQIDI
PARAMS ((QI
));
354 #define EXTQIDI(x) ((DI) (QI) (x))
356 #define EXTHISI(x) ((SI) (HI) (x))
357 #if defined (DI_FN_SUPPORT)
358 extern DI EXTHIDI
PARAMS ((HI
));
360 #define EXTHIDI(x) ((DI) (HI) (x))
362 #if defined (DI_FN_SUPPORT)
363 extern DI EXTSIDI
PARAMS ((SI
));
365 #define EXTSIDI(x) ((DI) (SI) (x))
368 #if defined (SF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
369 extern DF EXTSFDF
PARAMS ((SF
));
371 #define EXTSFDF(x) ((DF) (SF) (x))
373 #if defined (SF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
374 extern XF EXTSFXF
PARAMS ((SF
));
376 #define EXTSFXF(x) ((XF) (SF) (x))
378 #if defined (SF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
379 extern TF EXTSFTF
PARAMS ((SF
));
381 #define EXTSFTF(x) ((TF) (SF) (x))
383 #if defined (DF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
384 extern XF EXTDFXF
PARAMS ((DF
));
386 #define EXTDFXF(x) ((XF) (DF) (x))
388 #if defined (DF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
389 extern TF EXTDFTF
PARAMS ((DF
));
391 #define EXTDFTF(x) ((TF) (DF) (x))
393 #if defined (XF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
394 extern TF EXTXFTF
PARAMS ((XF
));
396 #define EXTXFTF(x) ((TF) (XF) (x))
399 #define ZEXTBIQI(x) ((QI) (BI) (x))
400 #define ZEXTBIHI(x) ((HI) (BI) (x))
401 #define ZEXTBISI(x) ((SI) (BI) (x))
402 #if defined (DI_FN_SUPPORT)
403 extern DI ZEXTBIDI
PARAMS ((BI
));
405 #define ZEXTBIDI(x) ((DI) (BI) (x))
407 #define ZEXTQIHI(x) ((HI) (UQI) (x))
408 #define ZEXTQISI(x) ((SI) (UQI) (x))
409 #if defined (DI_FN_SUPPORT)
410 extern DI ZEXTQIDI
PARAMS ((QI
));
412 #define ZEXTQIDI(x) ((DI) (UQI) (x))
414 #define ZEXTHISI(x) ((SI) (UHI) (x))
415 #if defined (DI_FN_SUPPORT)
416 extern DI ZEXTHIDI
PARAMS ((HI
));
418 #define ZEXTHIDI(x) ((DI) (UHI) (x))
420 #if defined (DI_FN_SUPPORT)
421 extern DI ZEXTSIDI
PARAMS ((SI
));
423 #define ZEXTSIDI(x) ((DI) (USI) (x))
426 #define TRUNCQIBI(x) ((BI) (QI) (x))
427 #define TRUNCHIBI(x) ((BI) (HI) (x))
428 #define TRUNCHIQI(x) ((QI) (HI) (x))
429 #define TRUNCSIBI(x) ((BI) (SI) (x))
430 #define TRUNCSIQI(x) ((QI) (SI) (x))
431 #define TRUNCSIHI(x) ((HI) (SI) (x))
432 #if defined (DI_FN_SUPPORT)
433 extern BI TRUNCDIBI
PARAMS ((DI
));
435 #define TRUNCDIBI(x) ((BI) (DI) (x))
437 #if defined (DI_FN_SUPPORT)
438 extern QI TRUNCDIQI
PARAMS ((DI
));
440 #define TRUNCDIQI(x) ((QI) (DI) (x))
442 #if defined (DI_FN_SUPPORT)
443 extern HI TRUNCDIHI
PARAMS ((DI
));
445 #define TRUNCDIHI(x) ((HI) (DI) (x))
447 #if defined (DI_FN_SUPPORT)
448 extern SI TRUNCDISI
PARAMS ((DI
));
450 #define TRUNCDISI(x) ((SI) (DI) (x))
453 #if defined (DF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
454 extern SF TRUNCDFSF
PARAMS ((DF
));
456 #define TRUNCDFSF(x) ((SF) (DF) (x))
458 #if defined (XF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
459 extern SF TRUNCXFSF
PARAMS ((XF
));
461 #define TRUNCXFSF(x) ((SF) (XF) (x))
463 #if defined (XF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
464 extern DF TRUNCXFDF
PARAMS ((XF
));
466 #define TRUNCXFDF(x) ((DF) (XF) (x))
468 #if defined (TF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
469 extern SF TRUNCTFSF
PARAMS ((TF
));
471 #define TRUNCTFSF(x) ((SF) (TF) (x))
473 #if defined (TF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
474 extern DF TRUNCTFDF
PARAMS ((TF
));
476 #define TRUNCTFDF(x) ((DF) (TF) (x))
478 #if defined (TF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
479 extern XF TRUNCTFXF
PARAMS ((TF
));
481 #define TRUNCTFXF(x) ((XF) (TF) (x))
484 #if defined (SF_FN_SUPPORT)
485 extern SF FLOATQISF
PARAMS ((QI
));
487 #define FLOATQISF(x) ((SF) (QI) (x))
489 #if defined (DF_FN_SUPPORT)
490 extern DF FLOATQIDF
PARAMS ((QI
));
492 #define FLOATQIDF(x) ((DF) (QI) (x))
494 #if defined (XF_FN_SUPPORT)
495 extern XF FLOATQIXF
PARAMS ((QI
));
497 #define FLOATQIXF(x) ((XF) (QI) (x))
499 #if defined (TF_FN_SUPPORT)
500 extern TF FLOATQITF
PARAMS ((QI
));
502 #define FLOATQITF(x) ((TF) (QI) (x))
504 #if defined (SF_FN_SUPPORT)
505 extern SF FLOATHISF
PARAMS ((HI
));
507 #define FLOATHISF(x) ((SF) (HI) (x))
509 #if defined (DF_FN_SUPPORT)
510 extern DF FLOATHIDF
PARAMS ((HI
));
512 #define FLOATHIDF(x) ((DF) (HI) (x))
514 #if defined (XF_FN_SUPPORT)
515 extern XF FLOATHIXF
PARAMS ((HI
));
517 #define FLOATHIXF(x) ((XF) (HI) (x))
519 #if defined (TF_FN_SUPPORT)
520 extern TF FLOATHITF
PARAMS ((HI
));
522 #define FLOATHITF(x) ((TF) (HI) (x))
524 #if defined (SF_FN_SUPPORT)
525 extern SF FLOATSISF
PARAMS ((SI
));
527 #define FLOATSISF(x) ((SF) (SI) (x))
529 #if defined (DF_FN_SUPPORT)
530 extern DF FLOATSIDF
PARAMS ((SI
));
532 #define FLOATSIDF(x) ((DF) (SI) (x))
534 #if defined (XF_FN_SUPPORT)
535 extern XF FLOATSIXF
PARAMS ((SI
));
537 #define FLOATSIXF(x) ((XF) (SI) (x))
539 #if defined (TF_FN_SUPPORT)
540 extern TF FLOATSITF
PARAMS ((SI
));
542 #define FLOATSITF(x) ((TF) (SI) (x))
544 #if defined (DI_FN_SUPPORT) || defined (SF_FN_SUPPORT)
545 extern SF FLOATDISF
PARAMS ((DI
));
547 #define FLOATDISF(x) ((SF) (DI) (x))
549 #if defined (DI_FN_SUPPORT) || defined (DF_FN_SUPPORT)
550 extern DF FLOATDIDF
PARAMS ((DI
));
552 #define FLOATDIDF(x) ((DF) (DI) (x))
554 #if defined (DI_FN_SUPPORT) || defined (XF_FN_SUPPORT)
555 extern XF FLOATDIXF
PARAMS ((DI
));
557 #define FLOATDIXF(x) ((XF) (DI) (x))
559 #if defined (DI_FN_SUPPORT) || defined (TF_FN_SUPPORT)
560 extern TF FLOATDITF
PARAMS ((DI
));
562 #define FLOATDITF(x) ((TF) (DI) (x))
565 #if defined (SF_FN_SUPPORT)
566 extern SF UFLOATQISF
PARAMS ((QI
));
568 #define UFLOATQISF(x) ((SF) (UQI) (x))
570 #if defined (DF_FN_SUPPORT)
571 extern DF UFLOATQIDF
PARAMS ((QI
));
573 #define UFLOATQIDF(x) ((DF) (UQI) (x))
575 #if defined (XF_FN_SUPPORT)
576 extern XF UFLOATQIXF
PARAMS ((QI
));
578 #define UFLOATQIXF(x) ((XF) (UQI) (x))
580 #if defined (TF_FN_SUPPORT)
581 extern TF UFLOATQITF
PARAMS ((QI
));
583 #define UFLOATQITF(x) ((TF) (UQI) (x))
585 #if defined (SF_FN_SUPPORT)
586 extern SF UFLOATHISF
PARAMS ((HI
));
588 #define UFLOATHISF(x) ((SF) (UHI) (x))
590 #if defined (DF_FN_SUPPORT)
591 extern DF UFLOATHIDF
PARAMS ((HI
));
593 #define UFLOATHIDF(x) ((DF) (UHI) (x))
595 #if defined (XF_FN_SUPPORT)
596 extern XF UFLOATHIXF
PARAMS ((HI
));
598 #define UFLOATHIXF(x) ((XF) (UHI) (x))
600 #if defined (TF_FN_SUPPORT)
601 extern TF UFLOATHITF
PARAMS ((HI
));
603 #define UFLOATHITF(x) ((TF) (UHI) (x))
605 #if defined (SF_FN_SUPPORT)
606 extern SF UFLOATSISF
PARAMS ((SI
));
608 #define UFLOATSISF(x) ((SF) (USI) (x))
610 #if defined (DF_FN_SUPPORT)
611 extern DF UFLOATSIDF
PARAMS ((SI
));
613 #define UFLOATSIDF(x) ((DF) (USI) (x))
615 #if defined (XF_FN_SUPPORT)
616 extern XF UFLOATSIXF
PARAMS ((SI
));
618 #define UFLOATSIXF(x) ((XF) (USI) (x))
620 #if defined (TF_FN_SUPPORT)
621 extern TF UFLOATSITF
PARAMS ((SI
));
623 #define UFLOATSITF(x) ((TF) (USI) (x))
625 #if defined (DI_FN_SUPPORT) || defined (SF_FN_SUPPORT)
626 extern SF UFLOATDISF
PARAMS ((DI
));
628 #define UFLOATDISF(x) ((SF) (UDI) (x))
630 #if defined (DI_FN_SUPPORT) || defined (DF_FN_SUPPORT)
631 extern DF UFLOATDIDF
PARAMS ((DI
));
633 #define UFLOATDIDF(x) ((DF) (UDI) (x))
635 #if defined (DI_FN_SUPPORT) || defined (XF_FN_SUPPORT)
636 extern XF UFLOATDIXF
PARAMS ((DI
));
638 #define UFLOATDIXF(x) ((XF) (UDI) (x))
640 #if defined (DI_FN_SUPPORT) || defined (TF_FN_SUPPORT)
641 extern TF UFLOATDITF
PARAMS ((DI
));
643 #define UFLOATDITF(x) ((TF) (UDI) (x))
646 #if defined (SF_FN_SUPPORT)
647 extern BI FIXSFBI
PARAMS ((SF
));
649 #define FIXSFBI(x) ((BI) (SF) (x))
651 #if defined (SF_FN_SUPPORT)
652 extern QI FIXSFQI
PARAMS ((SF
));
654 #define FIXSFQI(x) ((QI) (SF) (x))
656 #if defined (SF_FN_SUPPORT)
657 extern HI FIXSFHI
PARAMS ((SF
));
659 #define FIXSFHI(x) ((HI) (SF) (x))
661 #if defined (SF_FN_SUPPORT)
662 extern SI FIXSFSI
PARAMS ((SF
));
664 #define FIXSFSI(x) ((SI) (SF) (x))
666 #if defined (SF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
667 extern DI FIXSFDI
PARAMS ((SF
));
669 #define FIXSFDI(x) ((DI) (SF) (x))
671 #if defined (DF_FN_SUPPORT)
672 extern BI FIXDFBI
PARAMS ((DF
));
674 #define FIXDFBI(x) ((BI) (DF) (x))
676 #if defined (DF_FN_SUPPORT)
677 extern QI FIXDFQI
PARAMS ((DF
));
679 #define FIXDFQI(x) ((QI) (DF) (x))
681 #if defined (DF_FN_SUPPORT)
682 extern HI FIXDFHI
PARAMS ((DF
));
684 #define FIXDFHI(x) ((HI) (DF) (x))
686 #if defined (DF_FN_SUPPORT)
687 extern SI FIXDFSI
PARAMS ((DF
));
689 #define FIXDFSI(x) ((SI) (DF) (x))
691 #if defined (DF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
692 extern DI FIXDFDI
PARAMS ((DF
));
694 #define FIXDFDI(x) ((DI) (DF) (x))
696 #if defined (XF_FN_SUPPORT)
697 extern BI FIXXFBI
PARAMS ((XF
));
699 #define FIXXFBI(x) ((BI) (XF) (x))
701 #if defined (XF_FN_SUPPORT)
702 extern QI FIXXFQI
PARAMS ((XF
));
704 #define FIXXFQI(x) ((QI) (XF) (x))
706 #if defined (XF_FN_SUPPORT)
707 extern HI FIXXFHI
PARAMS ((XF
));
709 #define FIXXFHI(x) ((HI) (XF) (x))
711 #if defined (XF_FN_SUPPORT)
712 extern SI FIXXFSI
PARAMS ((XF
));
714 #define FIXXFSI(x) ((SI) (XF) (x))
716 #if defined (XF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
717 extern DI FIXXFDI
PARAMS ((XF
));
719 #define FIXXFDI(x) ((DI) (XF) (x))
721 #if defined (TF_FN_SUPPORT)
722 extern BI FIXTFBI
PARAMS ((TF
));
724 #define FIXTFBI(x) ((BI) (TF) (x))
726 #if defined (TF_FN_SUPPORT)
727 extern QI FIXTFQI
PARAMS ((TF
));
729 #define FIXTFQI(x) ((QI) (TF) (x))
731 #if defined (TF_FN_SUPPORT)
732 extern HI FIXTFHI
PARAMS ((TF
));
734 #define FIXTFHI(x) ((HI) (TF) (x))
736 #if defined (TF_FN_SUPPORT)
737 extern SI FIXTFSI
PARAMS ((TF
));
739 #define FIXTFSI(x) ((SI) (TF) (x))
741 #if defined (TF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
742 extern DI FIXTFDI
PARAMS ((TF
));
744 #define FIXTFDI(x) ((DI) (TF) (x))
747 #if defined (SF_FN_SUPPORT)
748 extern QI UFIXSFQI
PARAMS ((SF
));
750 #define UFIXSFQI(x) ((UQI) (SF) (x))
752 #if defined (SF_FN_SUPPORT)
753 extern HI UFIXSFHI
PARAMS ((SF
));
755 #define UFIXSFHI(x) ((UHI) (SF) (x))
757 #if defined (SF_FN_SUPPORT)
758 extern SI UFIXSFSI
PARAMS ((SF
));
760 #define UFIXSFSI(x) ((USI) (SF) (x))
762 #if defined (SF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
763 extern DI UFIXSFDI
PARAMS ((SF
));
765 #define UFIXSFDI(x) ((UDI) (SF) (x))
767 #if defined (DF_FN_SUPPORT)
768 extern QI UFIXDFQI
PARAMS ((DF
));
770 #define UFIXDFQI(x) ((UQI) (DF) (x))
772 #if defined (DF_FN_SUPPORT)
773 extern HI UFIXDFHI
PARAMS ((DF
));
775 #define UFIXDFHI(x) ((UHI) (DF) (x))
777 #if defined (DF_FN_SUPPORT)
778 extern SI UFIXDFSI
PARAMS ((DF
));
780 #define UFIXDFSI(x) ((USI) (DF) (x))
782 #if defined (DF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
783 extern DI UFIXDFDI
PARAMS ((DF
));
785 #define UFIXDFDI(x) ((UDI) (DF) (x))
787 #if defined (XF_FN_SUPPORT)
788 extern QI UFIXXFQI
PARAMS ((XF
));
790 #define UFIXXFQI(x) ((UQI) (XF) (x))
792 #if defined (XF_FN_SUPPORT)
793 extern HI UFIXXFHI
PARAMS ((XF
));
795 #define UFIXXFHI(x) ((UHI) (XF) (x))
797 #if defined (XF_FN_SUPPORT)
798 extern SI UFIXXFSI
PARAMS ((XF
));
800 #define UFIXXFSI(x) ((USI) (XF) (x))
802 #if defined (XF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
803 extern DI UFIXXFDI
PARAMS ((XF
));
805 #define UFIXXFDI(x) ((UDI) (XF) (x))
807 #if defined (TF_FN_SUPPORT)
808 extern QI UFIXTFQI
PARAMS ((TF
));
810 #define UFIXTFQI(x) ((UQI) (TF) (x))
812 #if defined (TF_FN_SUPPORT)
813 extern HI UFIXTFHI
PARAMS ((TF
));
815 #define UFIXTFHI(x) ((UHI) (TF) (x))
817 #if defined (TF_FN_SUPPORT)
818 extern SI UFIXTFSI
PARAMS ((TF
));
820 #define UFIXTFSI(x) ((USI) (TF) (x))
822 #if defined (TF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
823 extern DI UFIXTFDI
PARAMS ((TF
));
825 #define UFIXTFDI(x) ((UDI) (TF) (x))
828 /* Composing/decomposing the various types. */
830 #ifdef SEMOPS_DEFINE_INLINE
833 SUBWORDSISF (SIM_CPU
*cpu
, SI in
)
835 union { SI in
; SF out
; } x
;
841 SUBWORDSFSI (SIM_CPU
*cpu
, SF in
)
843 union { SF in
; SI out
; } x
;
849 SUBWORDDISI (SIM_CPU
*cpu
, DI in
, int word
)
851 /* ??? endianness issues undecided */
852 if (CURRENT_TARGET_BYTE_ORDER
== BIG_ENDIAN
)
855 return (UDI
) in
>> 32;
862 return (UDI
) in
>> 32;
869 SUBWORDDFSI (SIM_CPU
*cpu
, DF in
, int word
)
871 /* ??? endianness issues undecided */
872 union { DF in
; SI out
[2]; } x
;
874 if (CURRENT_TARGET_BYTE_ORDER
== BIG_ENDIAN
)
881 SUBWORDTFSI (SIM_CPU
*cpu
, TF in
, int word
)
883 /* ??? endianness issues undecided */
884 union { TF in
; SI out
[4]; } x
;
886 if (CURRENT_TARGET_BYTE_ORDER
== BIG_ENDIAN
)
889 return x
.out
[word
^ 3];
893 JOINSIDI (SIM_CPU
*cpu
, SI x0
, SI x1
)
895 if (CURRENT_TARGET_BYTE_ORDER
== BIG_ENDIAN
)
896 return MAKEDI (x0
, x1
);
898 return MAKEDI (x1
, x0
);
902 JOINSIDF (SIM_CPU
*cpu
, SI x0
, SI x1
)
904 union { SI in
[2]; DF out
; } x
;
905 if (CURRENT_TARGET_BYTE_ORDER
== BIG_ENDIAN
)
906 x
.in
[0] = x0
, x
.in
[1] = x1
;
908 x
.in
[1] = x0
, x
.in
[0] = x1
;
913 JOINSITF (SIM_CPU
*cpu
, SI x0
, SI x1
, SI x2
, SI x3
)
915 union { SI in
[4]; TF out
; } x
;
916 if (CURRENT_TARGET_BYTE_ORDER
== BIG_ENDIAN
)
917 x
.in
[0] = x0
, x
.in
[1] = x1
, x
.in
[2] = x2
, x
.in
[3] = x3
;
919 x
.in
[3] = x0
, x
.in
[2] = x1
, x
.in
[1] = x2
, x
.in
[0] = x3
;
925 SF
SUBWORDSISF (SIM_CPU
*, SI
);
926 SI
SUBWORDSFSI (SIM_CPU
*, SF
);
927 SI
SUBWORDDISI (SIM_CPU
*, DI
, int);
928 SI
SUBWORDDFSI (SIM_CPU
*, DF
, int);
929 SI
SUBWORDTFSI (SIM_CPU
*, TF
, int);
931 DI
JOINSIDI (SIM_CPU
*, SI
, SI
);
932 DF
JOINSIDF (SIM_CPU
*, SI
, SI
);
933 TF
JOINSITF (SIM_CPU
*, SI
, SI
, SI
, SI
);
935 #endif /* SUBWORD,JOIN */
937 /* Semantic support utilities. */
939 #ifdef SEMOPS_DEFINE_INLINE
942 ADDCSI (SI a
, SI b
, BI c
)
944 SI res
= ADDSI (a
, ADDSI (b
, c
));
949 ADDCFSI (SI a
, SI b
, BI c
)
951 SI tmp
= ADDSI (a
, ADDSI (b
, c
));
952 BI res
= ((USI
) tmp
< (USI
) a
) || (c
&& tmp
== a
);
957 ADDOFSI (SI a
, SI b
, BI c
)
959 SI tmp
= ADDSI (a
, ADDSI (b
, c
));
960 BI res
= (((a
< 0) == (b
< 0))
961 && ((a
< 0) != (tmp
< 0)));
966 SUBCSI (SI a
, SI b
, BI c
)
968 SI res
= SUBSI (a
, ADDSI (b
, c
));
973 SUBCFSI (SI a
, SI b
, BI c
)
975 BI res
= ((USI
) a
< (USI
) b
) || (c
&& a
== b
);
980 SUBOFSI (SI a
, SI b
, BI c
)
982 SI tmp
= SUBSI (a
, ADDSI (b
, c
));
983 BI res
= (((a
< 0) != (b
< 0))
984 && ((a
< 0) != (tmp
< 0)));
990 SI
ADDCSI (SI
, SI
, BI
);
991 UBI
ADDCFSI (SI
, SI
, BI
);
992 UBI
ADDOFSI (SI
, SI
, BI
);
993 SI
SUBCSI (SI
, SI
, BI
);
994 UBI
SUBCFSI (SI
, SI
, BI
);
995 UBI
SUBOFSI (SI
, SI
, BI
);
999 #endif /* CGEN_SEM_OPS_H */