1*e4b17023SJohn Marino /* This is a software fixed-point library.
2*e4b17023SJohn Marino    Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
3*e4b17023SJohn Marino 
4*e4b17023SJohn Marino This file is part of GCC.
5*e4b17023SJohn Marino 
6*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify it under
7*e4b17023SJohn Marino the terms of the GNU General Public License as published by the Free
8*e4b17023SJohn Marino Software Foundation; either version 3, or (at your option) any later
9*e4b17023SJohn Marino version.
10*e4b17023SJohn Marino 
11*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12*e4b17023SJohn Marino WARRANTY; without even the implied warranty of MERCHANTABILITY or
13*e4b17023SJohn Marino FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14*e4b17023SJohn Marino for more details.
15*e4b17023SJohn Marino 
16*e4b17023SJohn Marino Under Section 7 of GPL version 3, you are granted additional
17*e4b17023SJohn Marino permissions described in the GCC Runtime Library Exception, version
18*e4b17023SJohn Marino 3.1, as published by the Free Software Foundation.
19*e4b17023SJohn Marino 
20*e4b17023SJohn Marino You should have received a copy of the GNU General Public License and
21*e4b17023SJohn Marino a copy of the GCC Runtime Library Exception along with this program;
22*e4b17023SJohn Marino see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23*e4b17023SJohn Marino <http://www.gnu.org/licenses/>.  */
24*e4b17023SJohn Marino 
25*e4b17023SJohn Marino #ifndef _FIXED_BIT_H
26*e4b17023SJohn Marino #define _FIXED_BIT_H
27*e4b17023SJohn Marino 
28*e4b17023SJohn Marino #ifdef LIBGCC2_GNU_PREFIX
29*e4b17023SJohn Marino #define LIBGCC2_FIXEDBIT_GNU_PREFIX
30*e4b17023SJohn Marino #endif
31*e4b17023SJohn Marino 
32*e4b17023SJohn Marino /* To use this file we need to define one of the following:
33*e4b17023SJohn Marino    QQ_MODE, UQQ_MODE, HQ_MODE, UHQ_MODE, SQ_MODE, USQ_MODE, DQ_MODE, UDQ_MODE,
34*e4b17023SJohn Marino    TQ_MODE, UTQ_MODE, HA_MODE, UHA_MODE, SA_MODE, USA_MODE, DA_MODE, UDA_MODE,
35*e4b17023SJohn Marino    TA_MODE, UTA_MODE.
36*e4b17023SJohn Marino    Then, all operators for this machine mode will be created.
37*e4b17023SJohn Marino 
38*e4b17023SJohn Marino    Or, we need to define FROM_* TO_* for conversions from one mode to another
39*e4b17023SJohn Marino    mode.  The mode could be one of the following:
40*e4b17023SJohn Marino    Fract: QQ, UQQ, HQ, UHQ, SQ, USQ, DQ, UDQ, TQ, UTQ
41*e4b17023SJohn Marino    Accum: HA, UHA, SA, USA, DA, UDA, TA, UTA
42*e4b17023SJohn Marino    Signed integer: QI, HI, SI, DI, TI
43*e4b17023SJohn Marino    Unsigned integer: UQI, UHI, USI, UDI, UTI
44*e4b17023SJohn Marino    Floating-point: SF, DF
45*e4b17023SJohn Marino    Ex: If we define FROM_QQ and TO_SI, the conversion from QQ to SI is
46*e4b17023SJohn Marino    generated.  */
47*e4b17023SJohn Marino 
48*e4b17023SJohn Marino #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
49*e4b17023SJohn Marino #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
50*e4b17023SJohn Marino #endif
51*e4b17023SJohn Marino 
52*e4b17023SJohn Marino #ifndef LIBGCC2_HAS_SF_MODE
53*e4b17023SJohn Marino #define LIBGCC2_HAS_SF_MODE (BITS_PER_UNIT == 8)
54*e4b17023SJohn Marino #endif
55*e4b17023SJohn Marino 
56*e4b17023SJohn Marino #ifndef LIBGCC2_HAS_DF_MODE
57*e4b17023SJohn Marino #define LIBGCC2_HAS_DF_MODE \
58*e4b17023SJohn Marino   (BITS_PER_UNIT == 8 \
59*e4b17023SJohn Marino    && (__SIZEOF_DOUBLE__ * __CHAR_BIT__ == 64 \
60*e4b17023SJohn Marino        || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64))
61*e4b17023SJohn Marino #endif
62*e4b17023SJohn Marino 
63*e4b17023SJohn Marino typedef          int QItype     __attribute__ ((mode (QI)));
64*e4b17023SJohn Marino typedef unsigned int UQItype    __attribute__ ((mode (QI)));
65*e4b17023SJohn Marino typedef          int HItype     __attribute__ ((mode (HI)));
66*e4b17023SJohn Marino typedef unsigned int UHItype    __attribute__ ((mode (HI)));
67*e4b17023SJohn Marino typedef          _Fract QQtype  __attribute__ ((mode (QQ)));
68*e4b17023SJohn Marino typedef unsigned _Fract UQQtype __attribute__ ((mode (UQQ)));
69*e4b17023SJohn Marino typedef          _Fract HQtype  __attribute__ ((mode (HQ)));
70*e4b17023SJohn Marino typedef unsigned _Fract UHQtype __attribute__ ((mode (UHQ)));
71*e4b17023SJohn Marino typedef          _Fract HAtype  __attribute__ ((mode (HA)));
72*e4b17023SJohn Marino typedef unsigned _Fract UHAtype __attribute__ ((mode (UHA)));
73*e4b17023SJohn Marino #define HAVE_QQ		1
74*e4b17023SJohn Marino #define HAVE_UQQ	1
75*e4b17023SJohn Marino #define HAVE_HQ		1
76*e4b17023SJohn Marino #define HAVE_UHQ	1
77*e4b17023SJohn Marino #define HAVE_HA		1
78*e4b17023SJohn Marino #define HAVE_UHA	1
79*e4b17023SJohn Marino #define HAVE_QI		1
80*e4b17023SJohn Marino #define HAVE_UQI	1
81*e4b17023SJohn Marino #define HAVE_HI		1
82*e4b17023SJohn Marino #define HAVE_UHI	1
83*e4b17023SJohn Marino #if MIN_UNITS_PER_WORD > 1
84*e4b17023SJohn Marino /* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1.  */
85*e4b17023SJohn Marino typedef          int SItype     __attribute__ ((mode (SI)));
86*e4b17023SJohn Marino typedef unsigned int USItype    __attribute__ ((mode (SI)));
87*e4b17023SJohn Marino typedef          _Fract SQtype  __attribute__ ((mode (SQ)));
88*e4b17023SJohn Marino typedef unsigned _Fract USQtype __attribute__ ((mode (USQ)));
89*e4b17023SJohn Marino typedef          _Fract SAtype  __attribute__ ((mode (SA)));
90*e4b17023SJohn Marino typedef unsigned _Fract USAtype __attribute__ ((mode (USA)));
91*e4b17023SJohn Marino #define HAVE_SQ		1
92*e4b17023SJohn Marino #define HAVE_USQ	1
93*e4b17023SJohn Marino #define HAVE_SA		1
94*e4b17023SJohn Marino #define HAVE_USA	1
95*e4b17023SJohn Marino #define HAVE_SI		1
96*e4b17023SJohn Marino #define HAVE_USI	1
97*e4b17023SJohn Marino #if LONG_LONG_TYPE_SIZE > 32
98*e4b17023SJohn Marino /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2.  */
99*e4b17023SJohn Marino typedef          int DItype     __attribute__ ((mode (DI)));
100*e4b17023SJohn Marino typedef unsigned int UDItype    __attribute__ ((mode (DI)));
101*e4b17023SJohn Marino typedef          _Fract DQtype  __attribute__ ((mode (DQ)));
102*e4b17023SJohn Marino typedef unsigned _Fract UDQtype __attribute__ ((mode (UDQ)));
103*e4b17023SJohn Marino typedef          _Fract DAtype  __attribute__ ((mode (DA)));
104*e4b17023SJohn Marino typedef unsigned _Fract UDAtype __attribute__ ((mode (UDA)));
105*e4b17023SJohn Marino #define HAVE_DQ		1
106*e4b17023SJohn Marino #define HAVE_UDQ	1
107*e4b17023SJohn Marino #define HAVE_DA		1
108*e4b17023SJohn Marino #define HAVE_UDA	1
109*e4b17023SJohn Marino #define HAVE_DI		1
110*e4b17023SJohn Marino #define HAVE_UDI	1
111*e4b17023SJohn Marino #if MIN_UNITS_PER_WORD > 4
112*e4b17023SJohn Marino /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4.  */
113*e4b17023SJohn Marino typedef          int TItype     __attribute__ ((mode (TI)));
114*e4b17023SJohn Marino typedef unsigned int UTItype    __attribute__ ((mode (TI)));
115*e4b17023SJohn Marino typedef          _Fract TQtype  __attribute__ ((mode (TQ)));
116*e4b17023SJohn Marino typedef unsigned _Fract UTQtype __attribute__ ((mode (UTQ)));
117*e4b17023SJohn Marino typedef          _Fract TAtype  __attribute__ ((mode (TA)));
118*e4b17023SJohn Marino typedef unsigned _Fract UTAtype __attribute__ ((mode (UTA)));
119*e4b17023SJohn Marino #define HAVE_TQ		1
120*e4b17023SJohn Marino #define HAVE_UTQ	1
121*e4b17023SJohn Marino #define HAVE_TA		1
122*e4b17023SJohn Marino #define HAVE_UTA	1
123*e4b17023SJohn Marino #define HAVE_TI		1
124*e4b17023SJohn Marino #define HAVE_UTI	1
125*e4b17023SJohn Marino #endif
126*e4b17023SJohn Marino #endif
127*e4b17023SJohn Marino #endif
128*e4b17023SJohn Marino 
129*e4b17023SJohn Marino #if LIBGCC2_HAS_SF_MODE
130*e4b17023SJohn Marino typedef float SFtype __attribute__ ((mode (SF)));
131*e4b17023SJohn Marino #define HAVE_SF		1
132*e4b17023SJohn Marino #endif
133*e4b17023SJohn Marino #if LIBGCC2_HAS_DF_MODE
134*e4b17023SJohn Marino typedef float DFtype __attribute__ ((mode (DF)));
135*e4b17023SJohn Marino #define HAVE_DF		1
136*e4b17023SJohn Marino #endif
137*e4b17023SJohn Marino 
138*e4b17023SJohn Marino typedef int word_type __attribute__ ((mode (__word__)));
139*e4b17023SJohn Marino 
140*e4b17023SJohn Marino /* Based on modes, we create many defines.  */
141*e4b17023SJohn Marino 
142*e4b17023SJohn Marino #if defined (QQ_MODE) && (HAVE_QQ == 1)
143*e4b17023SJohn Marino #define FIXED_SIZE	1	/* in bytes.  */
144*e4b17023SJohn Marino #define INT_C_TYPE	QItype
145*e4b17023SJohn Marino #define UINT_C_TYPE	UQItype
146*e4b17023SJohn Marino #define DINT_C_TYPE	HItype
147*e4b17023SJohn Marino #define DUINT_C_TYPE	UHItype
148*e4b17023SJohn Marino #define MODE_NAME	QQ
149*e4b17023SJohn Marino #define MODE_NAME_S	qq
150*e4b17023SJohn Marino #define MODE_UNSIGNED	0
151*e4b17023SJohn Marino #endif
152*e4b17023SJohn Marino 
153*e4b17023SJohn Marino #if defined (UQQ_MODE) && (HAVE_UQQ == 1)
154*e4b17023SJohn Marino #define FIXED_SIZE	1	/* in bytes.  */
155*e4b17023SJohn Marino #define INT_C_TYPE	UQItype
156*e4b17023SJohn Marino #define UINT_C_TYPE	UQItype
157*e4b17023SJohn Marino #define DINT_C_TYPE	UHItype
158*e4b17023SJohn Marino #define DUINT_C_TYPE	UHItype
159*e4b17023SJohn Marino #define MODE_NAME	UQQ
160*e4b17023SJohn Marino #define MODE_NAME_S	uqq
161*e4b17023SJohn Marino #define MODE_UNSIGNED	1
162*e4b17023SJohn Marino #endif
163*e4b17023SJohn Marino 
164*e4b17023SJohn Marino #if defined (HQ_MODE) && (HAVE_HQ == 1)
165*e4b17023SJohn Marino #define FIXED_SIZE	2	/* in bytes.  */
166*e4b17023SJohn Marino #define INT_C_TYPE	HItype
167*e4b17023SJohn Marino #define UINT_C_TYPE	UHItype
168*e4b17023SJohn Marino 
169*e4b17023SJohn Marino #if HAVE_SI == 1
170*e4b17023SJohn Marino #define DINT_C_TYPE	SItype
171*e4b17023SJohn Marino #define DUINT_C_TYPE	USItype
172*e4b17023SJohn Marino #else
173*e4b17023SJohn Marino #define HINT_C_TYPE	QItype
174*e4b17023SJohn Marino #define HUINT_C_TYPE	UQItype
175*e4b17023SJohn Marino #endif
176*e4b17023SJohn Marino 
177*e4b17023SJohn Marino #define MODE_NAME	HQ
178*e4b17023SJohn Marino #define MODE_NAME_S	hq
179*e4b17023SJohn Marino #define MODE_UNSIGNED	0
180*e4b17023SJohn Marino #endif
181*e4b17023SJohn Marino 
182*e4b17023SJohn Marino #if defined (UHQ_MODE) && (HAVE_UHQ == 1)
183*e4b17023SJohn Marino #define FIXED_SIZE	2	/* in bytes.  */
184*e4b17023SJohn Marino #define INT_C_TYPE	UHItype
185*e4b17023SJohn Marino #define UINT_C_TYPE	UHItype
186*e4b17023SJohn Marino 
187*e4b17023SJohn Marino #if HAVE_SI == 1
188*e4b17023SJohn Marino #define DINT_C_TYPE	USItype
189*e4b17023SJohn Marino #define DUINT_C_TYPE	USItype
190*e4b17023SJohn Marino #else
191*e4b17023SJohn Marino #define HINT_C_TYPE	UQItype
192*e4b17023SJohn Marino #define HUINT_C_TYPE	UQItype
193*e4b17023SJohn Marino #endif
194*e4b17023SJohn Marino 
195*e4b17023SJohn Marino #define MODE_NAME	UHQ
196*e4b17023SJohn Marino #define MODE_NAME_S	uhq
197*e4b17023SJohn Marino #define MODE_UNSIGNED	1
198*e4b17023SJohn Marino #endif
199*e4b17023SJohn Marino 
200*e4b17023SJohn Marino #if defined (SQ_MODE) && (HAVE_SQ == 1)
201*e4b17023SJohn Marino #define FIXED_SIZE	4	/* in bytes.  */
202*e4b17023SJohn Marino #define INT_C_TYPE	SItype
203*e4b17023SJohn Marino #define UINT_C_TYPE	USItype
204*e4b17023SJohn Marino 
205*e4b17023SJohn Marino #if HAVE_DI == 1
206*e4b17023SJohn Marino #define DINT_C_TYPE	DItype
207*e4b17023SJohn Marino #define DUINT_C_TYPE	UDItype
208*e4b17023SJohn Marino #else
209*e4b17023SJohn Marino #define HINT_C_TYPE	HItype
210*e4b17023SJohn Marino #define HUINT_C_TYPE	UHItype
211*e4b17023SJohn Marino #endif
212*e4b17023SJohn Marino 
213*e4b17023SJohn Marino #define MODE_NAME	SQ
214*e4b17023SJohn Marino #define MODE_NAME_S	sq
215*e4b17023SJohn Marino #define MODE_UNSIGNED	0
216*e4b17023SJohn Marino #endif
217*e4b17023SJohn Marino 
218*e4b17023SJohn Marino #if defined (USQ_MODE) && (HAVE_USQ == 1)
219*e4b17023SJohn Marino #define FIXED_SIZE	4	/* in bytes.  */
220*e4b17023SJohn Marino #define INT_C_TYPE	USItype
221*e4b17023SJohn Marino #define UINT_C_TYPE	USItype
222*e4b17023SJohn Marino 
223*e4b17023SJohn Marino #if HAVE_DI == 1
224*e4b17023SJohn Marino #define DINT_C_TYPE	UDItype
225*e4b17023SJohn Marino #define DUINT_C_TYPE	UDItype
226*e4b17023SJohn Marino #else
227*e4b17023SJohn Marino #define HINT_C_TYPE	UHItype
228*e4b17023SJohn Marino #define HUINT_C_TYPE	UHItype
229*e4b17023SJohn Marino #endif
230*e4b17023SJohn Marino 
231*e4b17023SJohn Marino #define MODE_NAME	USQ
232*e4b17023SJohn Marino #define MODE_NAME_S	usq
233*e4b17023SJohn Marino #define MODE_UNSIGNED	1
234*e4b17023SJohn Marino #endif
235*e4b17023SJohn Marino 
236*e4b17023SJohn Marino #if defined (DQ_MODE) && (HAVE_DQ == 1)
237*e4b17023SJohn Marino #define FIXED_SIZE	8	/* in bytes.  */
238*e4b17023SJohn Marino #define INT_C_TYPE	DItype
239*e4b17023SJohn Marino #define UINT_C_TYPE	UDItype
240*e4b17023SJohn Marino 
241*e4b17023SJohn Marino #if HAVE_TI == 1
242*e4b17023SJohn Marino #define DINT_C_TYPE	TItype
243*e4b17023SJohn Marino #define DUINT_C_TYPE	UTItype
244*e4b17023SJohn Marino #else
245*e4b17023SJohn Marino #define HINT_C_TYPE	SItype
246*e4b17023SJohn Marino #define HUINT_C_TYPE	USItype
247*e4b17023SJohn Marino #endif
248*e4b17023SJohn Marino 
249*e4b17023SJohn Marino #define MODE_NAME	DQ
250*e4b17023SJohn Marino #define MODE_NAME_S	dq
251*e4b17023SJohn Marino #define MODE_UNSIGNED	0
252*e4b17023SJohn Marino #endif
253*e4b17023SJohn Marino 
254*e4b17023SJohn Marino #if defined (UDQ_MODE) && (HAVE_UDQ == 1)
255*e4b17023SJohn Marino #define FIXED_SIZE	8	/* in bytes.  */
256*e4b17023SJohn Marino #define INT_C_TYPE	UDItype
257*e4b17023SJohn Marino #define UINT_C_TYPE	UDItype
258*e4b17023SJohn Marino 
259*e4b17023SJohn Marino #if HAVE_TI == 1
260*e4b17023SJohn Marino #define DINT_C_TYPE	UTItype
261*e4b17023SJohn Marino #define DUINT_C_TYPE	UTItype
262*e4b17023SJohn Marino #else
263*e4b17023SJohn Marino #define HINT_C_TYPE	USItype
264*e4b17023SJohn Marino #define HUINT_C_TYPE	USItype
265*e4b17023SJohn Marino #endif
266*e4b17023SJohn Marino 
267*e4b17023SJohn Marino #define MODE_NAME	UDQ
268*e4b17023SJohn Marino #define MODE_NAME_S	udq
269*e4b17023SJohn Marino #define MODE_UNSIGNED	1
270*e4b17023SJohn Marino #endif
271*e4b17023SJohn Marino 
272*e4b17023SJohn Marino #if defined (TQ_MODE) && (HAVE_TQ == 1)
273*e4b17023SJohn Marino #define FIXED_SIZE	16	/* in bytes.  */
274*e4b17023SJohn Marino #define INT_C_TYPE	TItype
275*e4b17023SJohn Marino #define UINT_C_TYPE	UTItype
276*e4b17023SJohn Marino #define HINT_C_TYPE	DItype
277*e4b17023SJohn Marino #define HUINT_C_TYPE	UDItype
278*e4b17023SJohn Marino #define MODE_NAME	TQ
279*e4b17023SJohn Marino #define MODE_NAME_S	tq
280*e4b17023SJohn Marino #define MODE_UNSIGNED	0
281*e4b17023SJohn Marino #endif
282*e4b17023SJohn Marino 
283*e4b17023SJohn Marino #if defined (UTQ_MODE) && (HAVE_UTQ == 1)
284*e4b17023SJohn Marino #define FIXED_SIZE	16	/* in bytes.  */
285*e4b17023SJohn Marino #define INT_C_TYPE	UTItype
286*e4b17023SJohn Marino #define UINT_C_TYPE	UTItype
287*e4b17023SJohn Marino #define HINT_C_TYPE	UDItype
288*e4b17023SJohn Marino #define HUINT_C_TYPE	UDItype
289*e4b17023SJohn Marino #define MODE_NAME	UTQ
290*e4b17023SJohn Marino #define MODE_NAME_S	utq
291*e4b17023SJohn Marino #define MODE_UNSIGNED	1
292*e4b17023SJohn Marino #endif
293*e4b17023SJohn Marino 
294*e4b17023SJohn Marino #if defined (HA_MODE) && (HAVE_HA == 1)
295*e4b17023SJohn Marino #define FIXED_SIZE	2	/* in bytes.  */
296*e4b17023SJohn Marino #define INT_C_TYPE	HItype
297*e4b17023SJohn Marino #define UINT_C_TYPE	UHItype
298*e4b17023SJohn Marino 
299*e4b17023SJohn Marino #if HAVE_SI == 1
300*e4b17023SJohn Marino #define DINT_C_TYPE	SItype
301*e4b17023SJohn Marino #define DUINT_C_TYPE	USItype
302*e4b17023SJohn Marino #else
303*e4b17023SJohn Marino #define HINT_C_TYPE	QItype
304*e4b17023SJohn Marino #define HUINT_C_TYPE	UQItype
305*e4b17023SJohn Marino #endif
306*e4b17023SJohn Marino 
307*e4b17023SJohn Marino #define MODE_NAME	HA
308*e4b17023SJohn Marino #define MODE_NAME_S	ha
309*e4b17023SJohn Marino #define MODE_UNSIGNED	0
310*e4b17023SJohn Marino #endif
311*e4b17023SJohn Marino 
312*e4b17023SJohn Marino #if defined (UHA_MODE) && (HAVE_UHA == 1)
313*e4b17023SJohn Marino #define FIXED_SIZE	2	/* in bytes.  */
314*e4b17023SJohn Marino #define INT_C_TYPE	UHItype
315*e4b17023SJohn Marino #define UINT_C_TYPE	UHItype
316*e4b17023SJohn Marino 
317*e4b17023SJohn Marino #if HAVE_SI == 1
318*e4b17023SJohn Marino #define DINT_C_TYPE	USItype
319*e4b17023SJohn Marino #define DUINT_C_TYPE	USItype
320*e4b17023SJohn Marino #else
321*e4b17023SJohn Marino #define HINT_C_TYPE	UQItype
322*e4b17023SJohn Marino #define HUINT_C_TYPE	UQItype
323*e4b17023SJohn Marino #endif
324*e4b17023SJohn Marino 
325*e4b17023SJohn Marino #define MODE_NAME	UHA
326*e4b17023SJohn Marino #define MODE_NAME_S	uha
327*e4b17023SJohn Marino #define MODE_UNSIGNED	1
328*e4b17023SJohn Marino #endif
329*e4b17023SJohn Marino 
330*e4b17023SJohn Marino #if defined (SA_MODE) && (HAVE_SA == 1)
331*e4b17023SJohn Marino #define FIXED_SIZE	4	/* in bytes.  */
332*e4b17023SJohn Marino #define INT_C_TYPE	SItype
333*e4b17023SJohn Marino #define UINT_C_TYPE	USItype
334*e4b17023SJohn Marino 
335*e4b17023SJohn Marino #if HAVE_DI == 1
336*e4b17023SJohn Marino #define DINT_C_TYPE	DItype
337*e4b17023SJohn Marino #define DUINT_C_TYPE	UDItype
338*e4b17023SJohn Marino #else
339*e4b17023SJohn Marino #define HINT_C_TYPE	HItype
340*e4b17023SJohn Marino #define HUINT_C_TYPE	UHItype
341*e4b17023SJohn Marino #endif
342*e4b17023SJohn Marino 
343*e4b17023SJohn Marino #define MODE_NAME	SA
344*e4b17023SJohn Marino #define MODE_NAME_S	sa
345*e4b17023SJohn Marino #define MODE_UNSIGNED	0
346*e4b17023SJohn Marino #endif
347*e4b17023SJohn Marino 
348*e4b17023SJohn Marino #if defined (USA_MODE) && (HAVE_USA == 1)
349*e4b17023SJohn Marino #define FIXED_SIZE	4	/* in bytes.  */
350*e4b17023SJohn Marino #define INT_C_TYPE	USItype
351*e4b17023SJohn Marino #define UINT_C_TYPE	USItype
352*e4b17023SJohn Marino 
353*e4b17023SJohn Marino #if HAVE_DI == 1
354*e4b17023SJohn Marino #define DINT_C_TYPE	UDItype
355*e4b17023SJohn Marino #define DUINT_C_TYPE	UDItype
356*e4b17023SJohn Marino #else
357*e4b17023SJohn Marino #define HINT_C_TYPE	UHItype
358*e4b17023SJohn Marino #define HUINT_C_TYPE	UHItype
359*e4b17023SJohn Marino #endif
360*e4b17023SJohn Marino 
361*e4b17023SJohn Marino #define MODE_NAME	USA
362*e4b17023SJohn Marino #define MODE_NAME_S	usa
363*e4b17023SJohn Marino #define MODE_UNSIGNED	1
364*e4b17023SJohn Marino #endif
365*e4b17023SJohn Marino 
366*e4b17023SJohn Marino #if defined (DA_MODE) && (HAVE_DA == 1)
367*e4b17023SJohn Marino #define FIXED_SIZE	8	/* in bytes.  */
368*e4b17023SJohn Marino #define INT_C_TYPE	DItype
369*e4b17023SJohn Marino #define UINT_C_TYPE	UDItype
370*e4b17023SJohn Marino 
371*e4b17023SJohn Marino #if HAVE_TI == 1
372*e4b17023SJohn Marino #define DINT_C_TYPE	TItype
373*e4b17023SJohn Marino #define DUINT_C_TYPE	UTItype
374*e4b17023SJohn Marino #else
375*e4b17023SJohn Marino #define HINT_C_TYPE	SItype
376*e4b17023SJohn Marino #define HUINT_C_TYPE	USItype
377*e4b17023SJohn Marino #endif
378*e4b17023SJohn Marino 
379*e4b17023SJohn Marino #define MODE_NAME	DA
380*e4b17023SJohn Marino #define MODE_NAME_S	da
381*e4b17023SJohn Marino #define MODE_UNSIGNED	0
382*e4b17023SJohn Marino #endif
383*e4b17023SJohn Marino 
384*e4b17023SJohn Marino #if defined (UDA_MODE) && (HAVE_UDA == 1)
385*e4b17023SJohn Marino #define FIXED_SIZE	8	/* in bytes.  */
386*e4b17023SJohn Marino #define INT_C_TYPE	UDItype
387*e4b17023SJohn Marino #define UINT_C_TYPE	UDItype
388*e4b17023SJohn Marino 
389*e4b17023SJohn Marino #if HAVE_TI == 1
390*e4b17023SJohn Marino #define DINT_C_TYPE	UTItype
391*e4b17023SJohn Marino #define DUINT_C_TYPE	UTItype
392*e4b17023SJohn Marino #else
393*e4b17023SJohn Marino #define HINT_C_TYPE	USItype
394*e4b17023SJohn Marino #define HUINT_C_TYPE	USItype
395*e4b17023SJohn Marino #endif
396*e4b17023SJohn Marino 
397*e4b17023SJohn Marino #define MODE_NAME	UDA
398*e4b17023SJohn Marino #define MODE_NAME_S	uda
399*e4b17023SJohn Marino #define MODE_UNSIGNED	1
400*e4b17023SJohn Marino #endif
401*e4b17023SJohn Marino 
402*e4b17023SJohn Marino #if defined (TA_MODE) && (HAVE_TA == 1)
403*e4b17023SJohn Marino #define FIXED_SIZE	16	/* in bytes.  */
404*e4b17023SJohn Marino #define INT_C_TYPE	TItype
405*e4b17023SJohn Marino #define UINT_C_TYPE	UTItype
406*e4b17023SJohn Marino #define HINT_C_TYPE	DItype
407*e4b17023SJohn Marino #define HUINT_C_TYPE	UDItype
408*e4b17023SJohn Marino #define MODE_NAME	TA
409*e4b17023SJohn Marino #define MODE_NAME_S	ta
410*e4b17023SJohn Marino #define MODE_UNSIGNED	0
411*e4b17023SJohn Marino #endif
412*e4b17023SJohn Marino 
413*e4b17023SJohn Marino #if defined (UTA_MODE) && (HAVE_UTA == 1)
414*e4b17023SJohn Marino #define FIXED_SIZE	16	/* in bytes.  */
415*e4b17023SJohn Marino #define INT_C_TYPE	UTItype
416*e4b17023SJohn Marino #define UINT_C_TYPE	UTItype
417*e4b17023SJohn Marino #define HINT_C_TYPE	UDItype
418*e4b17023SJohn Marino #define HUINT_C_TYPE	UDItype
419*e4b17023SJohn Marino #define MODE_NAME	UTA
420*e4b17023SJohn Marino #define MODE_NAME_S	uta
421*e4b17023SJohn Marino #define MODE_UNSIGNED	1
422*e4b17023SJohn Marino #endif
423*e4b17023SJohn Marino 
424*e4b17023SJohn Marino /* The following defines are based on the previous defines.  */
425*e4b17023SJohn Marino 
426*e4b17023SJohn Marino #if defined (HINT_C_TYPE)
427*e4b17023SJohn Marino #if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
428*e4b17023SJohn Marino   struct INTstruct {HINT_C_TYPE high, low;};
429*e4b17023SJohn Marino #else
430*e4b17023SJohn Marino   struct INTstruct {HINT_C_TYPE low, high;};
431*e4b17023SJohn Marino #endif
432*e4b17023SJohn Marino 
433*e4b17023SJohn Marino typedef union
434*e4b17023SJohn Marino {
435*e4b17023SJohn Marino   struct INTstruct s;
436*e4b17023SJohn Marino   INT_C_TYPE ll;
437*e4b17023SJohn Marino } INTunion;
438*e4b17023SJohn Marino #endif
439*e4b17023SJohn Marino 
440*e4b17023SJohn Marino #define FIXED_WIDTH	(FIXED_SIZE * BITS_PER_UNIT) /* in bits.  */
441*e4b17023SJohn Marino #define FIXED_C_TYPE1(NAME)	NAME ## type
442*e4b17023SJohn Marino #define FIXED_C_TYPE2(NAME)	FIXED_C_TYPE1(NAME)
443*e4b17023SJohn Marino #define FIXED_C_TYPE	FIXED_C_TYPE2(MODE_NAME)
444*e4b17023SJohn Marino #define FBITS1(NAME)	__ ## NAME ## _FBIT__
445*e4b17023SJohn Marino #define FBITS2(NAME)	FBITS1(NAME)
446*e4b17023SJohn Marino #define FBITS		FBITS2(MODE_NAME)
447*e4b17023SJohn Marino #define IBITS1(NAME)	__ ## NAME ## _IBIT__
448*e4b17023SJohn Marino #define IBITS2(NAME)	IBITS1(NAME)
449*e4b17023SJohn Marino #define IBITS		IBITS2(MODE_NAME)
450*e4b17023SJohn Marino #define I_F_BITS	(FBITS + IBITS)
451*e4b17023SJohn Marino 
452*e4b17023SJohn Marino #ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX
453*e4b17023SJohn Marino #define FIXED_OP(OP,MODE,NUM)	__gnu_ ## OP ## MODE ## NUM
454*e4b17023SJohn Marino #else
455*e4b17023SJohn Marino #define FIXED_OP(OP,MODE,NUM)	__ ## OP ## MODE ## NUM
456*e4b17023SJohn Marino #endif
457*e4b17023SJohn Marino 
458*e4b17023SJohn Marino #define FIXED_SATURATE1_TEMP(NAME)	FIXED_OP(saturate1,NAME,)
459*e4b17023SJohn Marino #define FIXED_SATURATE2_TEMP(NAME)	FIXED_OP(saturate2,NAME,)
460*e4b17023SJohn Marino #define FIXED_MULHELPER_TEMP(NAME)	FIXED_OP(mulhelper,NAME,)
461*e4b17023SJohn Marino #define FIXED_DIVHELPER_TEMP(NAME)	FIXED_OP(divhelper,NAME,)
462*e4b17023SJohn Marino #define FIXED_ASHLHELPER_TEMP(NAME)	FIXED_OP(ashlhelper,NAME,)
463*e4b17023SJohn Marino #define FIXED_ADD_TEMP(NAME)	FIXED_OP(add,NAME,3)
464*e4b17023SJohn Marino #define FIXED_SSADD_TEMP(NAME)	FIXED_OP(ssadd,NAME,3)
465*e4b17023SJohn Marino #define FIXED_USADD_TEMP(NAME)	FIXED_OP(usadd,NAME,3)
466*e4b17023SJohn Marino #define FIXED_SUB_TEMP(NAME)	FIXED_OP(sub,NAME,3)
467*e4b17023SJohn Marino #define FIXED_SSSUB_TEMP(NAME)	FIXED_OP(sssub,NAME,3)
468*e4b17023SJohn Marino #define FIXED_USSUB_TEMP(NAME)	FIXED_OP(ussub,NAME,3)
469*e4b17023SJohn Marino #define FIXED_MUL_TEMP(NAME)	FIXED_OP(mul,NAME,3)
470*e4b17023SJohn Marino #define FIXED_SSMUL_TEMP(NAME)	FIXED_OP(ssmul,NAME,3)
471*e4b17023SJohn Marino #define FIXED_USMUL_TEMP(NAME)	FIXED_OP(usmul,NAME,3)
472*e4b17023SJohn Marino #define FIXED_DIV_TEMP(NAME)	FIXED_OP(div,NAME,3)
473*e4b17023SJohn Marino #define FIXED_UDIV_TEMP(NAME)	FIXED_OP(udiv,NAME,3)
474*e4b17023SJohn Marino #define FIXED_SSDIV_TEMP(NAME)	FIXED_OP(ssdiv,NAME,3)
475*e4b17023SJohn Marino #define FIXED_USDIV_TEMP(NAME)	FIXED_OP(usdiv,NAME,3)
476*e4b17023SJohn Marino #define FIXED_NEG_TEMP(NAME)	FIXED_OP(neg,NAME,2)
477*e4b17023SJohn Marino #define FIXED_SSNEG_TEMP(NAME)	FIXED_OP(ssneg,NAME,2)
478*e4b17023SJohn Marino #define FIXED_USNEG_TEMP(NAME)	FIXED_OP(usneg,NAME,2)
479*e4b17023SJohn Marino #define FIXED_ASHL_TEMP(NAME)	FIXED_OP(ashl,NAME,3)
480*e4b17023SJohn Marino #define FIXED_ASHR_TEMP(NAME)	FIXED_OP(ashr,NAME,3)
481*e4b17023SJohn Marino #define FIXED_LSHR_TEMP(NAME)	FIXED_OP(lshr,NAME,3)
482*e4b17023SJohn Marino #define FIXED_SSASHL_TEMP(NAME)	FIXED_OP(ssashl,NAME,3)
483*e4b17023SJohn Marino #define FIXED_USASHL_TEMP(NAME)	FIXED_OP(usashl,NAME,3)
484*e4b17023SJohn Marino #define FIXED_CMP_TEMP(NAME)	FIXED_OP(cmp,NAME,2)
485*e4b17023SJohn Marino 
486*e4b17023SJohn Marino #if defined (MODE_NAME)
487*e4b17023SJohn Marino #if defined (DINT_C_TYPE)
488*e4b17023SJohn Marino #define FIXED_SATURATE1	FIXED_SATURATE1_TEMP(MODE_NAME_S)
489*e4b17023SJohn Marino #else
490*e4b17023SJohn Marino #define FIXED_SATURATE2	FIXED_SATURATE2_TEMP(MODE_NAME_S)
491*e4b17023SJohn Marino #endif
492*e4b17023SJohn Marino #define FIXED_MULHELPER	FIXED_MULHELPER_TEMP(MODE_NAME_S)
493*e4b17023SJohn Marino #define FIXED_DIVHELPER	FIXED_DIVHELPER_TEMP(MODE_NAME_S)
494*e4b17023SJohn Marino #define FIXED_ASHLHELPER	FIXED_ASHLHELPER_TEMP(MODE_NAME_S)
495*e4b17023SJohn Marino #define FIXED_ADD	FIXED_ADD_TEMP(MODE_NAME_S)
496*e4b17023SJohn Marino #define FIXED_SUB	FIXED_SUB_TEMP(MODE_NAME_S)
497*e4b17023SJohn Marino #define FIXED_MUL	FIXED_MUL_TEMP(MODE_NAME_S)
498*e4b17023SJohn Marino #define FIXED_NEG	FIXED_NEG_TEMP(MODE_NAME_S)
499*e4b17023SJohn Marino #define FIXED_ASHL	FIXED_ASHL_TEMP(MODE_NAME_S)
500*e4b17023SJohn Marino #define FIXED_CMP	FIXED_CMP_TEMP(MODE_NAME_S)
501*e4b17023SJohn Marino 
502*e4b17023SJohn Marino /* The following functions are for all fixed-point modes.  */
503*e4b17023SJohn Marino #if defined (DINT_C_TYPE)
504*e4b17023SJohn Marino extern void FIXED_SATURATE1 (DINT_C_TYPE *);
505*e4b17023SJohn Marino #else
506*e4b17023SJohn Marino extern void FIXED_SATURATE2 (INT_C_TYPE *, INT_C_TYPE *);
507*e4b17023SJohn Marino #endif
508*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_MULHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type);
509*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_DIVHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type);
510*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_ASHLHELPER (FIXED_C_TYPE, word_type, word_type);
511*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_ADD (FIXED_C_TYPE, FIXED_C_TYPE);
512*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_SUB (FIXED_C_TYPE, FIXED_C_TYPE);
513*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_MUL (FIXED_C_TYPE, FIXED_C_TYPE);
514*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_NEG (FIXED_C_TYPE);
515*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_ASHL (FIXED_C_TYPE, word_type);
516*e4b17023SJohn Marino extern word_type FIXED_CMP (FIXED_C_TYPE, FIXED_C_TYPE);
517*e4b17023SJohn Marino #endif
518*e4b17023SJohn Marino 
519*e4b17023SJohn Marino #if MODE_UNSIGNED == 0 /* Signed types.  */
520*e4b17023SJohn Marino #define PADDING_BITS	(FIXED_WIDTH - 1 - I_F_BITS)
521*e4b17023SJohn Marino #define NONPADDING_BITS	(1 + I_F_BITS)
522*e4b17023SJohn Marino 
523*e4b17023SJohn Marino #if defined (MODE_NAME)
524*e4b17023SJohn Marino #define FIXED_DIV	FIXED_DIV_TEMP(MODE_NAME_S)
525*e4b17023SJohn Marino #define FIXED_ASHR	FIXED_ASHR_TEMP(MODE_NAME_S)
526*e4b17023SJohn Marino #define FIXED_SSADD	FIXED_SSADD_TEMP(MODE_NAME_S)
527*e4b17023SJohn Marino #define FIXED_SSSUB	FIXED_SSSUB_TEMP(MODE_NAME_S)
528*e4b17023SJohn Marino #define FIXED_SSMUL	FIXED_SSMUL_TEMP(MODE_NAME_S)
529*e4b17023SJohn Marino #define FIXED_SSDIV	FIXED_SSDIV_TEMP(MODE_NAME_S)
530*e4b17023SJohn Marino #define FIXED_SSNEG	FIXED_SSNEG_TEMP(MODE_NAME_S)
531*e4b17023SJohn Marino #define FIXED_SSASHL	FIXED_SSASHL_TEMP(MODE_NAME_S)
532*e4b17023SJohn Marino 
533*e4b17023SJohn Marino /* The following functions are for signed fixed-point modes.  */
534*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_DIV (FIXED_C_TYPE, FIXED_C_TYPE);
535*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_ASHR (FIXED_C_TYPE, word_type);
536*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_SSADD (FIXED_C_TYPE, FIXED_C_TYPE);
537*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_SSSUB (FIXED_C_TYPE, FIXED_C_TYPE);
538*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_SSMUL (FIXED_C_TYPE, FIXED_C_TYPE);
539*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_SSDIV (FIXED_C_TYPE, FIXED_C_TYPE);
540*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_SSNEG (FIXED_C_TYPE);
541*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_SSASHL (FIXED_C_TYPE, word_type);
542*e4b17023SJohn Marino #endif
543*e4b17023SJohn Marino 
544*e4b17023SJohn Marino #else /* Unsigned types.  */
545*e4b17023SJohn Marino #define PADDING_BITS	(FIXED_WIDTH - I_F_BITS)
546*e4b17023SJohn Marino #define NONPADDING_BITS	(I_F_BITS)
547*e4b17023SJohn Marino 
548*e4b17023SJohn Marino #if defined (MODE_NAME)
549*e4b17023SJohn Marino #define FIXED_UDIV	FIXED_UDIV_TEMP(MODE_NAME_S)
550*e4b17023SJohn Marino #define FIXED_LSHR	FIXED_LSHR_TEMP(MODE_NAME_S)
551*e4b17023SJohn Marino #define FIXED_USDIV	FIXED_USDIV_TEMP(MODE_NAME_S)
552*e4b17023SJohn Marino #define FIXED_USADD	FIXED_USADD_TEMP(MODE_NAME_S)
553*e4b17023SJohn Marino #define FIXED_USSUB	FIXED_USSUB_TEMP(MODE_NAME_S)
554*e4b17023SJohn Marino #define FIXED_USMUL	FIXED_USMUL_TEMP(MODE_NAME_S)
555*e4b17023SJohn Marino #define FIXED_USNEG	FIXED_USNEG_TEMP(MODE_NAME_S)
556*e4b17023SJohn Marino #define FIXED_USASHL	FIXED_USASHL_TEMP(MODE_NAME_S)
557*e4b17023SJohn Marino 
558*e4b17023SJohn Marino /* The following functions are for unsigned fixed-point modes.  */
559*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_UDIV (FIXED_C_TYPE, FIXED_C_TYPE);
560*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_LSHR (FIXED_C_TYPE, word_type);
561*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_USADD (FIXED_C_TYPE, FIXED_C_TYPE);
562*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_USSUB (FIXED_C_TYPE, FIXED_C_TYPE);
563*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_USMUL (FIXED_C_TYPE, FIXED_C_TYPE);
564*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_USDIV (FIXED_C_TYPE, FIXED_C_TYPE);
565*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_USNEG (FIXED_C_TYPE);
566*e4b17023SJohn Marino extern FIXED_C_TYPE FIXED_USASHL (FIXED_C_TYPE, word_type);
567*e4b17023SJohn Marino #endif
568*e4b17023SJohn Marino 
569*e4b17023SJohn Marino #endif /* End of testing MODE_UNSIGNED.  */
570*e4b17023SJohn Marino 
571*e4b17023SJohn Marino /* This define is to check if this mode have any padding bits.  */
572*e4b17023SJohn Marino #define HAVE_PADDING_BITS	(PADDING_BITS > 0)
573*e4b17023SJohn Marino 
574*e4b17023SJohn Marino /* ------------------------------------------------------------------------ */
575*e4b17023SJohn Marino /* The following defines are for conversions.  */
576*e4b17023SJohn Marino 
577*e4b17023SJohn Marino #if defined (FROM_QI) && HAVE_QI == 1
578*e4b17023SJohn Marino #define FROM_TYPE		1	/* Signed integer.  */
579*e4b17023SJohn Marino #define FROM_INT_C_TYPE		QItype
580*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	QItype
581*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UQItype
582*e4b17023SJohn Marino #define FROM_MODE_NAME_S	qi
583*e4b17023SJohn Marino #define FROM_INT_SIZE		1	/* in bytes.  */
584*e4b17023SJohn Marino 
585*e4b17023SJohn Marino #elif defined (FROM_HI) && HAVE_HI == 1
586*e4b17023SJohn Marino #define FROM_TYPE		1	/* Signed integer.  */
587*e4b17023SJohn Marino #define FROM_INT_C_TYPE		HItype
588*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	HItype
589*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UHItype
590*e4b17023SJohn Marino #define FROM_MODE_NAME_S	hi
591*e4b17023SJohn Marino #define FROM_INT_SIZE		2	/* in bytes.  */
592*e4b17023SJohn Marino 
593*e4b17023SJohn Marino #elif defined (FROM_SI) && HAVE_SI == 1
594*e4b17023SJohn Marino #define FROM_TYPE		1	/* Signed integer.  */
595*e4b17023SJohn Marino #define FROM_INT_C_TYPE		SItype
596*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	SItype
597*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	USItype
598*e4b17023SJohn Marino #define FROM_MODE_NAME_S	si
599*e4b17023SJohn Marino #define FROM_INT_SIZE		4	/* in bytes.  */
600*e4b17023SJohn Marino 
601*e4b17023SJohn Marino #elif defined (FROM_DI) && HAVE_DI == 1
602*e4b17023SJohn Marino #define FROM_TYPE		1	/* Signed integer.  */
603*e4b17023SJohn Marino #define FROM_INT_C_TYPE		DItype
604*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	DItype
605*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UDItype
606*e4b17023SJohn Marino #define FROM_MODE_NAME_S	di
607*e4b17023SJohn Marino #define FROM_INT_SIZE		8	/* in bytes.  */
608*e4b17023SJohn Marino 
609*e4b17023SJohn Marino #elif defined (FROM_TI) && HAVE_TI == 1
610*e4b17023SJohn Marino #define FROM_TYPE		1	/* Signed integer.  */
611*e4b17023SJohn Marino #define FROM_INT_C_TYPE		TItype
612*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	TItype
613*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UTItype
614*e4b17023SJohn Marino #define FROM_MODE_NAME_S	ti
615*e4b17023SJohn Marino #define FROM_INT_SIZE		16	/* in bytes.  */
616*e4b17023SJohn Marino 
617*e4b17023SJohn Marino #elif defined (FROM_UQI) && HAVE_UQI == 1
618*e4b17023SJohn Marino #define FROM_TYPE		2	/* Unsigned integer.  */
619*e4b17023SJohn Marino #define FROM_INT_C_TYPE		QItype
620*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	QItype
621*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UQItype
622*e4b17023SJohn Marino #define FROM_MODE_NAME_S	qi
623*e4b17023SJohn Marino #define FROM_INT_SIZE		1	/* in bytes.  */
624*e4b17023SJohn Marino 
625*e4b17023SJohn Marino #elif defined (FROM_UHI) && HAVE_UHI == 1
626*e4b17023SJohn Marino #define FROM_TYPE		2	/* Unsigned integer.  */
627*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UHItype
628*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	HItype
629*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UHItype
630*e4b17023SJohn Marino #define FROM_MODE_NAME_S	hi
631*e4b17023SJohn Marino #define FROM_INT_SIZE		2	/* in bytes.  */
632*e4b17023SJohn Marino 
633*e4b17023SJohn Marino #elif defined (FROM_USI) && HAVE_USI == 1
634*e4b17023SJohn Marino #define FROM_TYPE		2	/* Unsigned integer.  */
635*e4b17023SJohn Marino #define FROM_INT_C_TYPE		USItype
636*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	SItype
637*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	USItype
638*e4b17023SJohn Marino #define FROM_MODE_NAME_S	si
639*e4b17023SJohn Marino #define FROM_INT_SIZE		4	/* in bytes.  */
640*e4b17023SJohn Marino 
641*e4b17023SJohn Marino #elif defined (FROM_UDI) && HAVE_UDI == 1
642*e4b17023SJohn Marino #define FROM_TYPE		2	/* Unsigned integer.  */
643*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UDItype
644*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	DItype
645*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UDItype
646*e4b17023SJohn Marino #define FROM_MODE_NAME_S	di
647*e4b17023SJohn Marino #define FROM_INT_SIZE		8	/* in bytes.  */
648*e4b17023SJohn Marino 
649*e4b17023SJohn Marino #elif defined (FROM_UTI) && HAVE_UTI == 1
650*e4b17023SJohn Marino #define FROM_TYPE		2	/* Unsigned integer.  */
651*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UTItype
652*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	TItype
653*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UTItype
654*e4b17023SJohn Marino #define FROM_MODE_NAME_S	ti
655*e4b17023SJohn Marino #define FROM_INT_SIZE		16	/* in bytes.  */
656*e4b17023SJohn Marino 
657*e4b17023SJohn Marino #elif defined (FROM_SF) && HAVE_SF == 1
658*e4b17023SJohn Marino #define FROM_TYPE		3	/* Floating-point.  */
659*e4b17023SJohn Marino #define FROM_FLOAT_C_TYPE	SFtype
660*e4b17023SJohn Marino #define FROM_MODE_NAME_S	sf
661*e4b17023SJohn Marino 
662*e4b17023SJohn Marino #elif defined (FROM_DF) && HAVE_DF == 1
663*e4b17023SJohn Marino #define FROM_TYPE		3	/* Floating-point.  */
664*e4b17023SJohn Marino #define FROM_FLOAT_C_TYPE	DFtype
665*e4b17023SJohn Marino #define FROM_MODE_NAME_S	df
666*e4b17023SJohn Marino 
667*e4b17023SJohn Marino #elif defined (FROM_QQ) && HAVE_QQ == 1
668*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
669*e4b17023SJohn Marino #define FROM_MODE_NAME		QQ
670*e4b17023SJohn Marino #define FROM_MODE_NAME_S	qq
671*e4b17023SJohn Marino #define FROM_INT_C_TYPE		QItype
672*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	QItype
673*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UQItype
674*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
675*e4b17023SJohn Marino #define FROM_FIXED_SIZE		1	/* in bytes.  */
676*e4b17023SJohn Marino 
677*e4b17023SJohn Marino #elif defined (FROM_HQ) && HAVE_HQ == 1
678*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
679*e4b17023SJohn Marino #define FROM_MODE_NAME		HQ
680*e4b17023SJohn Marino #define FROM_MODE_NAME_S	hq
681*e4b17023SJohn Marino #define FROM_INT_C_TYPE		HItype
682*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	HItype
683*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UHItype
684*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
685*e4b17023SJohn Marino #define FROM_FIXED_SIZE		2	/* in bytes.  */
686*e4b17023SJohn Marino 
687*e4b17023SJohn Marino #elif defined (FROM_SQ) && HAVE_SQ == 1
688*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
689*e4b17023SJohn Marino #define FROM_MODE_NAME		SQ
690*e4b17023SJohn Marino #define FROM_MODE_NAME_S	sq
691*e4b17023SJohn Marino #define FROM_INT_C_TYPE		SItype
692*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	SItype
693*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	USItype
694*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
695*e4b17023SJohn Marino #define FROM_FIXED_SIZE		4	/* in bytes.  */
696*e4b17023SJohn Marino 
697*e4b17023SJohn Marino #elif defined (FROM_DQ) && HAVE_DQ == 1
698*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
699*e4b17023SJohn Marino #define FROM_MODE_NAME		DQ
700*e4b17023SJohn Marino #define FROM_MODE_NAME_S	dq
701*e4b17023SJohn Marino #define FROM_INT_C_TYPE		DItype
702*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	DItype
703*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UDItype
704*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
705*e4b17023SJohn Marino #define FROM_FIXED_SIZE		8	/* in bytes.  */
706*e4b17023SJohn Marino 
707*e4b17023SJohn Marino #elif defined (FROM_TQ) && HAVE_TQ == 1
708*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
709*e4b17023SJohn Marino #define FROM_MODE_NAME		TQ
710*e4b17023SJohn Marino #define FROM_MODE_NAME_S	tq
711*e4b17023SJohn Marino #define FROM_INT_C_TYPE		TItype
712*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	TItype
713*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UTItype
714*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
715*e4b17023SJohn Marino #define FROM_FIXED_SIZE		16	/* in bytes.  */
716*e4b17023SJohn Marino 
717*e4b17023SJohn Marino #elif defined (FROM_UQQ) && HAVE_UQQ == 1
718*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
719*e4b17023SJohn Marino #define FROM_MODE_NAME		UQQ
720*e4b17023SJohn Marino #define FROM_MODE_NAME_S	uqq
721*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UQItype
722*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	QItype
723*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UQItype
724*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
725*e4b17023SJohn Marino #define FROM_FIXED_SIZE		1	/* in bytes.  */
726*e4b17023SJohn Marino 
727*e4b17023SJohn Marino #elif defined (FROM_UHQ) && HAVE_UHQ == 1
728*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
729*e4b17023SJohn Marino #define FROM_MODE_NAME		UHQ
730*e4b17023SJohn Marino #define FROM_MODE_NAME_S	uhq
731*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UHItype
732*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	HItype
733*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UHItype
734*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
735*e4b17023SJohn Marino #define FROM_FIXED_SIZE		2	/* in bytes.  */
736*e4b17023SJohn Marino 
737*e4b17023SJohn Marino #elif defined (FROM_USQ) && HAVE_USQ == 1
738*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
739*e4b17023SJohn Marino #define FROM_MODE_NAME		USQ
740*e4b17023SJohn Marino #define FROM_MODE_NAME_S	usq
741*e4b17023SJohn Marino #define FROM_INT_C_TYPE		USItype
742*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	SItype
743*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	USItype
744*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
745*e4b17023SJohn Marino #define FROM_FIXED_SIZE		4	/* in bytes.  */
746*e4b17023SJohn Marino 
747*e4b17023SJohn Marino #elif defined (FROM_UDQ) && HAVE_UDQ == 1
748*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
749*e4b17023SJohn Marino #define FROM_MODE_NAME		UDQ
750*e4b17023SJohn Marino #define FROM_MODE_NAME_S	udq
751*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UDItype
752*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	DItype
753*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UDItype
754*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
755*e4b17023SJohn Marino #define FROM_FIXED_SIZE		8	/* in bytes.  */
756*e4b17023SJohn Marino 
757*e4b17023SJohn Marino #elif defined (FROM_UTQ) && HAVE_UTQ == 1
758*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
759*e4b17023SJohn Marino #define FROM_MODE_NAME		UTQ
760*e4b17023SJohn Marino #define FROM_MODE_NAME_S	utq
761*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UTItype
762*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	TItype
763*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UTItype
764*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
765*e4b17023SJohn Marino #define FROM_FIXED_SIZE		16	/* in bytes.  */
766*e4b17023SJohn Marino 
767*e4b17023SJohn Marino #elif defined (FROM_HA) && HAVE_HA == 1
768*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
769*e4b17023SJohn Marino #define FROM_MODE_NAME		HA
770*e4b17023SJohn Marino #define FROM_MODE_NAME_S	ha
771*e4b17023SJohn Marino #define FROM_INT_C_TYPE		HItype
772*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	HItype
773*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UHItype
774*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
775*e4b17023SJohn Marino #define FROM_FIXED_SIZE		2	/* in bytes.  */
776*e4b17023SJohn Marino 
777*e4b17023SJohn Marino #elif defined (FROM_SA) && HAVE_SA == 1
778*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
779*e4b17023SJohn Marino #define FROM_MODE_NAME		SA
780*e4b17023SJohn Marino #define FROM_MODE_NAME_S	sa
781*e4b17023SJohn Marino #define FROM_INT_C_TYPE		SItype
782*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	SItype
783*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	USItype
784*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
785*e4b17023SJohn Marino #define FROM_FIXED_SIZE		4	/* in bytes.  */
786*e4b17023SJohn Marino 
787*e4b17023SJohn Marino #elif defined (FROM_DA) && HAVE_DA == 1
788*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
789*e4b17023SJohn Marino #define FROM_MODE_NAME		DA
790*e4b17023SJohn Marino #define FROM_MODE_NAME_S	da
791*e4b17023SJohn Marino #define FROM_INT_C_TYPE		DItype
792*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	DItype
793*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UDItype
794*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
795*e4b17023SJohn Marino #define FROM_FIXED_SIZE		8	/* in bytes.  */
796*e4b17023SJohn Marino 
797*e4b17023SJohn Marino #elif defined (FROM_TA) && HAVE_TA == 1
798*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
799*e4b17023SJohn Marino #define FROM_MODE_NAME		TA
800*e4b17023SJohn Marino #define FROM_MODE_NAME_S	ta
801*e4b17023SJohn Marino #define FROM_INT_C_TYPE		TItype
802*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	TItype
803*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UTItype
804*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	0
805*e4b17023SJohn Marino #define FROM_FIXED_SIZE		16	/* in bytes.  */
806*e4b17023SJohn Marino 
807*e4b17023SJohn Marino #elif defined (FROM_UHA) && HAVE_UHA == 1
808*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
809*e4b17023SJohn Marino #define FROM_MODE_NAME		UHA
810*e4b17023SJohn Marino #define FROM_MODE_NAME_S	uha
811*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UHItype
812*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	HItype
813*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UHItype
814*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
815*e4b17023SJohn Marino #define FROM_FIXED_SIZE		2	/* in bytes.  */
816*e4b17023SJohn Marino 
817*e4b17023SJohn Marino #elif defined (FROM_USA) && HAVE_USA == 1
818*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
819*e4b17023SJohn Marino #define FROM_MODE_NAME		USA
820*e4b17023SJohn Marino #define FROM_MODE_NAME_S	usa
821*e4b17023SJohn Marino #define FROM_INT_C_TYPE		USItype
822*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	SItype
823*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	USItype
824*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
825*e4b17023SJohn Marino #define FROM_FIXED_SIZE		4	/* in bytes.  */
826*e4b17023SJohn Marino 
827*e4b17023SJohn Marino #elif defined (FROM_UDA) && HAVE_UDA == 1
828*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
829*e4b17023SJohn Marino #define FROM_MODE_NAME		UDA
830*e4b17023SJohn Marino #define FROM_MODE_NAME_S	uda
831*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UDItype
832*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	DItype
833*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UDItype
834*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
835*e4b17023SJohn Marino #define FROM_FIXED_SIZE		8	/* in bytes.  */
836*e4b17023SJohn Marino 
837*e4b17023SJohn Marino #elif defined (FROM_UTA) && HAVE_UTA == 1
838*e4b17023SJohn Marino #define FROM_TYPE		4	/* Fixed-point.  */
839*e4b17023SJohn Marino #define FROM_MODE_NAME		UTA
840*e4b17023SJohn Marino #define FROM_MODE_NAME_S	uta
841*e4b17023SJohn Marino #define FROM_INT_C_TYPE		UTItype
842*e4b17023SJohn Marino #define FROM_SINT_C_TYPE	TItype
843*e4b17023SJohn Marino #define FROM_UINT_C_TYPE	UTItype
844*e4b17023SJohn Marino #define FROM_MODE_UNSIGNED	1
845*e4b17023SJohn Marino #define FROM_FIXED_SIZE		16	/* in bytes.  */
846*e4b17023SJohn Marino 
847*e4b17023SJohn Marino #endif
848*e4b17023SJohn Marino 
849*e4b17023SJohn Marino #if defined (TO_QI) && HAVE_QI == 1 && !defined (FROM_QI)
850*e4b17023SJohn Marino #define TO_TYPE			1	/* Signed integer.  */
851*e4b17023SJohn Marino #define TO_INT_C_TYPE		QItype
852*e4b17023SJohn Marino #define TO_SINT_C_TYPE		QItype
853*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UQItype
854*e4b17023SJohn Marino #define TO_MODE_NAME_S		qi
855*e4b17023SJohn Marino 
856*e4b17023SJohn Marino #elif defined (TO_HI) && HAVE_HI == 1 && !defined (FROM_HI)
857*e4b17023SJohn Marino #define TO_TYPE			1	/* Signed integer.  */
858*e4b17023SJohn Marino #define TO_INT_C_TYPE		HItype
859*e4b17023SJohn Marino #define TO_SINT_C_TYPE		HItype
860*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UHItype
861*e4b17023SJohn Marino #define TO_MODE_NAME_S		hi
862*e4b17023SJohn Marino 
863*e4b17023SJohn Marino #elif defined (TO_SI) && HAVE_SI == 1 && !defined (FROM_SI)
864*e4b17023SJohn Marino #define TO_TYPE			1	/* Signed integer.  */
865*e4b17023SJohn Marino #define TO_INT_C_TYPE		SItype
866*e4b17023SJohn Marino #define TO_SINT_C_TYPE		SItype
867*e4b17023SJohn Marino #define TO_UINT_C_TYPE		USItype
868*e4b17023SJohn Marino #define TO_MODE_NAME_S		si
869*e4b17023SJohn Marino 
870*e4b17023SJohn Marino #elif defined (TO_DI) && HAVE_DI == 1 && !defined (FROM_DI)
871*e4b17023SJohn Marino #define TO_TYPE			1	/* Signed integer.  */
872*e4b17023SJohn Marino #define TO_INT_C_TYPE		DItype
873*e4b17023SJohn Marino #define TO_SINT_C_TYPE		DItype
874*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UDItype
875*e4b17023SJohn Marino #define TO_MODE_NAME_S		di
876*e4b17023SJohn Marino 
877*e4b17023SJohn Marino #elif defined (TO_TI) && HAVE_TI == 1 && !defined (FROM_TI)
878*e4b17023SJohn Marino #define TO_TYPE			1	/* Signed integer.  */
879*e4b17023SJohn Marino #define TO_INT_C_TYPE		TItype
880*e4b17023SJohn Marino #define TO_SINT_C_TYPE		TItype
881*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UTItype
882*e4b17023SJohn Marino #define TO_MODE_NAME_S		ti
883*e4b17023SJohn Marino 
884*e4b17023SJohn Marino #elif defined (TO_UQI) && HAVE_UQI == 1 && !defined (FROM_UQI)
885*e4b17023SJohn Marino #define TO_TYPE			2	/* Unsigned integer.  */
886*e4b17023SJohn Marino #define TO_INT_C_TYPE		UQItype
887*e4b17023SJohn Marino #define TO_SINT_C_TYPE		QItype
888*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UQItype
889*e4b17023SJohn Marino #define TO_MODE_NAME_S		qi
890*e4b17023SJohn Marino 
891*e4b17023SJohn Marino #elif defined (TO_UHI) && HAVE_UHI == 1 && !defined (FROM_UHI)
892*e4b17023SJohn Marino #define TO_TYPE			2	/* Unsigned integer.  */
893*e4b17023SJohn Marino #define TO_INT_C_TYPE		UHItype
894*e4b17023SJohn Marino #define TO_SINT_C_TYPE		HItype
895*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UHItype
896*e4b17023SJohn Marino #define TO_MODE_NAME_S		hi
897*e4b17023SJohn Marino 
898*e4b17023SJohn Marino #elif defined (TO_USI) && HAVE_USI == 1 && !defined (FROM_USI)
899*e4b17023SJohn Marino #define TO_TYPE			2	/* Unsigned integer.  */
900*e4b17023SJohn Marino #define TO_INT_C_TYPE		USItype
901*e4b17023SJohn Marino #define TO_SINT_C_TYPE		SItype
902*e4b17023SJohn Marino #define TO_UINT_C_TYPE		USItype
903*e4b17023SJohn Marino #define TO_MODE_NAME_S		si
904*e4b17023SJohn Marino 
905*e4b17023SJohn Marino #elif defined (TO_UDI) && HAVE_UDI == 1 && !defined (FROM_UDI)
906*e4b17023SJohn Marino #define TO_TYPE			2	/* Unsigned integer.  */
907*e4b17023SJohn Marino #define TO_INT_C_TYPE		UDItype
908*e4b17023SJohn Marino #define TO_SINT_C_TYPE		DItype
909*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UDItype
910*e4b17023SJohn Marino #define TO_MODE_NAME_S		di
911*e4b17023SJohn Marino 
912*e4b17023SJohn Marino #elif defined (TO_UTI) && HAVE_UTI == 1 && !defined (FROM_UTI)
913*e4b17023SJohn Marino #define TO_TYPE			2	/* Unsigned integer.  */
914*e4b17023SJohn Marino #define TO_INT_C_TYPE		UTItype
915*e4b17023SJohn Marino #define TO_SINT_C_TYPE		TItype
916*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UTItype
917*e4b17023SJohn Marino #define TO_MODE_NAME_S		ti
918*e4b17023SJohn Marino 
919*e4b17023SJohn Marino #elif defined (TO_SF) && HAVE_SF == 1 && !defined (FROM_SF)
920*e4b17023SJohn Marino #define TO_TYPE			3	/* Floating-point.  */
921*e4b17023SJohn Marino #define TO_FLOAT_C_TYPE		SFtype
922*e4b17023SJohn Marino #define TO_MODE_NAME_S		sf
923*e4b17023SJohn Marino 
924*e4b17023SJohn Marino #elif defined (TO_DF) && HAVE_DF == 1 && !defined (FROM_DF)
925*e4b17023SJohn Marino #define TO_TYPE			3	/* Floating-point.  */
926*e4b17023SJohn Marino #define TO_FLOAT_C_TYPE		DFtype
927*e4b17023SJohn Marino #define TO_MODE_NAME_S		df
928*e4b17023SJohn Marino 
929*e4b17023SJohn Marino #elif defined (TO_QQ) && HAVE_QQ == 1 && !defined (FROM_QQ)
930*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
931*e4b17023SJohn Marino #define TO_MODE_NAME		QQ
932*e4b17023SJohn Marino #define TO_MODE_NAME_S		qq
933*e4b17023SJohn Marino #define TO_INT_C_TYPE		QItype
934*e4b17023SJohn Marino #define TO_SINT_C_TYPE		QItype
935*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UQItype
936*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
937*e4b17023SJohn Marino #define TO_FIXED_SIZE		1	/* in bytes.  */
938*e4b17023SJohn Marino 
939*e4b17023SJohn Marino #elif defined (TO_HQ) && HAVE_HQ == 1 && !defined (FROM_HQ)
940*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
941*e4b17023SJohn Marino #define TO_MODE_NAME		HQ
942*e4b17023SJohn Marino #define TO_MODE_NAME_S		hq
943*e4b17023SJohn Marino #define TO_INT_C_TYPE		HItype
944*e4b17023SJohn Marino #define TO_SINT_C_TYPE		HItype
945*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UHItype
946*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
947*e4b17023SJohn Marino #define TO_FIXED_SIZE		2	/* in bytes.  */
948*e4b17023SJohn Marino 
949*e4b17023SJohn Marino #elif defined (TO_SQ) && HAVE_SQ == 1 && !defined (FROM_SQ)
950*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
951*e4b17023SJohn Marino #define TO_MODE_NAME		SQ
952*e4b17023SJohn Marino #define TO_MODE_NAME_S		sq
953*e4b17023SJohn Marino #define TO_INT_C_TYPE		SItype
954*e4b17023SJohn Marino #define TO_SINT_C_TYPE		SItype
955*e4b17023SJohn Marino #define TO_UINT_C_TYPE		USItype
956*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
957*e4b17023SJohn Marino #define TO_FIXED_SIZE		4	/* in bytes.  */
958*e4b17023SJohn Marino 
959*e4b17023SJohn Marino #elif defined (TO_DQ) && HAVE_DQ == 1 && !defined (FROM_DQ)
960*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
961*e4b17023SJohn Marino #define TO_MODE_NAME		DQ
962*e4b17023SJohn Marino #define TO_MODE_NAME_S		dq
963*e4b17023SJohn Marino #define TO_INT_C_TYPE		DItype
964*e4b17023SJohn Marino #define TO_SINT_C_TYPE		DItype
965*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UDItype
966*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
967*e4b17023SJohn Marino #define TO_FIXED_SIZE		8	/* in bytes.  */
968*e4b17023SJohn Marino 
969*e4b17023SJohn Marino #elif defined (TO_TQ) && HAVE_TQ == 1 && !defined (FROM_TQ)
970*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
971*e4b17023SJohn Marino #define TO_MODE_NAME		TQ
972*e4b17023SJohn Marino #define TO_MODE_NAME_S		tq
973*e4b17023SJohn Marino #define TO_INT_C_TYPE		TItype
974*e4b17023SJohn Marino #define TO_SINT_C_TYPE		TItype
975*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UTItype
976*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
977*e4b17023SJohn Marino #define TO_FIXED_SIZE		16	/* in bytes.  */
978*e4b17023SJohn Marino 
979*e4b17023SJohn Marino #elif defined (TO_UQQ) && HAVE_UQQ == 1 && !defined (FROM_UQQ)
980*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
981*e4b17023SJohn Marino #define TO_MODE_NAME		UQQ
982*e4b17023SJohn Marino #define TO_MODE_NAME_S		uqq
983*e4b17023SJohn Marino #define TO_INT_C_TYPE		UQItype
984*e4b17023SJohn Marino #define TO_SINT_C_TYPE		QItype
985*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UQItype
986*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
987*e4b17023SJohn Marino #define TO_FIXED_SIZE		1	/* in bytes.  */
988*e4b17023SJohn Marino 
989*e4b17023SJohn Marino #elif defined (TO_UHQ) && HAVE_UHQ == 1 && !defined (FROM_UHQ)
990*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
991*e4b17023SJohn Marino #define TO_MODE_NAME		UHQ
992*e4b17023SJohn Marino #define TO_MODE_NAME_S		uhq
993*e4b17023SJohn Marino #define TO_INT_C_TYPE		UHItype
994*e4b17023SJohn Marino #define TO_SINT_C_TYPE		HItype
995*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UHItype
996*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
997*e4b17023SJohn Marino #define TO_FIXED_SIZE		2	/* in bytes.  */
998*e4b17023SJohn Marino 
999*e4b17023SJohn Marino #elif defined (TO_USQ) && HAVE_USQ == 1 && !defined (FROM_USQ)
1000*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1001*e4b17023SJohn Marino #define TO_MODE_NAME		USQ
1002*e4b17023SJohn Marino #define TO_MODE_NAME_S		usq
1003*e4b17023SJohn Marino #define TO_INT_C_TYPE		USItype
1004*e4b17023SJohn Marino #define TO_SINT_C_TYPE		SItype
1005*e4b17023SJohn Marino #define TO_UINT_C_TYPE		USItype
1006*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
1007*e4b17023SJohn Marino #define TO_FIXED_SIZE		4	/* in bytes.  */
1008*e4b17023SJohn Marino 
1009*e4b17023SJohn Marino #elif defined (TO_UDQ) && HAVE_UDQ == 1 && !defined (FROM_UDQ)
1010*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1011*e4b17023SJohn Marino #define TO_MODE_NAME		UDQ
1012*e4b17023SJohn Marino #define TO_MODE_NAME_S		udq
1013*e4b17023SJohn Marino #define TO_INT_C_TYPE		UDItype
1014*e4b17023SJohn Marino #define TO_SINT_C_TYPE		DItype
1015*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UDItype
1016*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
1017*e4b17023SJohn Marino #define TO_FIXED_SIZE		8	/* in bytes.  */
1018*e4b17023SJohn Marino 
1019*e4b17023SJohn Marino #elif defined (TO_UTQ) && HAVE_UTQ == 1 && !defined (FROM_UTQ)
1020*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1021*e4b17023SJohn Marino #define TO_MODE_NAME		UTQ
1022*e4b17023SJohn Marino #define TO_MODE_NAME_S		utq
1023*e4b17023SJohn Marino #define TO_INT_C_TYPE		UTItype
1024*e4b17023SJohn Marino #define TO_SINT_C_TYPE		TItype
1025*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UTItype
1026*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
1027*e4b17023SJohn Marino #define TO_FIXED_SIZE		16	/* in bytes.  */
1028*e4b17023SJohn Marino 
1029*e4b17023SJohn Marino #elif defined (TO_HA) && HAVE_HA == 1 && !defined (FROM_HA)
1030*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1031*e4b17023SJohn Marino #define TO_MODE_NAME		HA
1032*e4b17023SJohn Marino #define TO_MODE_NAME_S		ha
1033*e4b17023SJohn Marino #define TO_INT_C_TYPE		HItype
1034*e4b17023SJohn Marino #define TO_SINT_C_TYPE		HItype
1035*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UHItype
1036*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
1037*e4b17023SJohn Marino #define TO_FIXED_SIZE		2	/* in bytes.  */
1038*e4b17023SJohn Marino 
1039*e4b17023SJohn Marino #elif defined (TO_SA) && HAVE_SA == 1 && !defined (FROM_SA)
1040*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1041*e4b17023SJohn Marino #define TO_MODE_NAME		SA
1042*e4b17023SJohn Marino #define TO_MODE_NAME_S		sa
1043*e4b17023SJohn Marino #define TO_INT_C_TYPE		SItype
1044*e4b17023SJohn Marino #define TO_SINT_C_TYPE		SItype
1045*e4b17023SJohn Marino #define TO_UINT_C_TYPE		USItype
1046*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
1047*e4b17023SJohn Marino #define TO_FIXED_SIZE		4	/* in bytes.  */
1048*e4b17023SJohn Marino 
1049*e4b17023SJohn Marino #elif defined (TO_DA) && HAVE_DA == 1 && !defined (FROM_DA)
1050*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1051*e4b17023SJohn Marino #define TO_MODE_NAME		DA
1052*e4b17023SJohn Marino #define TO_MODE_NAME_S		da
1053*e4b17023SJohn Marino #define TO_INT_C_TYPE		DItype
1054*e4b17023SJohn Marino #define TO_SINT_C_TYPE		DItype
1055*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UDItype
1056*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
1057*e4b17023SJohn Marino #define TO_FIXED_SIZE		8	/* in bytes.  */
1058*e4b17023SJohn Marino 
1059*e4b17023SJohn Marino #elif defined (TO_TA) && HAVE_TA == 1 && !defined (FROM_TA)
1060*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1061*e4b17023SJohn Marino #define TO_MODE_NAME		TA
1062*e4b17023SJohn Marino #define TO_MODE_NAME_S		ta
1063*e4b17023SJohn Marino #define TO_INT_C_TYPE		TItype
1064*e4b17023SJohn Marino #define TO_SINT_C_TYPE		TItype
1065*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UTItype
1066*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	0
1067*e4b17023SJohn Marino #define TO_FIXED_SIZE		16	/* in bytes.  */
1068*e4b17023SJohn Marino 
1069*e4b17023SJohn Marino #elif defined (TO_UHA) && HAVE_UHA == 1 && !defined (FROM_UHA)
1070*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1071*e4b17023SJohn Marino #define TO_MODE_NAME		UHA
1072*e4b17023SJohn Marino #define TO_MODE_NAME_S		uha
1073*e4b17023SJohn Marino #define TO_INT_C_TYPE		UHItype
1074*e4b17023SJohn Marino #define TO_SINT_C_TYPE		HItype
1075*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UHItype
1076*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
1077*e4b17023SJohn Marino #define TO_FIXED_SIZE		2	/* in bytes.  */
1078*e4b17023SJohn Marino 
1079*e4b17023SJohn Marino #elif defined (TO_USA) && HAVE_USA == 1 && !defined (FROM_USA)
1080*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1081*e4b17023SJohn Marino #define TO_MODE_NAME		USA
1082*e4b17023SJohn Marino #define TO_MODE_NAME_S		usa
1083*e4b17023SJohn Marino #define TO_INT_C_TYPE		USItype
1084*e4b17023SJohn Marino #define TO_SINT_C_TYPE		SItype
1085*e4b17023SJohn Marino #define TO_UINT_C_TYPE		USItype
1086*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
1087*e4b17023SJohn Marino #define TO_FIXED_SIZE		4	/* in bytes.  */
1088*e4b17023SJohn Marino 
1089*e4b17023SJohn Marino #elif defined (TO_UDA) && HAVE_UDA == 1 && !defined (FROM_UDA)
1090*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1091*e4b17023SJohn Marino #define TO_MODE_NAME		UDA
1092*e4b17023SJohn Marino #define TO_MODE_NAME_S		uda
1093*e4b17023SJohn Marino #define TO_INT_C_TYPE		UDItype
1094*e4b17023SJohn Marino #define TO_SINT_C_TYPE		DItype
1095*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UDItype
1096*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
1097*e4b17023SJohn Marino #define TO_FIXED_SIZE		8	/* in bytes.  */
1098*e4b17023SJohn Marino 
1099*e4b17023SJohn Marino #elif defined (TO_UTA) && HAVE_UTA == 1 && !defined (FROM_UTA)
1100*e4b17023SJohn Marino #define TO_TYPE			4	/* Fixed-point.  */
1101*e4b17023SJohn Marino #define TO_MODE_NAME		UTA
1102*e4b17023SJohn Marino #define TO_MODE_NAME_S		uta
1103*e4b17023SJohn Marino #define TO_INT_C_TYPE		UTItype
1104*e4b17023SJohn Marino #define TO_SINT_C_TYPE		TItype
1105*e4b17023SJohn Marino #define TO_UINT_C_TYPE		UTItype
1106*e4b17023SJohn Marino #define TO_MODE_UNSIGNED	1
1107*e4b17023SJohn Marino #define TO_FIXED_SIZE		16	/* in bytes.  */
1108*e4b17023SJohn Marino 
1109*e4b17023SJohn Marino #endif
1110*e4b17023SJohn Marino 
1111*e4b17023SJohn Marino #if defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S)
1112*e4b17023SJohn Marino 
1113*e4b17023SJohn Marino #if FROM_TYPE == 1	/* Signed integer.  */
1114*e4b17023SJohn Marino #define FROM_INT_WIDTH		(FROM_INT_SIZE * BITS_PER_UNIT)
1115*e4b17023SJohn Marino #endif
1116*e4b17023SJohn Marino 
1117*e4b17023SJohn Marino #if FROM_TYPE == 2	/* Unsigned integer.  */
1118*e4b17023SJohn Marino #define FROM_INT_WIDTH		(FROM_INT_SIZE * BITS_PER_UNIT)
1119*e4b17023SJohn Marino #endif
1120*e4b17023SJohn Marino 
1121*e4b17023SJohn Marino #if FROM_TYPE == 4	/* Fixed-point.  */
1122*e4b17023SJohn Marino #define FROM_FIXED_C_TYPE	FIXED_C_TYPE2(FROM_MODE_NAME)
1123*e4b17023SJohn Marino #define FROM_FBITS		FBITS2(FROM_MODE_NAME)
1124*e4b17023SJohn Marino #define FROM_FIXED_WIDTH	(FROM_FIXED_SIZE * BITS_PER_UNIT)
1125*e4b17023SJohn Marino #define FROM_FBITS		FBITS2(FROM_MODE_NAME)
1126*e4b17023SJohn Marino #define FROM_IBITS		IBITS2(FROM_MODE_NAME)
1127*e4b17023SJohn Marino #define FROM_I_F_BITS		(FROM_FBITS + FROM_IBITS)
1128*e4b17023SJohn Marino 
1129*e4b17023SJohn Marino #if FROM_MODE_UNSIGNED == 0 /* Signed types.  */
1130*e4b17023SJohn Marino #define FROM_PADDING_BITS	(FROM_FIXED_WIDTH - 1 - FROM_I_F_BITS)
1131*e4b17023SJohn Marino #define FROM_NONPADDING_BITS	(1 + FROM_I_F_BITS)
1132*e4b17023SJohn Marino #else /* Unsigned types.  */
1133*e4b17023SJohn Marino #define FROM_PADDING_BITS	(FROM_FIXED_WIDTH - FROM_I_F_BITS)
1134*e4b17023SJohn Marino #define FROM_NONPADDING_BITS	(FROM_I_F_BITS)
1135*e4b17023SJohn Marino #endif
1136*e4b17023SJohn Marino #define FROM_HAVE_PADDING_BITS	(FROM_PADDING_BITS > 0)
1137*e4b17023SJohn Marino #endif /* FROM_TYPE == 4  */
1138*e4b17023SJohn Marino 
1139*e4b17023SJohn Marino #if TO_TYPE == 4	/* Fixed-point.  */
1140*e4b17023SJohn Marino #define TO_FIXED_C_TYPE		FIXED_C_TYPE2(TO_MODE_NAME)
1141*e4b17023SJohn Marino #define TO_FBITS		FBITS2(TO_MODE_NAME)
1142*e4b17023SJohn Marino #define TO_FIXED_WIDTH		(TO_FIXED_SIZE * BITS_PER_UNIT)
1143*e4b17023SJohn Marino #define TO_FBITS		FBITS2(TO_MODE_NAME)
1144*e4b17023SJohn Marino #define TO_IBITS		IBITS2(TO_MODE_NAME)
1145*e4b17023SJohn Marino #define TO_I_F_BITS		(TO_FBITS + TO_IBITS)
1146*e4b17023SJohn Marino 
1147*e4b17023SJohn Marino #if TO_MODE_UNSIGNED == 0 /* Signed types.  */
1148*e4b17023SJohn Marino #define TO_PADDING_BITS		(TO_FIXED_WIDTH - 1 - TO_I_F_BITS)
1149*e4b17023SJohn Marino #define TO_NONPADDING_BITS	(1 + TO_I_F_BITS)
1150*e4b17023SJohn Marino #else /* Unsigned types.  */
1151*e4b17023SJohn Marino #define TO_PADDING_BITS		(TO_FIXED_WIDTH - TO_I_F_BITS)
1152*e4b17023SJohn Marino #define TO_NONPADDING_BITS	(TO_I_F_BITS)
1153*e4b17023SJohn Marino #endif
1154*e4b17023SJohn Marino #define TO_HAVE_PADDING_BITS	(TO_PADDING_BITS > 0)
1155*e4b17023SJohn Marino #endif /* TO_TYPE == 4  */
1156*e4b17023SJohn Marino 
1157*e4b17023SJohn Marino #ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX
1158*e4b17023SJohn Marino #define FIXED_CONVERT_OP(OP,FROM,TO)	__gnu_ ## OP ## FROM ## TO
1159*e4b17023SJohn Marino #define FIXED_CONVERT_OP2(OP,FROM,TO)	__gnu_ ## OP ## FROM ## TO ## 2
1160*e4b17023SJohn Marino #else
1161*e4b17023SJohn Marino #define FIXED_CONVERT_OP(OP,FROM,TO)	__ ## OP ## FROM ## TO
1162*e4b17023SJohn Marino #define FIXED_CONVERT_OP2(OP,FROM,TO)	__ ## OP ## FROM ## TO ## 2
1163*e4b17023SJohn Marino #endif
1164*e4b17023SJohn Marino #define FRACT_TEMP(N1,N2)		FIXED_CONVERT_OP(fract,N1,N2)
1165*e4b17023SJohn Marino #define FRACT2_TEMP(N1,N2)		FIXED_CONVERT_OP2(fract,N1,N2)
1166*e4b17023SJohn Marino #define SATFRACT_TEMP(N1,N2)		FIXED_CONVERT_OP(satfract,N1,N2)
1167*e4b17023SJohn Marino #define SATFRACT2_TEMP(N1,N2)		FIXED_CONVERT_OP2(satfract,N1,N2)
1168*e4b17023SJohn Marino #define FRACTUNS_TEMP(N1,N2)		FIXED_CONVERT_OP(fractuns,N1,N2)
1169*e4b17023SJohn Marino #define SATFRACTUNS_TEMP(N1,N2)		FIXED_CONVERT_OP(satfractuns,N1,N2)
1170*e4b17023SJohn Marino 
1171*e4b17023SJohn Marino /* Define conversions from fixed-point to fixed-point.  */
1172*e4b17023SJohn Marino #if FROM_TYPE == 4 && TO_TYPE == 4
1173*e4b17023SJohn Marino 
1174*e4b17023SJohn Marino #if FROM_FIXED_SIZE > TO_FIXED_SIZE
1175*e4b17023SJohn Marino #define BIG_SINT_C_TYPE	FROM_SINT_C_TYPE
1176*e4b17023SJohn Marino #define BIG_UINT_C_TYPE	FROM_UINT_C_TYPE
1177*e4b17023SJohn Marino #define BIG_WIDTH	FROM_FIXED_WIDTH
1178*e4b17023SJohn Marino #else
1179*e4b17023SJohn Marino #define BIG_SINT_C_TYPE	TO_SINT_C_TYPE
1180*e4b17023SJohn Marino #define BIG_UINT_C_TYPE	TO_UINT_C_TYPE
1181*e4b17023SJohn Marino #define BIG_WIDTH	TO_FIXED_WIDTH
1182*e4b17023SJohn Marino #endif
1183*e4b17023SJohn Marino 
1184*e4b17023SJohn Marino /* Check if FROM* and TO* are in the same machine class.  */
1185*e4b17023SJohn Marino #if ((FROM_MODE_UNSIGNED == TO_MODE_UNSIGNED) \
1186*e4b17023SJohn Marino      && ((FROM_IBITS == 0) == (TO_IBITS == 0)))
1187*e4b17023SJohn Marino /* Same modes: append '2' to conversion function names */
1188*e4b17023SJohn Marino #define FRACT		FRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1189*e4b17023SJohn Marino #define SATFRACT	SATFRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1190*e4b17023SJohn Marino #else
1191*e4b17023SJohn Marino /* Different modes: don't append '2' to conversion function names */
1192*e4b17023SJohn Marino #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1193*e4b17023SJohn Marino #define SATFRACT	SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1194*e4b17023SJohn Marino #endif
1195*e4b17023SJohn Marino 
1196*e4b17023SJohn Marino extern TO_FIXED_C_TYPE FRACT (FROM_FIXED_C_TYPE);
1197*e4b17023SJohn Marino extern TO_FIXED_C_TYPE SATFRACT (FROM_FIXED_C_TYPE);
1198*e4b17023SJohn Marino #endif /* FROM_TYPE == 4 && TO_TYPE == 4  */
1199*e4b17023SJohn Marino 
1200*e4b17023SJohn Marino /* Define conversions from fixed-point to signed integer.  */
1201*e4b17023SJohn Marino #if FROM_TYPE == 4 && TO_TYPE == 1
1202*e4b17023SJohn Marino #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1203*e4b17023SJohn Marino extern TO_INT_C_TYPE	FRACT (FROM_FIXED_C_TYPE);
1204*e4b17023SJohn Marino #endif /* FROM_TYPE == 4 && TO_TYPE == 1  */
1205*e4b17023SJohn Marino 
1206*e4b17023SJohn Marino /* Define conversions from fixed-point to unsigned integer.  */
1207*e4b17023SJohn Marino #if FROM_TYPE == 4 && TO_TYPE == 2
1208*e4b17023SJohn Marino #define FRACTUNS	FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1209*e4b17023SJohn Marino extern TO_INT_C_TYPE 	FRACTUNS (FROM_FIXED_C_TYPE);
1210*e4b17023SJohn Marino #endif /* FROM_TYPE == 4 && TO_TYPE == 2  */
1211*e4b17023SJohn Marino 
1212*e4b17023SJohn Marino /* Define conversions from fixed-point to floating-point.  */
1213*e4b17023SJohn Marino #if FROM_TYPE == 4 && TO_TYPE == 3
1214*e4b17023SJohn Marino #define BASE1(NUM)	0x1.0p ## NUM
1215*e4b17023SJohn Marino #define BASE2(NUM)	BASE1(NUM)
1216*e4b17023SJohn Marino #define BASE		BASE2(FROM_FBITS)
1217*e4b17023SJohn Marino #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1218*e4b17023SJohn Marino extern TO_FLOAT_C_TYPE	FRACT (FROM_FIXED_C_TYPE);
1219*e4b17023SJohn Marino #endif /* FROM_TYPE == 4 && TO_TYPE == 3  */
1220*e4b17023SJohn Marino 
1221*e4b17023SJohn Marino /* Define conversions from signed integer to fixed-point.  */
1222*e4b17023SJohn Marino #if FROM_TYPE == 1 && TO_TYPE == 4
1223*e4b17023SJohn Marino 
1224*e4b17023SJohn Marino #if FROM_INT_SIZE > TO_FIXED_SIZE
1225*e4b17023SJohn Marino #define BIG_SINT_C_TYPE	FROM_SINT_C_TYPE
1226*e4b17023SJohn Marino #define BIG_UINT_C_TYPE	FROM_UINT_C_TYPE
1227*e4b17023SJohn Marino #define BIG_WIDTH	FROM_INT_WIDTH
1228*e4b17023SJohn Marino #else
1229*e4b17023SJohn Marino #define BIG_SINT_C_TYPE	TO_SINT_C_TYPE
1230*e4b17023SJohn Marino #define BIG_UINT_C_TYPE	TO_UINT_C_TYPE
1231*e4b17023SJohn Marino #define BIG_WIDTH	TO_FIXED_WIDTH
1232*e4b17023SJohn Marino #endif
1233*e4b17023SJohn Marino 
1234*e4b17023SJohn Marino #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1235*e4b17023SJohn Marino #define SATFRACT	SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1236*e4b17023SJohn Marino extern TO_FIXED_C_TYPE	FRACT (FROM_INT_C_TYPE);
1237*e4b17023SJohn Marino extern TO_FIXED_C_TYPE	SATFRACT (FROM_INT_C_TYPE);
1238*e4b17023SJohn Marino #endif /* FROM_TYPE == 1 && TO_TYPE == 4  */
1239*e4b17023SJohn Marino 
1240*e4b17023SJohn Marino /* Define conversions from unsigned integer to fixed-point.  */
1241*e4b17023SJohn Marino #if FROM_TYPE == 2 && TO_TYPE == 4
1242*e4b17023SJohn Marino 
1243*e4b17023SJohn Marino #if FROM_INT_SIZE > TO_FIXED_SIZE
1244*e4b17023SJohn Marino #define BIG_SINT_C_TYPE	FROM_SINT_C_TYPE
1245*e4b17023SJohn Marino #define BIG_UINT_C_TYPE	FROM_UINT_C_TYPE
1246*e4b17023SJohn Marino #define BIG_WIDTH	FROM_INT_WIDTH
1247*e4b17023SJohn Marino #else
1248*e4b17023SJohn Marino #define BIG_SINT_C_TYPE	TO_SINT_C_TYPE
1249*e4b17023SJohn Marino #define BIG_UINT_C_TYPE	TO_UINT_C_TYPE
1250*e4b17023SJohn Marino #define BIG_WIDTH	TO_FIXED_WIDTH
1251*e4b17023SJohn Marino #endif
1252*e4b17023SJohn Marino 
1253*e4b17023SJohn Marino #define FRACTUNS	FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1254*e4b17023SJohn Marino #define SATFRACTUNS	SATFRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1255*e4b17023SJohn Marino extern TO_FIXED_C_TYPE	FRACTUNS (FROM_INT_C_TYPE);
1256*e4b17023SJohn Marino extern TO_FIXED_C_TYPE	SATFRACTUNS (FROM_INT_C_TYPE);
1257*e4b17023SJohn Marino #endif /* FROM_TYPE == 2 && TO_TYPE == 4  */
1258*e4b17023SJohn Marino 
1259*e4b17023SJohn Marino /* Define conversions from floating-point to fixed-point.  */
1260*e4b17023SJohn Marino #if FROM_TYPE == 3 && TO_TYPE == 4
1261*e4b17023SJohn Marino 
1262*e4b17023SJohn Marino #define BASE1(NUM)	(0x1.0p ## NUM)
1263*e4b17023SJohn Marino #define BASE2(NUM)	BASE1(NUM)
1264*e4b17023SJohn Marino #define BASE		BASE2(TO_FBITS)
1265*e4b17023SJohn Marino 
1266*e4b17023SJohn Marino #define FIXED_MAX1(NUM1,NUM2)	(0x1.0p ## NUM1 - 0x1.0p- ## NUM2)
1267*e4b17023SJohn Marino #define FIXED_MAX2(NUM1,NUM2)	FIXED_MAX1(NUM1,NUM2)
1268*e4b17023SJohn Marino #define FIXED_MAX	FIXED_MAX2(TO_IBITS,TO_FBITS)
1269*e4b17023SJohn Marino 
1270*e4b17023SJohn Marino #define FIXED_MIN1(NUM)	(-0x1.0p ## NUM)
1271*e4b17023SJohn Marino #define FIXED_MIN2(NUM)	FIXED_MIN1(NUM)
1272*e4b17023SJohn Marino #if TO_MODE_UNSIGNED == 0
1273*e4b17023SJohn Marino #define FIXED_MIN	FIXED_MIN2(TO_IBITS)
1274*e4b17023SJohn Marino #else
1275*e4b17023SJohn Marino #define FIXED_MIN	0.0
1276*e4b17023SJohn Marino #endif
1277*e4b17023SJohn Marino 
1278*e4b17023SJohn Marino #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1279*e4b17023SJohn Marino #define SATFRACT	SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
1280*e4b17023SJohn Marino extern TO_FIXED_C_TYPE	FRACT (FROM_FLOAT_C_TYPE);
1281*e4b17023SJohn Marino extern TO_FIXED_C_TYPE	SATFRACT (FROM_FLOAT_C_TYPE);
1282*e4b17023SJohn Marino #endif /* FROM_TYPE == 3 && TO_TYPE == 4  */
1283*e4b17023SJohn Marino 
1284*e4b17023SJohn Marino #endif /* defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S)  */
1285*e4b17023SJohn Marino 
1286*e4b17023SJohn Marino #endif  /* _FIXED_BIT_H */
1287