Abort if input format is ARM and output format is not
[deliverable/binutils-gdb.git] / sim / common / cgen-ops.h
CommitLineData
c906108c 1/* Semantics ops support for CGEN-based simulators.
7a292a7a 2 Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
c906108c
SS
3 Contributed by Cygnus Solutions.
4
5This file is part of the GNU Simulators.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License along
18with this program; if not, write to the Free Software Foundation, Inc.,
1959 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
21*/
22
23#ifndef CGEN_SEM_OPS_H
24#define CGEN_SEM_OPS_H
25
7a292a7a
SS
26#if defined (__GNUC__) && ! defined (SEMOPS_DEFINE_INLINE)
27#define SEMOPS_DEFINE_INLINE
28#define SEMOPS_INLINE extern inline
29#else
30#define SEMOPS_INLINE
31#endif
32
c906108c
SS
33/* Semantic operations.
34 At one point this file was machine generated. Maybe it will be again. */
35
36/* These don't really have a mode. */
37#define ANDIF(x, y) ((x) && (y))
38#define ORIF(x, y) ((x) || (y))
39
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))
56
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))
67extern QI RORQI PARAMS ((QI, int));
68extern 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))
85
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))
96extern HI RORHI PARAMS ((HI, int));
97extern 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))
114
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))
125extern SI RORSI PARAMS ((SI, int));
126extern 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))
143
144#ifdef DI_FN_SUPPORT
145extern DI ADDDI PARAMS ((DI, DI));
146extern DI SUBDI PARAMS ((DI, DI));
147extern DI MULDI PARAMS ((DI, DI));
148extern DI DIVDI PARAMS ((DI, DI));
149extern DI UDIVDI PARAMS ((DI, DI));
150extern DI MODDI PARAMS ((DI, DI));
151extern DI UMODDI PARAMS ((DI, DI));
152extern DI SRADI PARAMS ((DI, int));
153extern UDI SRLDI PARAMS ((UDI, int));
154extern UDI SLLDI PARAMS ((UDI, int));
155extern DI RORDI PARAMS ((DI, int));
156extern DI ROLDI PARAMS ((DI, int));
157extern DI ANDDI PARAMS ((DI, DI));
158extern DI ORDI PARAMS ((DI, DI));
159extern DI XORDI PARAMS ((DI, DI));
160extern DI NEGDI PARAMS ((DI));
161extern int NOTDI PARAMS ((DI));
162extern DI INVDI PARAMS ((DI));
163extern int EQDI PARAMS ((DI, DI));
164extern int NEDI PARAMS ((DI, DI));
165extern int LTDI PARAMS ((DI, DI));
166extern int LEDI PARAMS ((DI, DI));
167extern int GTDI PARAMS ((DI, DI));
168extern int GEDI PARAMS ((DI, DI));
169extern int LTUDI PARAMS ((UDI, UDI));
170extern int LEUDI PARAMS ((UDI, UDI));
171extern int GTUDI PARAMS ((UDI, UDI));
172extern 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))
184extern DI RORDI PARAMS ((DI, int));
185extern 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 */
203
204#ifdef SF_FN_SUPPORT
205extern SF ADDSF PARAMS ((SF, SF));
206extern SF SUBSF PARAMS ((SF, SF));
207extern SF NEGSF PARAMS ((SF));
208extern SF MULSF PARAMS ((SF, SF));
209extern SF DIVSF PARAMS ((SF, SF));
210extern int EQSF PARAMS ((SF, SF));
211extern int NESF PARAMS ((SF, SF));
212extern int LTSF PARAMS ((SF, SF));
213extern int LESF PARAMS ((SF, SF));
214extern int GTSF PARAMS ((SF, SF));
215extern int GESF PARAMS ((SF, SF));
216extern SF ABSSF PARAMS ((SF));
217extern SF SQRTSF PARAMS ((SF));
218extern SF COSSF PARAMS ((SF));
219extern 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))
232extern SF ABSSF PARAMS ((SF));
233extern SF SQRTSF PARAMS ((SF));
234extern SF COSSF PARAMS ((SF));
235extern SF SINSF PARAMS ((SF));
236#endif /* SF_FN_SUPPORT */
237
238#ifdef DF_FN_SUPPORT
239extern DF ADDDF PARAMS ((DF, DF));
240extern DF SUBDF PARAMS ((DF, DF));
241extern DF NEGDF PARAMS ((DF));
242extern DF MULDF PARAMS ((DF, DF));
243extern DF DIVDF PARAMS ((DF, DF));
244extern int EQDF PARAMS ((DF, DF));
245extern int NEDF PARAMS ((DF, DF));
246extern int LTDF PARAMS ((DF, DF));
247extern int LEDF PARAMS ((DF, DF));
248extern int GTDF PARAMS ((DF, DF));
249extern int GEDF PARAMS ((DF, DF));
250extern DF ABSDF PARAMS ((DF));
251extern DF SQRTDF PARAMS ((DF));
252extern DF COSDF PARAMS ((DF));
253extern 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))
266extern DF ABSDF PARAMS ((DF));
267extern DF SQRTDF PARAMS ((DF));
268extern DF COSDF PARAMS ((DF));
269extern DF SINDF PARAMS ((DF));
270#endif /* DF_FN_SUPPORT */
271
272#ifdef XF_FN_SUPPORT
273extern XF ADDXF PARAMS ((XF, XF));
274extern XF SUBXF PARAMS ((XF, XF));
275extern XF NEGXF PARAMS ((XF));
276extern XF MULXF PARAMS ((XF, XF));
277extern XF DIVXF PARAMS ((XF, XF));
278extern int EQXF PARAMS ((XF, XF));
279extern int NEXF PARAMS ((XF, XF));
280extern int LTXF PARAMS ((XF, XF));
281extern int LEXF PARAMS ((XF, XF));
282extern int GTXF PARAMS ((XF, XF));
283extern int GEXF PARAMS ((XF, XF));
284extern XF ABSXF PARAMS ((XF));
285extern XF SQRTXF PARAMS ((XF));
286extern XF COSXF PARAMS ((XF));
287extern 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))
300extern XF ABSXF PARAMS ((XF));
301extern XF SQRTXF PARAMS ((XF));
302extern XF COSXF PARAMS ((XF));
303extern XF SINXF PARAMS ((XF));
304#endif /* XF_FN_SUPPORT */
305
306#ifdef TF_FN_SUPPORT
307extern TF ADDTF PARAMS ((TF, TF));
308extern TF SUBTF PARAMS ((TF, TF));
309extern TF NEGTF PARAMS ((TF));
310extern TF MULTF PARAMS ((TF, TF));
311extern TF DIVTF PARAMS ((TF, TF));
312extern int EQTF PARAMS ((TF, TF));
313extern int NETF PARAMS ((TF, TF));
314extern int LTTF PARAMS ((TF, TF));
315extern int LETF PARAMS ((TF, TF));
316extern int GTTF PARAMS ((TF, TF));
317extern int GETF PARAMS ((TF, TF));
318extern TF ABSTF PARAMS ((TF));
319extern TF SQRTTF PARAMS ((TF));
320extern TF COSTF PARAMS ((TF));
321extern 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))
334extern TF ABSTF PARAMS ((TF));
335extern TF SQRTTF PARAMS ((TF));
336extern TF COSTF PARAMS ((TF));
337extern TF SINTF PARAMS ((TF));
338#endif /* TF_FN_SUPPORT */
339
340
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)
345extern DI EXTBIDI PARAMS ((BI));
346#else
347#define EXTBIDI(x) ((DI) (BI) (x))
348#endif
349#define EXTQIHI(x) ((HI) (QI) (x))
350#define EXTQISI(x) ((SI) (QI) (x))
351#if defined (DI_FN_SUPPORT)
352extern DI EXTQIDI PARAMS ((QI));
353#else
354#define EXTQIDI(x) ((DI) (QI) (x))
355#endif
356#define EXTHISI(x) ((SI) (HI) (x))
357#if defined (DI_FN_SUPPORT)
358extern DI EXTHIDI PARAMS ((HI));
359#else
360#define EXTHIDI(x) ((DI) (HI) (x))
361#endif
362#if defined (DI_FN_SUPPORT)
363extern DI EXTSIDI PARAMS ((SI));
364#else
365#define EXTSIDI(x) ((DI) (SI) (x))
366#endif
7a292a7a 367
c906108c
SS
368#if defined (SF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
369extern DF EXTSFDF PARAMS ((SF));
370#else
371#define EXTSFDF(x) ((DF) (SF) (x))
372#endif
373#if defined (SF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
374extern XF EXTSFXF PARAMS ((SF));
375#else
376#define EXTSFXF(x) ((XF) (SF) (x))
377#endif
378#if defined (SF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
379extern TF EXTSFTF PARAMS ((SF));
380#else
381#define EXTSFTF(x) ((TF) (SF) (x))
382#endif
383#if defined (DF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
384extern XF EXTDFXF PARAMS ((DF));
385#else
386#define EXTDFXF(x) ((XF) (DF) (x))
387#endif
388#if defined (DF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
389extern TF EXTDFTF PARAMS ((DF));
390#else
391#define EXTDFTF(x) ((TF) (DF) (x))
392#endif
393#if defined (XF_FN_SUPPORT) || defined (TF_FN_SUPPORT)
394extern TF EXTXFTF PARAMS ((XF));
395#else
396#define EXTXFTF(x) ((TF) (XF) (x))
397#endif
7a292a7a 398
c906108c
SS
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)
403extern DI ZEXTBIDI PARAMS ((BI));
404#else
405#define ZEXTBIDI(x) ((DI) (BI) (x))
406#endif
407#define ZEXTQIHI(x) ((HI) (UQI) (x))
408#define ZEXTQISI(x) ((SI) (UQI) (x))
409#if defined (DI_FN_SUPPORT)
410extern DI ZEXTQIDI PARAMS ((QI));
411#else
412#define ZEXTQIDI(x) ((DI) (UQI) (x))
413#endif
414#define ZEXTHISI(x) ((SI) (UHI) (x))
415#if defined (DI_FN_SUPPORT)
416extern DI ZEXTHIDI PARAMS ((HI));
417#else
418#define ZEXTHIDI(x) ((DI) (UHI) (x))
419#endif
420#if defined (DI_FN_SUPPORT)
421extern DI ZEXTSIDI PARAMS ((SI));
422#else
423#define ZEXTSIDI(x) ((DI) (USI) (x))
424#endif
7a292a7a 425
c906108c
SS
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)
433extern BI TRUNCDIBI PARAMS ((DI));
434#else
435#define TRUNCDIBI(x) ((BI) (DI) (x))
436#endif
437#if defined (DI_FN_SUPPORT)
438extern QI TRUNCDIQI PARAMS ((DI));
439#else
440#define TRUNCDIQI(x) ((QI) (DI) (x))
441#endif
442#if defined (DI_FN_SUPPORT)
443extern HI TRUNCDIHI PARAMS ((DI));
444#else
445#define TRUNCDIHI(x) ((HI) (DI) (x))
446#endif
447#if defined (DI_FN_SUPPORT)
448extern SI TRUNCDISI PARAMS ((DI));
449#else
450#define TRUNCDISI(x) ((SI) (DI) (x))
451#endif
7a292a7a 452
c906108c
SS
453#if defined (DF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
454extern SF TRUNCDFSF PARAMS ((DF));
455#else
456#define TRUNCDFSF(x) ((SF) (DF) (x))
457#endif
458#if defined (XF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
459extern SF TRUNCXFSF PARAMS ((XF));
460#else
461#define TRUNCXFSF(x) ((SF) (XF) (x))
462#endif
463#if defined (XF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
464extern DF TRUNCXFDF PARAMS ((XF));
465#else
466#define TRUNCXFDF(x) ((DF) (XF) (x))
467#endif
468#if defined (TF_FN_SUPPORT) || defined (SF_FN_SUPPORT)
469extern SF TRUNCTFSF PARAMS ((TF));
470#else
471#define TRUNCTFSF(x) ((SF) (TF) (x))
472#endif
473#if defined (TF_FN_SUPPORT) || defined (DF_FN_SUPPORT)
474extern DF TRUNCTFDF PARAMS ((TF));
475#else
476#define TRUNCTFDF(x) ((DF) (TF) (x))
477#endif
478#if defined (TF_FN_SUPPORT) || defined (XF_FN_SUPPORT)
479extern XF TRUNCTFXF PARAMS ((TF));
480#else
481#define TRUNCTFXF(x) ((XF) (TF) (x))
482#endif
7a292a7a 483
c906108c
SS
484#if defined (SF_FN_SUPPORT)
485extern SF FLOATQISF PARAMS ((QI));
486#else
487#define FLOATQISF(x) ((SF) (QI) (x))
488#endif
489#if defined (DF_FN_SUPPORT)
490extern DF FLOATQIDF PARAMS ((QI));
491#else
492#define FLOATQIDF(x) ((DF) (QI) (x))
493#endif
494#if defined (XF_FN_SUPPORT)
495extern XF FLOATQIXF PARAMS ((QI));
496#else
497#define FLOATQIXF(x) ((XF) (QI) (x))
498#endif
499#if defined (TF_FN_SUPPORT)
500extern TF FLOATQITF PARAMS ((QI));
501#else
502#define FLOATQITF(x) ((TF) (QI) (x))
503#endif
504#if defined (SF_FN_SUPPORT)
505extern SF FLOATHISF PARAMS ((HI));
506#else
507#define FLOATHISF(x) ((SF) (HI) (x))
508#endif
509#if defined (DF_FN_SUPPORT)
510extern DF FLOATHIDF PARAMS ((HI));
511#else
512#define FLOATHIDF(x) ((DF) (HI) (x))
513#endif
514#if defined (XF_FN_SUPPORT)
515extern XF FLOATHIXF PARAMS ((HI));
516#else
517#define FLOATHIXF(x) ((XF) (HI) (x))
518#endif
519#if defined (TF_FN_SUPPORT)
520extern TF FLOATHITF PARAMS ((HI));
521#else
522#define FLOATHITF(x) ((TF) (HI) (x))
523#endif
524#if defined (SF_FN_SUPPORT)
525extern SF FLOATSISF PARAMS ((SI));
526#else
527#define FLOATSISF(x) ((SF) (SI) (x))
528#endif
529#if defined (DF_FN_SUPPORT)
530extern DF FLOATSIDF PARAMS ((SI));
531#else
532#define FLOATSIDF(x) ((DF) (SI) (x))
533#endif
534#if defined (XF_FN_SUPPORT)
535extern XF FLOATSIXF PARAMS ((SI));
536#else
537#define FLOATSIXF(x) ((XF) (SI) (x))
538#endif
539#if defined (TF_FN_SUPPORT)
540extern TF FLOATSITF PARAMS ((SI));
541#else
542#define FLOATSITF(x) ((TF) (SI) (x))
543#endif
544#if defined (DI_FN_SUPPORT) || defined (SF_FN_SUPPORT)
545extern SF FLOATDISF PARAMS ((DI));
546#else
547#define FLOATDISF(x) ((SF) (DI) (x))
548#endif
549#if defined (DI_FN_SUPPORT) || defined (DF_FN_SUPPORT)
550extern DF FLOATDIDF PARAMS ((DI));
551#else
552#define FLOATDIDF(x) ((DF) (DI) (x))
553#endif
554#if defined (DI_FN_SUPPORT) || defined (XF_FN_SUPPORT)
555extern XF FLOATDIXF PARAMS ((DI));
556#else
557#define FLOATDIXF(x) ((XF) (DI) (x))
558#endif
559#if defined (DI_FN_SUPPORT) || defined (TF_FN_SUPPORT)
560extern TF FLOATDITF PARAMS ((DI));
561#else
562#define FLOATDITF(x) ((TF) (DI) (x))
563#endif
7a292a7a 564
c906108c
SS
565#if defined (SF_FN_SUPPORT)
566extern SF UFLOATQISF PARAMS ((QI));
567#else
568#define UFLOATQISF(x) ((SF) (UQI) (x))
569#endif
570#if defined (DF_FN_SUPPORT)
571extern DF UFLOATQIDF PARAMS ((QI));
572#else
573#define UFLOATQIDF(x) ((DF) (UQI) (x))
574#endif
575#if defined (XF_FN_SUPPORT)
576extern XF UFLOATQIXF PARAMS ((QI));
577#else
578#define UFLOATQIXF(x) ((XF) (UQI) (x))
579#endif
580#if defined (TF_FN_SUPPORT)
581extern TF UFLOATQITF PARAMS ((QI));
582#else
583#define UFLOATQITF(x) ((TF) (UQI) (x))
584#endif
585#if defined (SF_FN_SUPPORT)
586extern SF UFLOATHISF PARAMS ((HI));
587#else
588#define UFLOATHISF(x) ((SF) (UHI) (x))
589#endif
590#if defined (DF_FN_SUPPORT)
591extern DF UFLOATHIDF PARAMS ((HI));
592#else
593#define UFLOATHIDF(x) ((DF) (UHI) (x))
594#endif
595#if defined (XF_FN_SUPPORT)
596extern XF UFLOATHIXF PARAMS ((HI));
597#else
598#define UFLOATHIXF(x) ((XF) (UHI) (x))
599#endif
600#if defined (TF_FN_SUPPORT)
601extern TF UFLOATHITF PARAMS ((HI));
602#else
603#define UFLOATHITF(x) ((TF) (UHI) (x))
604#endif
605#if defined (SF_FN_SUPPORT)
606extern SF UFLOATSISF PARAMS ((SI));
607#else
608#define UFLOATSISF(x) ((SF) (USI) (x))
609#endif
610#if defined (DF_FN_SUPPORT)
611extern DF UFLOATSIDF PARAMS ((SI));
612#else
613#define UFLOATSIDF(x) ((DF) (USI) (x))
614#endif
615#if defined (XF_FN_SUPPORT)
616extern XF UFLOATSIXF PARAMS ((SI));
617#else
618#define UFLOATSIXF(x) ((XF) (USI) (x))
619#endif
620#if defined (TF_FN_SUPPORT)
621extern TF UFLOATSITF PARAMS ((SI));
622#else
623#define UFLOATSITF(x) ((TF) (USI) (x))
624#endif
625#if defined (DI_FN_SUPPORT) || defined (SF_FN_SUPPORT)
626extern SF UFLOATDISF PARAMS ((DI));
627#else
628#define UFLOATDISF(x) ((SF) (UDI) (x))
629#endif
630#if defined (DI_FN_SUPPORT) || defined (DF_FN_SUPPORT)
631extern DF UFLOATDIDF PARAMS ((DI));
632#else
633#define UFLOATDIDF(x) ((DF) (UDI) (x))
634#endif
635#if defined (DI_FN_SUPPORT) || defined (XF_FN_SUPPORT)
636extern XF UFLOATDIXF PARAMS ((DI));
637#else
638#define UFLOATDIXF(x) ((XF) (UDI) (x))
639#endif
640#if defined (DI_FN_SUPPORT) || defined (TF_FN_SUPPORT)
641extern TF UFLOATDITF PARAMS ((DI));
642#else
643#define UFLOATDITF(x) ((TF) (UDI) (x))
644#endif
7a292a7a 645
c906108c
SS
646#if defined (SF_FN_SUPPORT)
647extern BI FIXSFBI PARAMS ((SF));
648#else
649#define FIXSFBI(x) ((BI) (SF) (x))
650#endif
651#if defined (SF_FN_SUPPORT)
652extern QI FIXSFQI PARAMS ((SF));
653#else
654#define FIXSFQI(x) ((QI) (SF) (x))
655#endif
656#if defined (SF_FN_SUPPORT)
657extern HI FIXSFHI PARAMS ((SF));
658#else
659#define FIXSFHI(x) ((HI) (SF) (x))
660#endif
661#if defined (SF_FN_SUPPORT)
662extern SI FIXSFSI PARAMS ((SF));
663#else
664#define FIXSFSI(x) ((SI) (SF) (x))
665#endif
666#if defined (SF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
667extern DI FIXSFDI PARAMS ((SF));
668#else
669#define FIXSFDI(x) ((DI) (SF) (x))
670#endif
671#if defined (DF_FN_SUPPORT)
672extern BI FIXDFBI PARAMS ((DF));
673#else
674#define FIXDFBI(x) ((BI) (DF) (x))
675#endif
676#if defined (DF_FN_SUPPORT)
677extern QI FIXDFQI PARAMS ((DF));
678#else
679#define FIXDFQI(x) ((QI) (DF) (x))
680#endif
681#if defined (DF_FN_SUPPORT)
682extern HI FIXDFHI PARAMS ((DF));
683#else
684#define FIXDFHI(x) ((HI) (DF) (x))
685#endif
686#if defined (DF_FN_SUPPORT)
687extern SI FIXDFSI PARAMS ((DF));
688#else
689#define FIXDFSI(x) ((SI) (DF) (x))
690#endif
691#if defined (DF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
692extern DI FIXDFDI PARAMS ((DF));
693#else
694#define FIXDFDI(x) ((DI) (DF) (x))
695#endif
696#if defined (XF_FN_SUPPORT)
697extern BI FIXXFBI PARAMS ((XF));
698#else
699#define FIXXFBI(x) ((BI) (XF) (x))
700#endif
701#if defined (XF_FN_SUPPORT)
702extern QI FIXXFQI PARAMS ((XF));
703#else
704#define FIXXFQI(x) ((QI) (XF) (x))
705#endif
706#if defined (XF_FN_SUPPORT)
707extern HI FIXXFHI PARAMS ((XF));
708#else
709#define FIXXFHI(x) ((HI) (XF) (x))
710#endif
711#if defined (XF_FN_SUPPORT)
712extern SI FIXXFSI PARAMS ((XF));
713#else
714#define FIXXFSI(x) ((SI) (XF) (x))
715#endif
716#if defined (XF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
717extern DI FIXXFDI PARAMS ((XF));
718#else
719#define FIXXFDI(x) ((DI) (XF) (x))
720#endif
721#if defined (TF_FN_SUPPORT)
722extern BI FIXTFBI PARAMS ((TF));
723#else
724#define FIXTFBI(x) ((BI) (TF) (x))
725#endif
726#if defined (TF_FN_SUPPORT)
727extern QI FIXTFQI PARAMS ((TF));
728#else
729#define FIXTFQI(x) ((QI) (TF) (x))
730#endif
731#if defined (TF_FN_SUPPORT)
732extern HI FIXTFHI PARAMS ((TF));
733#else
734#define FIXTFHI(x) ((HI) (TF) (x))
735#endif
736#if defined (TF_FN_SUPPORT)
737extern SI FIXTFSI PARAMS ((TF));
738#else
739#define FIXTFSI(x) ((SI) (TF) (x))
740#endif
741#if defined (TF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
742extern DI FIXTFDI PARAMS ((TF));
743#else
744#define FIXTFDI(x) ((DI) (TF) (x))
745#endif
7a292a7a 746
c906108c
SS
747#if defined (SF_FN_SUPPORT)
748extern QI UFIXSFQI PARAMS ((SF));
749#else
750#define UFIXSFQI(x) ((UQI) (SF) (x))
751#endif
752#if defined (SF_FN_SUPPORT)
753extern HI UFIXSFHI PARAMS ((SF));
754#else
755#define UFIXSFHI(x) ((UHI) (SF) (x))
756#endif
757#if defined (SF_FN_SUPPORT)
758extern SI UFIXSFSI PARAMS ((SF));
759#else
760#define UFIXSFSI(x) ((USI) (SF) (x))
761#endif
762#if defined (SF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
763extern DI UFIXSFDI PARAMS ((SF));
764#else
765#define UFIXSFDI(x) ((UDI) (SF) (x))
766#endif
767#if defined (DF_FN_SUPPORT)
768extern QI UFIXDFQI PARAMS ((DF));
769#else
770#define UFIXDFQI(x) ((UQI) (DF) (x))
771#endif
772#if defined (DF_FN_SUPPORT)
773extern HI UFIXDFHI PARAMS ((DF));
774#else
775#define UFIXDFHI(x) ((UHI) (DF) (x))
776#endif
777#if defined (DF_FN_SUPPORT)
778extern SI UFIXDFSI PARAMS ((DF));
779#else
780#define UFIXDFSI(x) ((USI) (DF) (x))
781#endif
782#if defined (DF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
783extern DI UFIXDFDI PARAMS ((DF));
784#else
785#define UFIXDFDI(x) ((UDI) (DF) (x))
786#endif
787#if defined (XF_FN_SUPPORT)
788extern QI UFIXXFQI PARAMS ((XF));
789#else
790#define UFIXXFQI(x) ((UQI) (XF) (x))
791#endif
792#if defined (XF_FN_SUPPORT)
793extern HI UFIXXFHI PARAMS ((XF));
794#else
795#define UFIXXFHI(x) ((UHI) (XF) (x))
796#endif
797#if defined (XF_FN_SUPPORT)
798extern SI UFIXXFSI PARAMS ((XF));
799#else
800#define UFIXXFSI(x) ((USI) (XF) (x))
801#endif
802#if defined (XF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
803extern DI UFIXXFDI PARAMS ((XF));
804#else
805#define UFIXXFDI(x) ((UDI) (XF) (x))
806#endif
807#if defined (TF_FN_SUPPORT)
808extern QI UFIXTFQI PARAMS ((TF));
809#else
810#define UFIXTFQI(x) ((UQI) (TF) (x))
811#endif
812#if defined (TF_FN_SUPPORT)
813extern HI UFIXTFHI PARAMS ((TF));
814#else
815#define UFIXTFHI(x) ((UHI) (TF) (x))
816#endif
817#if defined (TF_FN_SUPPORT)
818extern SI UFIXTFSI PARAMS ((TF));
819#else
820#define UFIXTFSI(x) ((USI) (TF) (x))
821#endif
822#if defined (TF_FN_SUPPORT) || defined (DI_FN_SUPPORT)
823extern DI UFIXTFDI PARAMS ((TF));
824#else
825#define UFIXTFDI(x) ((UDI) (TF) (x))
826#endif
827\f
7a292a7a 828/* Composing/decomposing the various types. */
c906108c
SS
829
830#ifdef SEMOPS_DEFINE_INLINE
7a292a7a
SS
831
832SEMOPS_INLINE SF
833SUBWORDSISF (SIM_CPU *cpu, SI in)
834{
835 union { SI in; SF out; } x;
836 x.in = in;
837 return x.out;
838}
839
840SEMOPS_INLINE SI
841SUBWORDSFSI (SIM_CPU *cpu, SF in)
842{
843 union { SF in; SI out; } x;
844 x.in = in;
845 return x.out;
846}
847
848SEMOPS_INLINE SI
849SUBWORDDISI (SIM_CPU *cpu, DI in, int word)
850{
851 /* ??? endianness issues undecided */
852 if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
853 {
854 if (word == 0)
855 return (UDI) in >> 32;
856 else
857 return in;
858 }
859 else
860 {
861 if (word == 1)
862 return (UDI) in >> 32;
863 else
864 return in;
865 }
866}
867
868SEMOPS_INLINE SI
869SUBWORDDFSI (SIM_CPU *cpu, DF in, int word)
870{
871 /* ??? endianness issues undecided */
872 union { DF in; SI out[2]; } x;
873 x.in = in;
874 if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
875 return x.out[word];
876 else
877 return x.out[!word];
878}
879
880SEMOPS_INLINE SI
881SUBWORDTFSI (SIM_CPU *cpu, TF in, int word)
882{
883 /* ??? endianness issues undecided */
884 union { TF in; SI out[4]; } x;
885 x.in = in;
886 if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
887 return x.out[word];
888 else
889 return x.out[word ^ 3];
890}
891
892SEMOPS_INLINE DI
893JOINSIDI (SIM_CPU *cpu, SI x0, SI x1)
894{
895 if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN)
896 return MAKEDI (x0, x1);
897 else
898 return MAKEDI (x1, x0);
899}
900
901SEMOPS_INLINE DF
902JOINSIDF (SIM_CPU *cpu, SI x0, SI x1)
903{
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;
907 else
908 x.in[1] = x0, x.in[0] = x1;
909 return x.out;
910}
911
912SEMOPS_INLINE TF
913JOINSITF (SIM_CPU *cpu, SI x0, SI x1, SI x2, SI x3)
914{
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;
918 else
919 x.in[3] = x0, x.in[2] = x1, x.in[1] = x2, x.in[0] = x3;
920 return x.out;
921}
922
c906108c 923#else
7a292a7a
SS
924
925SF SUBWORDSISF (SIM_CPU *, SI);
926SI SUBWORDSFSI (SIM_CPU *, SF);
927SI SUBWORDDISI (SIM_CPU *, DI, int);
928SI SUBWORDDFSI (SIM_CPU *, DF, int);
929SI SUBWORDTFSI (SIM_CPU *, TF, int);
930
931DI JOINSIDI (SIM_CPU *, SI, SI);
932DF JOINSIDF (SIM_CPU *, SI, SI);
933TF JOINSITF (SIM_CPU *, SI, SI, SI, SI);
934
935#endif /* SUBWORD,JOIN */
936\f
937/* Semantic support utilities. */
938
939#ifdef SEMOPS_DEFINE_INLINE
c906108c
SS
940
941SEMOPS_INLINE SI
942ADDCSI (SI a, SI b, BI c)
943{
944 SI res = ADDSI (a, ADDSI (b, c));
945 return res;
946}
947
948SEMOPS_INLINE BI
949ADDCFSI (SI a, SI b, BI c)
950{
951 SI tmp = ADDSI (a, ADDSI (b, c));
952 BI res = ((USI) tmp < (USI) a) || (c && tmp == a);
953 return res;
954}
955
956SEMOPS_INLINE BI
957ADDOFSI (SI a, SI b, BI c)
958{
959 SI tmp = ADDSI (a, ADDSI (b, c));
960 BI res = (((a < 0) == (b < 0))
961 && ((a < 0) != (tmp < 0)));
962 return res;
963}
964
965SEMOPS_INLINE SI
966SUBCSI (SI a, SI b, BI c)
967{
968 SI res = SUBSI (a, ADDSI (b, c));
969 return res;
970}
971
972SEMOPS_INLINE BI
973SUBCFSI (SI a, SI b, BI c)
974{
975 BI res = ((USI) a < (USI) b) || (c && a == b);
976 return res;
977}
978
979SEMOPS_INLINE BI
980SUBOFSI (SI a, SI b, BI c)
981{
982 SI tmp = SUBSI (a, ADDSI (b, c));
983 BI res = (((a < 0) != (b < 0))
984 && ((a < 0) != (tmp < 0)));
985 return res;
986}
987
988#else
989
990SI ADDCSI (SI, SI, BI);
991UBI ADDCFSI (SI, SI, BI);
992UBI ADDOFSI (SI, SI, BI);
993SI SUBCSI (SI, SI, BI);
994UBI SUBCFSI (SI, SI, BI);
995UBI SUBOFSI (SI, SI, BI);
996
997#endif
c906108c
SS
998
999#endif /* CGEN_SEM_OPS_H */
This page took 0.100721 seconds and 4 git commands to generate.