xref: /netbsd-src/external/gpl3/gcc.old/dist/libgcc/fixed-bit.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
11debfc3dSmrg /* This is a software fixed-point library.
2*8feb0f0bSmrg    Copyright (C) 2007-2020 Free Software Foundation, Inc.
31debfc3dSmrg 
41debfc3dSmrg This file is part of GCC.
51debfc3dSmrg 
61debfc3dSmrg GCC is free software; you can redistribute it and/or modify it under
71debfc3dSmrg the terms of the GNU General Public License as published by the Free
81debfc3dSmrg Software Foundation; either version 3, or (at your option) any later
91debfc3dSmrg version.
101debfc3dSmrg 
111debfc3dSmrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
121debfc3dSmrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
131debfc3dSmrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
141debfc3dSmrg for more details.
151debfc3dSmrg 
161debfc3dSmrg Under Section 7 of GPL version 3, you are granted additional
171debfc3dSmrg permissions described in the GCC Runtime Library Exception, version
181debfc3dSmrg 3.1, as published by the Free Software Foundation.
191debfc3dSmrg 
201debfc3dSmrg You should have received a copy of the GNU General Public License and
211debfc3dSmrg a copy of the GCC Runtime Library Exception along with this program;
221debfc3dSmrg see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
231debfc3dSmrg <http://www.gnu.org/licenses/>.  */
241debfc3dSmrg 
251debfc3dSmrg #ifndef _FIXED_BIT_H
261debfc3dSmrg #define _FIXED_BIT_H
271debfc3dSmrg 
281debfc3dSmrg #ifdef LIBGCC2_GNU_PREFIX
291debfc3dSmrg #define LIBGCC2_FIXEDBIT_GNU_PREFIX
301debfc3dSmrg #endif
311debfc3dSmrg 
321debfc3dSmrg /* To use this file we need to define one of the following:
331debfc3dSmrg    QQ_MODE, UQQ_MODE, HQ_MODE, UHQ_MODE, SQ_MODE, USQ_MODE, DQ_MODE, UDQ_MODE,
341debfc3dSmrg    TQ_MODE, UTQ_MODE, HA_MODE, UHA_MODE, SA_MODE, USA_MODE, DA_MODE, UDA_MODE,
351debfc3dSmrg    TA_MODE, UTA_MODE.
361debfc3dSmrg    Then, all operators for this machine mode will be created.
371debfc3dSmrg 
381debfc3dSmrg    Or, we need to define FROM_* TO_* for conversions from one mode to another
391debfc3dSmrg    mode.  The mode could be one of the following:
401debfc3dSmrg    Fract: QQ, UQQ, HQ, UHQ, SQ, USQ, DQ, UDQ, TQ, UTQ
411debfc3dSmrg    Accum: HA, UHA, SA, USA, DA, UDA, TA, UTA
421debfc3dSmrg    Signed integer: QI, HI, SI, DI, TI
431debfc3dSmrg    Unsigned integer: UQI, UHI, USI, UDI, UTI
441debfc3dSmrg    Floating-point: SF, DF
451debfc3dSmrg    Ex: If we define FROM_QQ and TO_SI, the conversion from QQ to SI is
461debfc3dSmrg    generated.  */
471debfc3dSmrg 
481debfc3dSmrg #ifdef __LIBGCC_HAS_SF_MODE__
491debfc3dSmrg #define LIBGCC2_HAS_SF_MODE 1
501debfc3dSmrg #else
511debfc3dSmrg #define LIBGCC2_HAS_SF_MODE 0
521debfc3dSmrg #endif
531debfc3dSmrg 
541debfc3dSmrg #ifdef __LIBGCC_HAS_DF_MODE__
551debfc3dSmrg #define LIBGCC2_HAS_DF_MODE 1
561debfc3dSmrg #else
571debfc3dSmrg #define LIBGCC2_HAS_DF_MODE 0
581debfc3dSmrg #endif
591debfc3dSmrg 
601debfc3dSmrg typedef          int QItype     __attribute__ ((mode (QI)));
611debfc3dSmrg typedef unsigned int UQItype    __attribute__ ((mode (QI)));
621debfc3dSmrg typedef          int HItype     __attribute__ ((mode (HI)));
631debfc3dSmrg typedef unsigned int UHItype    __attribute__ ((mode (HI)));
641debfc3dSmrg typedef          _Fract QQtype  __attribute__ ((mode (QQ)));
651debfc3dSmrg typedef unsigned _Fract UQQtype __attribute__ ((mode (UQQ)));
661debfc3dSmrg typedef          _Fract HQtype  __attribute__ ((mode (HQ)));
671debfc3dSmrg typedef unsigned _Fract UHQtype __attribute__ ((mode (UHQ)));
681debfc3dSmrg typedef          _Fract HAtype  __attribute__ ((mode (HA)));
691debfc3dSmrg typedef unsigned _Fract UHAtype __attribute__ ((mode (UHA)));
701debfc3dSmrg #define HAVE_QQ		1
711debfc3dSmrg #define HAVE_UQQ	1
721debfc3dSmrg #define HAVE_HQ		1
731debfc3dSmrg #define HAVE_UHQ	1
741debfc3dSmrg #define HAVE_HA		1
751debfc3dSmrg #define HAVE_UHA	1
761debfc3dSmrg #define HAVE_QI		1
771debfc3dSmrg #define HAVE_UQI	1
781debfc3dSmrg #define HAVE_HI		1
791debfc3dSmrg #define HAVE_UHI	1
801debfc3dSmrg #if MIN_UNITS_PER_WORD > 1
811debfc3dSmrg /* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1.  */
821debfc3dSmrg typedef          int SItype     __attribute__ ((mode (SI)));
831debfc3dSmrg typedef unsigned int USItype    __attribute__ ((mode (SI)));
841debfc3dSmrg typedef          _Fract SQtype  __attribute__ ((mode (SQ)));
851debfc3dSmrg typedef unsigned _Fract USQtype __attribute__ ((mode (USQ)));
861debfc3dSmrg typedef          _Fract SAtype  __attribute__ ((mode (SA)));
871debfc3dSmrg typedef unsigned _Fract USAtype __attribute__ ((mode (USA)));
881debfc3dSmrg #define HAVE_SQ		1
891debfc3dSmrg #define HAVE_USQ	1
901debfc3dSmrg #define HAVE_SA		1
911debfc3dSmrg #define HAVE_USA	1
921debfc3dSmrg #define HAVE_SI		1
931debfc3dSmrg #define HAVE_USI	1
941debfc3dSmrg #if LONG_LONG_TYPE_SIZE > 32
951debfc3dSmrg /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2.  */
961debfc3dSmrg typedef          int DItype     __attribute__ ((mode (DI)));
971debfc3dSmrg typedef unsigned int UDItype    __attribute__ ((mode (DI)));
981debfc3dSmrg typedef          _Fract DQtype  __attribute__ ((mode (DQ)));
991debfc3dSmrg typedef unsigned _Fract UDQtype __attribute__ ((mode (UDQ)));
1001debfc3dSmrg typedef          _Fract DAtype  __attribute__ ((mode (DA)));
1011debfc3dSmrg typedef unsigned _Fract UDAtype __attribute__ ((mode (UDA)));
1021debfc3dSmrg #define HAVE_DQ		1
1031debfc3dSmrg #define HAVE_UDQ	1
1041debfc3dSmrg #define HAVE_DA		1
1051debfc3dSmrg #define HAVE_UDA	1
1061debfc3dSmrg #define HAVE_DI		1
1071debfc3dSmrg #define HAVE_UDI	1
1081debfc3dSmrg #if MIN_UNITS_PER_WORD > 4
1091debfc3dSmrg /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4.  */
1101debfc3dSmrg typedef          int TItype     __attribute__ ((mode (TI)));
1111debfc3dSmrg typedef unsigned int UTItype    __attribute__ ((mode (TI)));
1121debfc3dSmrg typedef          _Fract TQtype  __attribute__ ((mode (TQ)));
1131debfc3dSmrg typedef unsigned _Fract UTQtype __attribute__ ((mode (UTQ)));
1141debfc3dSmrg typedef          _Fract TAtype  __attribute__ ((mode (TA)));
1151debfc3dSmrg typedef unsigned _Fract UTAtype __attribute__ ((mode (UTA)));
1161debfc3dSmrg #define HAVE_TQ		1
1171debfc3dSmrg #define HAVE_UTQ	1
1181debfc3dSmrg #define HAVE_TA		1
1191debfc3dSmrg #define HAVE_UTA	1
1201debfc3dSmrg #define HAVE_TI		1
1211debfc3dSmrg #define HAVE_UTI	1
1221debfc3dSmrg #endif
1231debfc3dSmrg #endif
1241debfc3dSmrg #endif
1251debfc3dSmrg 
1261debfc3dSmrg #if LIBGCC2_HAS_SF_MODE
1271debfc3dSmrg typedef float SFtype __attribute__ ((mode (SF)));
1281debfc3dSmrg #define HAVE_SF		1
1291debfc3dSmrg #endif
1301debfc3dSmrg #if LIBGCC2_HAS_DF_MODE
1311debfc3dSmrg typedef float DFtype __attribute__ ((mode (DF)));
1321debfc3dSmrg #define HAVE_DF		1
1331debfc3dSmrg #endif
1341debfc3dSmrg 
1351debfc3dSmrg typedef int word_type __attribute__ ((mode (__word__)));
1361debfc3dSmrg 
1371debfc3dSmrg /* Based on modes, we create many defines.  */
1381debfc3dSmrg 
1391debfc3dSmrg #if defined (QQ_MODE) && (HAVE_QQ == 1)
1401debfc3dSmrg #define FIXED_SIZE	1	/* in bytes.  */
1411debfc3dSmrg #define INT_C_TYPE	QItype
1421debfc3dSmrg #define UINT_C_TYPE	UQItype
1431debfc3dSmrg #define DINT_C_TYPE	HItype
1441debfc3dSmrg #define DUINT_C_TYPE	UHItype
1451debfc3dSmrg #define MODE_NAME	QQ
1461debfc3dSmrg #define MODE_NAME_S	qq
1471debfc3dSmrg #define MODE_UNSIGNED	0
1481debfc3dSmrg #endif
1491debfc3dSmrg 
1501debfc3dSmrg #if defined (UQQ_MODE) && (HAVE_UQQ == 1)
1511debfc3dSmrg #define FIXED_SIZE	1	/* in bytes.  */
1521debfc3dSmrg #define INT_C_TYPE	UQItype
1531debfc3dSmrg #define UINT_C_TYPE	UQItype
1541debfc3dSmrg #define DINT_C_TYPE	UHItype
1551debfc3dSmrg #define DUINT_C_TYPE	UHItype
1561debfc3dSmrg #define MODE_NAME	UQQ
1571debfc3dSmrg #define MODE_NAME_S	uqq
1581debfc3dSmrg #define MODE_UNSIGNED	1
1591debfc3dSmrg #endif
1601debfc3dSmrg 
1611debfc3dSmrg #if defined (HQ_MODE) && (HAVE_HQ == 1)
1621debfc3dSmrg #define FIXED_SIZE	2	/* in bytes.  */
1631debfc3dSmrg #define INT_C_TYPE	HItype
1641debfc3dSmrg #define UINT_C_TYPE	UHItype
1651debfc3dSmrg 
1661debfc3dSmrg #if HAVE_SI == 1
1671debfc3dSmrg #define DINT_C_TYPE	SItype
1681debfc3dSmrg #define DUINT_C_TYPE	USItype
1691debfc3dSmrg #else
1701debfc3dSmrg #define HINT_C_TYPE	QItype
1711debfc3dSmrg #define HUINT_C_TYPE	UQItype
1721debfc3dSmrg #endif
1731debfc3dSmrg 
1741debfc3dSmrg #define MODE_NAME	HQ
1751debfc3dSmrg #define MODE_NAME_S	hq
1761debfc3dSmrg #define MODE_UNSIGNED	0
1771debfc3dSmrg #endif
1781debfc3dSmrg 
1791debfc3dSmrg #if defined (UHQ_MODE) && (HAVE_UHQ == 1)
1801debfc3dSmrg #define FIXED_SIZE	2	/* in bytes.  */
1811debfc3dSmrg #define INT_C_TYPE	UHItype
1821debfc3dSmrg #define UINT_C_TYPE	UHItype
1831debfc3dSmrg 
1841debfc3dSmrg #if HAVE_SI == 1
1851debfc3dSmrg #define DINT_C_TYPE	USItype
1861debfc3dSmrg #define DUINT_C_TYPE	USItype
1871debfc3dSmrg #else
1881debfc3dSmrg #define HINT_C_TYPE	UQItype
1891debfc3dSmrg #define HUINT_C_TYPE	UQItype
1901debfc3dSmrg #endif
1911debfc3dSmrg 
1921debfc3dSmrg #define MODE_NAME	UHQ
1931debfc3dSmrg #define MODE_NAME_S	uhq
1941debfc3dSmrg #define MODE_UNSIGNED	1
1951debfc3dSmrg #endif
1961debfc3dSmrg 
1971debfc3dSmrg #if defined (SQ_MODE) && (HAVE_SQ == 1)
1981debfc3dSmrg #define FIXED_SIZE	4	/* in bytes.  */
1991debfc3dSmrg #define INT_C_TYPE	SItype
2001debfc3dSmrg #define UINT_C_TYPE	USItype
2011debfc3dSmrg 
2021debfc3dSmrg #if HAVE_DI == 1
2031debfc3dSmrg #define DINT_C_TYPE	DItype
2041debfc3dSmrg #define DUINT_C_TYPE	UDItype
2051debfc3dSmrg #else
2061debfc3dSmrg #define HINT_C_TYPE	HItype
2071debfc3dSmrg #define HUINT_C_TYPE	UHItype
2081debfc3dSmrg #endif
2091debfc3dSmrg 
2101debfc3dSmrg #define MODE_NAME	SQ
2111debfc3dSmrg #define MODE_NAME_S	sq
2121debfc3dSmrg #define MODE_UNSIGNED	0
2131debfc3dSmrg #endif
2141debfc3dSmrg 
2151debfc3dSmrg #if defined (USQ_MODE) && (HAVE_USQ == 1)
2161debfc3dSmrg #define FIXED_SIZE	4	/* in bytes.  */
2171debfc3dSmrg #define INT_C_TYPE	USItype
2181debfc3dSmrg #define UINT_C_TYPE	USItype
2191debfc3dSmrg 
2201debfc3dSmrg #if HAVE_DI == 1
2211debfc3dSmrg #define DINT_C_TYPE	UDItype
2221debfc3dSmrg #define DUINT_C_TYPE	UDItype
2231debfc3dSmrg #else
2241debfc3dSmrg #define HINT_C_TYPE	UHItype
2251debfc3dSmrg #define HUINT_C_TYPE	UHItype
2261debfc3dSmrg #endif
2271debfc3dSmrg 
2281debfc3dSmrg #define MODE_NAME	USQ
2291debfc3dSmrg #define MODE_NAME_S	usq
2301debfc3dSmrg #define MODE_UNSIGNED	1
2311debfc3dSmrg #endif
2321debfc3dSmrg 
2331debfc3dSmrg #if defined (DQ_MODE) && (HAVE_DQ == 1)
2341debfc3dSmrg #define FIXED_SIZE	8	/* in bytes.  */
2351debfc3dSmrg #define INT_C_TYPE	DItype
2361debfc3dSmrg #define UINT_C_TYPE	UDItype
2371debfc3dSmrg 
2381debfc3dSmrg #if HAVE_TI == 1
2391debfc3dSmrg #define DINT_C_TYPE	TItype
2401debfc3dSmrg #define DUINT_C_TYPE	UTItype
2411debfc3dSmrg #else
2421debfc3dSmrg #define HINT_C_TYPE	SItype
2431debfc3dSmrg #define HUINT_C_TYPE	USItype
2441debfc3dSmrg #endif
2451debfc3dSmrg 
2461debfc3dSmrg #define MODE_NAME	DQ
2471debfc3dSmrg #define MODE_NAME_S	dq
2481debfc3dSmrg #define MODE_UNSIGNED	0
2491debfc3dSmrg #endif
2501debfc3dSmrg 
2511debfc3dSmrg #if defined (UDQ_MODE) && (HAVE_UDQ == 1)
2521debfc3dSmrg #define FIXED_SIZE	8	/* in bytes.  */
2531debfc3dSmrg #define INT_C_TYPE	UDItype
2541debfc3dSmrg #define UINT_C_TYPE	UDItype
2551debfc3dSmrg 
2561debfc3dSmrg #if HAVE_TI == 1
2571debfc3dSmrg #define DINT_C_TYPE	UTItype
2581debfc3dSmrg #define DUINT_C_TYPE	UTItype
2591debfc3dSmrg #else
2601debfc3dSmrg #define HINT_C_TYPE	USItype
2611debfc3dSmrg #define HUINT_C_TYPE	USItype
2621debfc3dSmrg #endif
2631debfc3dSmrg 
2641debfc3dSmrg #define MODE_NAME	UDQ
2651debfc3dSmrg #define MODE_NAME_S	udq
2661debfc3dSmrg #define MODE_UNSIGNED	1
2671debfc3dSmrg #endif
2681debfc3dSmrg 
2691debfc3dSmrg #if defined (TQ_MODE) && (HAVE_TQ == 1)
2701debfc3dSmrg #define FIXED_SIZE	16	/* in bytes.  */
2711debfc3dSmrg #define INT_C_TYPE	TItype
2721debfc3dSmrg #define UINT_C_TYPE	UTItype
2731debfc3dSmrg #define HINT_C_TYPE	DItype
2741debfc3dSmrg #define HUINT_C_TYPE	UDItype
2751debfc3dSmrg #define MODE_NAME	TQ
2761debfc3dSmrg #define MODE_NAME_S	tq
2771debfc3dSmrg #define MODE_UNSIGNED	0
2781debfc3dSmrg #endif
2791debfc3dSmrg 
2801debfc3dSmrg #if defined (UTQ_MODE) && (HAVE_UTQ == 1)
2811debfc3dSmrg #define FIXED_SIZE	16	/* in bytes.  */
2821debfc3dSmrg #define INT_C_TYPE	UTItype
2831debfc3dSmrg #define UINT_C_TYPE	UTItype
2841debfc3dSmrg #define HINT_C_TYPE	UDItype
2851debfc3dSmrg #define HUINT_C_TYPE	UDItype
2861debfc3dSmrg #define MODE_NAME	UTQ
2871debfc3dSmrg #define MODE_NAME_S	utq
2881debfc3dSmrg #define MODE_UNSIGNED	1
2891debfc3dSmrg #endif
2901debfc3dSmrg 
2911debfc3dSmrg #if defined (HA_MODE) && (HAVE_HA == 1)
2921debfc3dSmrg #define FIXED_SIZE	2	/* in bytes.  */
2931debfc3dSmrg #define INT_C_TYPE	HItype
2941debfc3dSmrg #define UINT_C_TYPE	UHItype
2951debfc3dSmrg 
2961debfc3dSmrg #if HAVE_SI == 1
2971debfc3dSmrg #define DINT_C_TYPE	SItype
2981debfc3dSmrg #define DUINT_C_TYPE	USItype
2991debfc3dSmrg #else
3001debfc3dSmrg #define HINT_C_TYPE	QItype
3011debfc3dSmrg #define HUINT_C_TYPE	UQItype
3021debfc3dSmrg #endif
3031debfc3dSmrg 
3041debfc3dSmrg #define MODE_NAME	HA
3051debfc3dSmrg #define MODE_NAME_S	ha
3061debfc3dSmrg #define MODE_UNSIGNED	0
3071debfc3dSmrg #endif
3081debfc3dSmrg 
3091debfc3dSmrg #if defined (UHA_MODE) && (HAVE_UHA == 1)
3101debfc3dSmrg #define FIXED_SIZE	2	/* in bytes.  */
3111debfc3dSmrg #define INT_C_TYPE	UHItype
3121debfc3dSmrg #define UINT_C_TYPE	UHItype
3131debfc3dSmrg 
3141debfc3dSmrg #if HAVE_SI == 1
3151debfc3dSmrg #define DINT_C_TYPE	USItype
3161debfc3dSmrg #define DUINT_C_TYPE	USItype
3171debfc3dSmrg #else
3181debfc3dSmrg #define HINT_C_TYPE	UQItype
3191debfc3dSmrg #define HUINT_C_TYPE	UQItype
3201debfc3dSmrg #endif
3211debfc3dSmrg 
3221debfc3dSmrg #define MODE_NAME	UHA
3231debfc3dSmrg #define MODE_NAME_S	uha
3241debfc3dSmrg #define MODE_UNSIGNED	1
3251debfc3dSmrg #endif
3261debfc3dSmrg 
3271debfc3dSmrg #if defined (SA_MODE) && (HAVE_SA == 1)
3281debfc3dSmrg #define FIXED_SIZE	4	/* in bytes.  */
3291debfc3dSmrg #define INT_C_TYPE	SItype
3301debfc3dSmrg #define UINT_C_TYPE	USItype
3311debfc3dSmrg 
3321debfc3dSmrg #if HAVE_DI == 1
3331debfc3dSmrg #define DINT_C_TYPE	DItype
3341debfc3dSmrg #define DUINT_C_TYPE	UDItype
3351debfc3dSmrg #else
3361debfc3dSmrg #define HINT_C_TYPE	HItype
3371debfc3dSmrg #define HUINT_C_TYPE	UHItype
3381debfc3dSmrg #endif
3391debfc3dSmrg 
3401debfc3dSmrg #define MODE_NAME	SA
3411debfc3dSmrg #define MODE_NAME_S	sa
3421debfc3dSmrg #define MODE_UNSIGNED	0
3431debfc3dSmrg #endif
3441debfc3dSmrg 
3451debfc3dSmrg #if defined (USA_MODE) && (HAVE_USA == 1)
3461debfc3dSmrg #define FIXED_SIZE	4	/* in bytes.  */
3471debfc3dSmrg #define INT_C_TYPE	USItype
3481debfc3dSmrg #define UINT_C_TYPE	USItype
3491debfc3dSmrg 
3501debfc3dSmrg #if HAVE_DI == 1
3511debfc3dSmrg #define DINT_C_TYPE	UDItype
3521debfc3dSmrg #define DUINT_C_TYPE	UDItype
3531debfc3dSmrg #else
3541debfc3dSmrg #define HINT_C_TYPE	UHItype
3551debfc3dSmrg #define HUINT_C_TYPE	UHItype
3561debfc3dSmrg #endif
3571debfc3dSmrg 
3581debfc3dSmrg #define MODE_NAME	USA
3591debfc3dSmrg #define MODE_NAME_S	usa
3601debfc3dSmrg #define MODE_UNSIGNED	1
3611debfc3dSmrg #endif
3621debfc3dSmrg 
3631debfc3dSmrg #if defined (DA_MODE) && (HAVE_DA == 1)
3641debfc3dSmrg #define FIXED_SIZE	8	/* in bytes.  */
3651debfc3dSmrg #define INT_C_TYPE	DItype
3661debfc3dSmrg #define UINT_C_TYPE	UDItype
3671debfc3dSmrg 
3681debfc3dSmrg #if HAVE_TI == 1
3691debfc3dSmrg #define DINT_C_TYPE	TItype
3701debfc3dSmrg #define DUINT_C_TYPE	UTItype
3711debfc3dSmrg #else
3721debfc3dSmrg #define HINT_C_TYPE	SItype
3731debfc3dSmrg #define HUINT_C_TYPE	USItype
3741debfc3dSmrg #endif
3751debfc3dSmrg 
3761debfc3dSmrg #define MODE_NAME	DA
3771debfc3dSmrg #define MODE_NAME_S	da
3781debfc3dSmrg #define MODE_UNSIGNED	0
3791debfc3dSmrg #endif
3801debfc3dSmrg 
3811debfc3dSmrg #if defined (UDA_MODE) && (HAVE_UDA == 1)
3821debfc3dSmrg #define FIXED_SIZE	8	/* in bytes.  */
3831debfc3dSmrg #define INT_C_TYPE	UDItype
3841debfc3dSmrg #define UINT_C_TYPE	UDItype
3851debfc3dSmrg 
3861debfc3dSmrg #if HAVE_TI == 1
3871debfc3dSmrg #define DINT_C_TYPE	UTItype
3881debfc3dSmrg #define DUINT_C_TYPE	UTItype
3891debfc3dSmrg #else
3901debfc3dSmrg #define HINT_C_TYPE	USItype
3911debfc3dSmrg #define HUINT_C_TYPE	USItype
3921debfc3dSmrg #endif
3931debfc3dSmrg 
3941debfc3dSmrg #define MODE_NAME	UDA
3951debfc3dSmrg #define MODE_NAME_S	uda
3961debfc3dSmrg #define MODE_UNSIGNED	1
3971debfc3dSmrg #endif
3981debfc3dSmrg 
3991debfc3dSmrg #if defined (TA_MODE) && (HAVE_TA == 1)
4001debfc3dSmrg #define FIXED_SIZE	16	/* in bytes.  */
4011debfc3dSmrg #define INT_C_TYPE	TItype
4021debfc3dSmrg #define UINT_C_TYPE	UTItype
4031debfc3dSmrg #define HINT_C_TYPE	DItype
4041debfc3dSmrg #define HUINT_C_TYPE	UDItype
4051debfc3dSmrg #define MODE_NAME	TA
4061debfc3dSmrg #define MODE_NAME_S	ta
4071debfc3dSmrg #define MODE_UNSIGNED	0
4081debfc3dSmrg #endif
4091debfc3dSmrg 
4101debfc3dSmrg #if defined (UTA_MODE) && (HAVE_UTA == 1)
4111debfc3dSmrg #define FIXED_SIZE	16	/* in bytes.  */
4121debfc3dSmrg #define INT_C_TYPE	UTItype
4131debfc3dSmrg #define UINT_C_TYPE	UTItype
4141debfc3dSmrg #define HINT_C_TYPE	UDItype
4151debfc3dSmrg #define HUINT_C_TYPE	UDItype
4161debfc3dSmrg #define MODE_NAME	UTA
4171debfc3dSmrg #define MODE_NAME_S	uta
4181debfc3dSmrg #define MODE_UNSIGNED	1
4191debfc3dSmrg #endif
4201debfc3dSmrg 
4211debfc3dSmrg /* The following defines are based on the previous defines.  */
4221debfc3dSmrg 
4231debfc3dSmrg #if defined (HINT_C_TYPE)
4241debfc3dSmrg #if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
4251debfc3dSmrg   struct INTstruct {HINT_C_TYPE high, low;};
4261debfc3dSmrg #else
4271debfc3dSmrg   struct INTstruct {HINT_C_TYPE low, high;};
4281debfc3dSmrg #endif
4291debfc3dSmrg 
4301debfc3dSmrg typedef union
4311debfc3dSmrg {
4321debfc3dSmrg   struct INTstruct s;
4331debfc3dSmrg   INT_C_TYPE ll;
4341debfc3dSmrg } INTunion;
4351debfc3dSmrg #endif
4361debfc3dSmrg 
4371debfc3dSmrg #define FIXED_WIDTH	(FIXED_SIZE * __CHAR_BIT__) /* in bits.  */
4381debfc3dSmrg #define FIXED_C_TYPE1(NAME)	NAME ## type
4391debfc3dSmrg #define FIXED_C_TYPE2(NAME)	FIXED_C_TYPE1(NAME)
4401debfc3dSmrg #define FIXED_C_TYPE	FIXED_C_TYPE2(MODE_NAME)
4411debfc3dSmrg #define FBITS1(NAME)	__ ## NAME ## _FBIT__
4421debfc3dSmrg #define FBITS2(NAME)	FBITS1(NAME)
4431debfc3dSmrg #define FBITS		FBITS2(MODE_NAME)
4441debfc3dSmrg #define IBITS1(NAME)	__ ## NAME ## _IBIT__
4451debfc3dSmrg #define IBITS2(NAME)	IBITS1(NAME)
4461debfc3dSmrg #define IBITS		IBITS2(MODE_NAME)
4471debfc3dSmrg #define I_F_BITS	(FBITS + IBITS)
4481debfc3dSmrg 
4491debfc3dSmrg #ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX
4501debfc3dSmrg #define FIXED_OP(OP,MODE,NUM)	__gnu_ ## OP ## MODE ## NUM
4511debfc3dSmrg #else
4521debfc3dSmrg #define FIXED_OP(OP,MODE,NUM)	__ ## OP ## MODE ## NUM
4531debfc3dSmrg #endif
4541debfc3dSmrg 
4551debfc3dSmrg #define FIXED_SATURATE1_TEMP(NAME)	FIXED_OP(saturate1,NAME,)
4561debfc3dSmrg #define FIXED_SATURATE2_TEMP(NAME)	FIXED_OP(saturate2,NAME,)
4571debfc3dSmrg #define FIXED_MULHELPER_TEMP(NAME)	FIXED_OP(mulhelper,NAME,)
4581debfc3dSmrg #define FIXED_DIVHELPER_TEMP(NAME)	FIXED_OP(divhelper,NAME,)
4591debfc3dSmrg #define FIXED_ASHLHELPER_TEMP(NAME)	FIXED_OP(ashlhelper,NAME,)
4601debfc3dSmrg #define FIXED_ADD_TEMP(NAME)	FIXED_OP(add,NAME,3)
4611debfc3dSmrg #define FIXED_SSADD_TEMP(NAME)	FIXED_OP(ssadd,NAME,3)
4621debfc3dSmrg #define FIXED_USADD_TEMP(NAME)	FIXED_OP(usadd,NAME,3)
4631debfc3dSmrg #define FIXED_SUB_TEMP(NAME)	FIXED_OP(sub,NAME,3)
4641debfc3dSmrg #define FIXED_SSSUB_TEMP(NAME)	FIXED_OP(sssub,NAME,3)
4651debfc3dSmrg #define FIXED_USSUB_TEMP(NAME)	FIXED_OP(ussub,NAME,3)
4661debfc3dSmrg #define FIXED_MUL_TEMP(NAME)	FIXED_OP(mul,NAME,3)
4671debfc3dSmrg #define FIXED_SSMUL_TEMP(NAME)	FIXED_OP(ssmul,NAME,3)
4681debfc3dSmrg #define FIXED_USMUL_TEMP(NAME)	FIXED_OP(usmul,NAME,3)
4691debfc3dSmrg #define FIXED_DIV_TEMP(NAME)	FIXED_OP(div,NAME,3)
4701debfc3dSmrg #define FIXED_UDIV_TEMP(NAME)	FIXED_OP(udiv,NAME,3)
4711debfc3dSmrg #define FIXED_SSDIV_TEMP(NAME)	FIXED_OP(ssdiv,NAME,3)
4721debfc3dSmrg #define FIXED_USDIV_TEMP(NAME)	FIXED_OP(usdiv,NAME,3)
4731debfc3dSmrg #define FIXED_NEG_TEMP(NAME)	FIXED_OP(neg,NAME,2)
4741debfc3dSmrg #define FIXED_SSNEG_TEMP(NAME)	FIXED_OP(ssneg,NAME,2)
4751debfc3dSmrg #define FIXED_USNEG_TEMP(NAME)	FIXED_OP(usneg,NAME,2)
4761debfc3dSmrg #define FIXED_ASHL_TEMP(NAME)	FIXED_OP(ashl,NAME,3)
4771debfc3dSmrg #define FIXED_ASHR_TEMP(NAME)	FIXED_OP(ashr,NAME,3)
4781debfc3dSmrg #define FIXED_LSHR_TEMP(NAME)	FIXED_OP(lshr,NAME,3)
4791debfc3dSmrg #define FIXED_SSASHL_TEMP(NAME)	FIXED_OP(ssashl,NAME,3)
4801debfc3dSmrg #define FIXED_USASHL_TEMP(NAME)	FIXED_OP(usashl,NAME,3)
4811debfc3dSmrg #define FIXED_CMP_TEMP(NAME)	FIXED_OP(cmp,NAME,2)
4821debfc3dSmrg 
4831debfc3dSmrg #if defined (MODE_NAME)
4841debfc3dSmrg #if defined (DINT_C_TYPE)
4851debfc3dSmrg #define FIXED_SATURATE1	FIXED_SATURATE1_TEMP(MODE_NAME_S)
4861debfc3dSmrg #else
4871debfc3dSmrg #define FIXED_SATURATE2	FIXED_SATURATE2_TEMP(MODE_NAME_S)
4881debfc3dSmrg #endif
4891debfc3dSmrg #define FIXED_MULHELPER	FIXED_MULHELPER_TEMP(MODE_NAME_S)
4901debfc3dSmrg #define FIXED_DIVHELPER	FIXED_DIVHELPER_TEMP(MODE_NAME_S)
4911debfc3dSmrg #define FIXED_ASHLHELPER	FIXED_ASHLHELPER_TEMP(MODE_NAME_S)
4921debfc3dSmrg #define FIXED_ADD	FIXED_ADD_TEMP(MODE_NAME_S)
4931debfc3dSmrg #define FIXED_SUB	FIXED_SUB_TEMP(MODE_NAME_S)
4941debfc3dSmrg #define FIXED_MUL	FIXED_MUL_TEMP(MODE_NAME_S)
4951debfc3dSmrg #define FIXED_NEG	FIXED_NEG_TEMP(MODE_NAME_S)
4961debfc3dSmrg #define FIXED_ASHL	FIXED_ASHL_TEMP(MODE_NAME_S)
4971debfc3dSmrg #define FIXED_CMP	FIXED_CMP_TEMP(MODE_NAME_S)
4981debfc3dSmrg 
4991debfc3dSmrg /* The following functions are for all fixed-point modes.  */
5001debfc3dSmrg #if defined (DINT_C_TYPE)
5011debfc3dSmrg extern void FIXED_SATURATE1 (DINT_C_TYPE *);
5021debfc3dSmrg #else
5031debfc3dSmrg extern void FIXED_SATURATE2 (INT_C_TYPE *, INT_C_TYPE *);
5041debfc3dSmrg #endif
5051debfc3dSmrg extern FIXED_C_TYPE FIXED_MULHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type);
5061debfc3dSmrg extern FIXED_C_TYPE FIXED_DIVHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type);
5071debfc3dSmrg extern FIXED_C_TYPE FIXED_ASHLHELPER (FIXED_C_TYPE, word_type, word_type);
5081debfc3dSmrg extern FIXED_C_TYPE FIXED_ADD (FIXED_C_TYPE, FIXED_C_TYPE);
5091debfc3dSmrg extern FIXED_C_TYPE FIXED_SUB (FIXED_C_TYPE, FIXED_C_TYPE);
5101debfc3dSmrg extern FIXED_C_TYPE FIXED_MUL (FIXED_C_TYPE, FIXED_C_TYPE);
5111debfc3dSmrg extern FIXED_C_TYPE FIXED_NEG (FIXED_C_TYPE);
5121debfc3dSmrg extern FIXED_C_TYPE FIXED_ASHL (FIXED_C_TYPE, word_type);
5131debfc3dSmrg extern word_type FIXED_CMP (FIXED_C_TYPE, FIXED_C_TYPE);
5141debfc3dSmrg #endif
5151debfc3dSmrg 
5161debfc3dSmrg #if MODE_UNSIGNED == 0 /* Signed types.  */
5171debfc3dSmrg #define PADDING_BITS	(FIXED_WIDTH - 1 - I_F_BITS)
5181debfc3dSmrg #define NONPADDING_BITS	(1 + I_F_BITS)
5191debfc3dSmrg 
5201debfc3dSmrg #if defined (MODE_NAME)
5211debfc3dSmrg #define FIXED_DIV	FIXED_DIV_TEMP(MODE_NAME_S)
5221debfc3dSmrg #define FIXED_ASHR	FIXED_ASHR_TEMP(MODE_NAME_S)
5231debfc3dSmrg #define FIXED_SSADD	FIXED_SSADD_TEMP(MODE_NAME_S)
5241debfc3dSmrg #define FIXED_SSSUB	FIXED_SSSUB_TEMP(MODE_NAME_S)
5251debfc3dSmrg #define FIXED_SSMUL	FIXED_SSMUL_TEMP(MODE_NAME_S)
5261debfc3dSmrg #define FIXED_SSDIV	FIXED_SSDIV_TEMP(MODE_NAME_S)
5271debfc3dSmrg #define FIXED_SSNEG	FIXED_SSNEG_TEMP(MODE_NAME_S)
5281debfc3dSmrg #define FIXED_SSASHL	FIXED_SSASHL_TEMP(MODE_NAME_S)
5291debfc3dSmrg 
5301debfc3dSmrg /* The following functions are for signed fixed-point modes.  */
5311debfc3dSmrg extern FIXED_C_TYPE FIXED_DIV (FIXED_C_TYPE, FIXED_C_TYPE);
5321debfc3dSmrg extern FIXED_C_TYPE FIXED_ASHR (FIXED_C_TYPE, word_type);
5331debfc3dSmrg extern FIXED_C_TYPE FIXED_SSADD (FIXED_C_TYPE, FIXED_C_TYPE);
5341debfc3dSmrg extern FIXED_C_TYPE FIXED_SSSUB (FIXED_C_TYPE, FIXED_C_TYPE);
5351debfc3dSmrg extern FIXED_C_TYPE FIXED_SSMUL (FIXED_C_TYPE, FIXED_C_TYPE);
5361debfc3dSmrg extern FIXED_C_TYPE FIXED_SSDIV (FIXED_C_TYPE, FIXED_C_TYPE);
5371debfc3dSmrg extern FIXED_C_TYPE FIXED_SSNEG (FIXED_C_TYPE);
5381debfc3dSmrg extern FIXED_C_TYPE FIXED_SSASHL (FIXED_C_TYPE, word_type);
5391debfc3dSmrg #endif
5401debfc3dSmrg 
5411debfc3dSmrg #else /* Unsigned types.  */
5421debfc3dSmrg #define PADDING_BITS	(FIXED_WIDTH - I_F_BITS)
5431debfc3dSmrg #define NONPADDING_BITS	(I_F_BITS)
5441debfc3dSmrg 
5451debfc3dSmrg #if defined (MODE_NAME)
5461debfc3dSmrg #define FIXED_UDIV	FIXED_UDIV_TEMP(MODE_NAME_S)
5471debfc3dSmrg #define FIXED_LSHR	FIXED_LSHR_TEMP(MODE_NAME_S)
5481debfc3dSmrg #define FIXED_USDIV	FIXED_USDIV_TEMP(MODE_NAME_S)
5491debfc3dSmrg #define FIXED_USADD	FIXED_USADD_TEMP(MODE_NAME_S)
5501debfc3dSmrg #define FIXED_USSUB	FIXED_USSUB_TEMP(MODE_NAME_S)
5511debfc3dSmrg #define FIXED_USMUL	FIXED_USMUL_TEMP(MODE_NAME_S)
5521debfc3dSmrg #define FIXED_USNEG	FIXED_USNEG_TEMP(MODE_NAME_S)
5531debfc3dSmrg #define FIXED_USASHL	FIXED_USASHL_TEMP(MODE_NAME_S)
5541debfc3dSmrg 
5551debfc3dSmrg /* The following functions are for unsigned fixed-point modes.  */
5561debfc3dSmrg extern FIXED_C_TYPE FIXED_UDIV (FIXED_C_TYPE, FIXED_C_TYPE);
5571debfc3dSmrg extern FIXED_C_TYPE FIXED_LSHR (FIXED_C_TYPE, word_type);
5581debfc3dSmrg extern FIXED_C_TYPE FIXED_USADD (FIXED_C_TYPE, FIXED_C_TYPE);
5591debfc3dSmrg extern FIXED_C_TYPE FIXED_USSUB (FIXED_C_TYPE, FIXED_C_TYPE);
5601debfc3dSmrg extern FIXED_C_TYPE FIXED_USMUL (FIXED_C_TYPE, FIXED_C_TYPE);
5611debfc3dSmrg extern FIXED_C_TYPE FIXED_USDIV (FIXED_C_TYPE, FIXED_C_TYPE);
5621debfc3dSmrg extern FIXED_C_TYPE FIXED_USNEG (FIXED_C_TYPE);
5631debfc3dSmrg extern FIXED_C_TYPE FIXED_USASHL (FIXED_C_TYPE, word_type);
5641debfc3dSmrg #endif
5651debfc3dSmrg 
5661debfc3dSmrg #endif /* End of testing MODE_UNSIGNED.  */
5671debfc3dSmrg 
5681debfc3dSmrg /* This define is to check if this mode have any padding bits.  */
5691debfc3dSmrg #define HAVE_PADDING_BITS	(PADDING_BITS > 0)
5701debfc3dSmrg 
5711debfc3dSmrg /* ------------------------------------------------------------------------ */
5721debfc3dSmrg /* The following defines are for conversions.  */
5731debfc3dSmrg 
5741debfc3dSmrg #if defined (FROM_QI) && HAVE_QI == 1
5751debfc3dSmrg #define FROM_TYPE		1	/* Signed integer.  */
5761debfc3dSmrg #define FROM_INT_C_TYPE		QItype
5771debfc3dSmrg #define FROM_SINT_C_TYPE	QItype
5781debfc3dSmrg #define FROM_UINT_C_TYPE	UQItype
5791debfc3dSmrg #define FROM_MODE_NAME_S	qi
5801debfc3dSmrg #define FROM_INT_SIZE		1	/* in bytes.  */
5811debfc3dSmrg 
5821debfc3dSmrg #elif defined (FROM_HI) && HAVE_HI == 1
5831debfc3dSmrg #define FROM_TYPE		1	/* Signed integer.  */
5841debfc3dSmrg #define FROM_INT_C_TYPE		HItype
5851debfc3dSmrg #define FROM_SINT_C_TYPE	HItype
5861debfc3dSmrg #define FROM_UINT_C_TYPE	UHItype
5871debfc3dSmrg #define FROM_MODE_NAME_S	hi
5881debfc3dSmrg #define FROM_INT_SIZE		2	/* in bytes.  */
5891debfc3dSmrg 
5901debfc3dSmrg #elif defined (FROM_SI) && HAVE_SI == 1
5911debfc3dSmrg #define FROM_TYPE		1	/* Signed integer.  */
5921debfc3dSmrg #define FROM_INT_C_TYPE		SItype
5931debfc3dSmrg #define FROM_SINT_C_TYPE	SItype
5941debfc3dSmrg #define FROM_UINT_C_TYPE	USItype
5951debfc3dSmrg #define FROM_MODE_NAME_S	si
5961debfc3dSmrg #define FROM_INT_SIZE		4	/* in bytes.  */
5971debfc3dSmrg 
5981debfc3dSmrg #elif defined (FROM_DI) && HAVE_DI == 1
5991debfc3dSmrg #define FROM_TYPE		1	/* Signed integer.  */
6001debfc3dSmrg #define FROM_INT_C_TYPE		DItype
6011debfc3dSmrg #define FROM_SINT_C_TYPE	DItype
6021debfc3dSmrg #define FROM_UINT_C_TYPE	UDItype
6031debfc3dSmrg #define FROM_MODE_NAME_S	di
6041debfc3dSmrg #define FROM_INT_SIZE		8	/* in bytes.  */
6051debfc3dSmrg 
6061debfc3dSmrg #elif defined (FROM_TI) && HAVE_TI == 1
6071debfc3dSmrg #define FROM_TYPE		1	/* Signed integer.  */
6081debfc3dSmrg #define FROM_INT_C_TYPE		TItype
6091debfc3dSmrg #define FROM_SINT_C_TYPE	TItype
6101debfc3dSmrg #define FROM_UINT_C_TYPE	UTItype
6111debfc3dSmrg #define FROM_MODE_NAME_S	ti
6121debfc3dSmrg #define FROM_INT_SIZE		16	/* in bytes.  */
6131debfc3dSmrg 
6141debfc3dSmrg #elif defined (FROM_UQI) && HAVE_UQI == 1
6151debfc3dSmrg #define FROM_TYPE		2	/* Unsigned integer.  */
6161debfc3dSmrg #define FROM_INT_C_TYPE		QItype
6171debfc3dSmrg #define FROM_SINT_C_TYPE	QItype
6181debfc3dSmrg #define FROM_UINT_C_TYPE	UQItype
6191debfc3dSmrg #define FROM_MODE_NAME_S	qi
6201debfc3dSmrg #define FROM_INT_SIZE		1	/* in bytes.  */
6211debfc3dSmrg 
6221debfc3dSmrg #elif defined (FROM_UHI) && HAVE_UHI == 1
6231debfc3dSmrg #define FROM_TYPE		2	/* Unsigned integer.  */
6241debfc3dSmrg #define FROM_INT_C_TYPE		UHItype
6251debfc3dSmrg #define FROM_SINT_C_TYPE	HItype
6261debfc3dSmrg #define FROM_UINT_C_TYPE	UHItype
6271debfc3dSmrg #define FROM_MODE_NAME_S	hi
6281debfc3dSmrg #define FROM_INT_SIZE		2	/* in bytes.  */
6291debfc3dSmrg 
6301debfc3dSmrg #elif defined (FROM_USI) && HAVE_USI == 1
6311debfc3dSmrg #define FROM_TYPE		2	/* Unsigned integer.  */
6321debfc3dSmrg #define FROM_INT_C_TYPE		USItype
6331debfc3dSmrg #define FROM_SINT_C_TYPE	SItype
6341debfc3dSmrg #define FROM_UINT_C_TYPE	USItype
6351debfc3dSmrg #define FROM_MODE_NAME_S	si
6361debfc3dSmrg #define FROM_INT_SIZE		4	/* in bytes.  */
6371debfc3dSmrg 
6381debfc3dSmrg #elif defined (FROM_UDI) && HAVE_UDI == 1
6391debfc3dSmrg #define FROM_TYPE		2	/* Unsigned integer.  */
6401debfc3dSmrg #define FROM_INT_C_TYPE		UDItype
6411debfc3dSmrg #define FROM_SINT_C_TYPE	DItype
6421debfc3dSmrg #define FROM_UINT_C_TYPE	UDItype
6431debfc3dSmrg #define FROM_MODE_NAME_S	di
6441debfc3dSmrg #define FROM_INT_SIZE		8	/* in bytes.  */
6451debfc3dSmrg 
6461debfc3dSmrg #elif defined (FROM_UTI) && HAVE_UTI == 1
6471debfc3dSmrg #define FROM_TYPE		2	/* Unsigned integer.  */
6481debfc3dSmrg #define FROM_INT_C_TYPE		UTItype
6491debfc3dSmrg #define FROM_SINT_C_TYPE	TItype
6501debfc3dSmrg #define FROM_UINT_C_TYPE	UTItype
6511debfc3dSmrg #define FROM_MODE_NAME_S	ti
6521debfc3dSmrg #define FROM_INT_SIZE		16	/* in bytes.  */
6531debfc3dSmrg 
6541debfc3dSmrg #elif defined (FROM_SF) && HAVE_SF == 1
6551debfc3dSmrg #define FROM_TYPE		3	/* Floating-point.  */
6561debfc3dSmrg #define FROM_FLOAT_C_TYPE	SFtype
6571debfc3dSmrg #define FROM_MODE_NAME_S	sf
6581debfc3dSmrg 
6591debfc3dSmrg #elif defined (FROM_DF) && HAVE_DF == 1
6601debfc3dSmrg #define FROM_TYPE		3	/* Floating-point.  */
6611debfc3dSmrg #define FROM_FLOAT_C_TYPE	DFtype
6621debfc3dSmrg #define FROM_MODE_NAME_S	df
6631debfc3dSmrg 
6641debfc3dSmrg #elif defined (FROM_QQ) && HAVE_QQ == 1
6651debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
6661debfc3dSmrg #define FROM_MODE_NAME		QQ
6671debfc3dSmrg #define FROM_MODE_NAME_S	qq
6681debfc3dSmrg #define FROM_INT_C_TYPE		QItype
6691debfc3dSmrg #define FROM_SINT_C_TYPE	QItype
6701debfc3dSmrg #define FROM_UINT_C_TYPE	UQItype
6711debfc3dSmrg #define FROM_MODE_UNSIGNED	0
6721debfc3dSmrg #define FROM_FIXED_SIZE		1	/* in bytes.  */
6731debfc3dSmrg 
6741debfc3dSmrg #elif defined (FROM_HQ) && HAVE_HQ == 1
6751debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
6761debfc3dSmrg #define FROM_MODE_NAME		HQ
6771debfc3dSmrg #define FROM_MODE_NAME_S	hq
6781debfc3dSmrg #define FROM_INT_C_TYPE		HItype
6791debfc3dSmrg #define FROM_SINT_C_TYPE	HItype
6801debfc3dSmrg #define FROM_UINT_C_TYPE	UHItype
6811debfc3dSmrg #define FROM_MODE_UNSIGNED	0
6821debfc3dSmrg #define FROM_FIXED_SIZE		2	/* in bytes.  */
6831debfc3dSmrg 
6841debfc3dSmrg #elif defined (FROM_SQ) && HAVE_SQ == 1
6851debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
6861debfc3dSmrg #define FROM_MODE_NAME		SQ
6871debfc3dSmrg #define FROM_MODE_NAME_S	sq
6881debfc3dSmrg #define FROM_INT_C_TYPE		SItype
6891debfc3dSmrg #define FROM_SINT_C_TYPE	SItype
6901debfc3dSmrg #define FROM_UINT_C_TYPE	USItype
6911debfc3dSmrg #define FROM_MODE_UNSIGNED	0
6921debfc3dSmrg #define FROM_FIXED_SIZE		4	/* in bytes.  */
6931debfc3dSmrg 
6941debfc3dSmrg #elif defined (FROM_DQ) && HAVE_DQ == 1
6951debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
6961debfc3dSmrg #define FROM_MODE_NAME		DQ
6971debfc3dSmrg #define FROM_MODE_NAME_S	dq
6981debfc3dSmrg #define FROM_INT_C_TYPE		DItype
6991debfc3dSmrg #define FROM_SINT_C_TYPE	DItype
7001debfc3dSmrg #define FROM_UINT_C_TYPE	UDItype
7011debfc3dSmrg #define FROM_MODE_UNSIGNED	0
7021debfc3dSmrg #define FROM_FIXED_SIZE		8	/* in bytes.  */
7031debfc3dSmrg 
7041debfc3dSmrg #elif defined (FROM_TQ) && HAVE_TQ == 1
7051debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7061debfc3dSmrg #define FROM_MODE_NAME		TQ
7071debfc3dSmrg #define FROM_MODE_NAME_S	tq
7081debfc3dSmrg #define FROM_INT_C_TYPE		TItype
7091debfc3dSmrg #define FROM_SINT_C_TYPE	TItype
7101debfc3dSmrg #define FROM_UINT_C_TYPE	UTItype
7111debfc3dSmrg #define FROM_MODE_UNSIGNED	0
7121debfc3dSmrg #define FROM_FIXED_SIZE		16	/* in bytes.  */
7131debfc3dSmrg 
7141debfc3dSmrg #elif defined (FROM_UQQ) && HAVE_UQQ == 1
7151debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7161debfc3dSmrg #define FROM_MODE_NAME		UQQ
7171debfc3dSmrg #define FROM_MODE_NAME_S	uqq
7181debfc3dSmrg #define FROM_INT_C_TYPE		UQItype
7191debfc3dSmrg #define FROM_SINT_C_TYPE	QItype
7201debfc3dSmrg #define FROM_UINT_C_TYPE	UQItype
7211debfc3dSmrg #define FROM_MODE_UNSIGNED	1
7221debfc3dSmrg #define FROM_FIXED_SIZE		1	/* in bytes.  */
7231debfc3dSmrg 
7241debfc3dSmrg #elif defined (FROM_UHQ) && HAVE_UHQ == 1
7251debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7261debfc3dSmrg #define FROM_MODE_NAME		UHQ
7271debfc3dSmrg #define FROM_MODE_NAME_S	uhq
7281debfc3dSmrg #define FROM_INT_C_TYPE		UHItype
7291debfc3dSmrg #define FROM_SINT_C_TYPE	HItype
7301debfc3dSmrg #define FROM_UINT_C_TYPE	UHItype
7311debfc3dSmrg #define FROM_MODE_UNSIGNED	1
7321debfc3dSmrg #define FROM_FIXED_SIZE		2	/* in bytes.  */
7331debfc3dSmrg 
7341debfc3dSmrg #elif defined (FROM_USQ) && HAVE_USQ == 1
7351debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7361debfc3dSmrg #define FROM_MODE_NAME		USQ
7371debfc3dSmrg #define FROM_MODE_NAME_S	usq
7381debfc3dSmrg #define FROM_INT_C_TYPE		USItype
7391debfc3dSmrg #define FROM_SINT_C_TYPE	SItype
7401debfc3dSmrg #define FROM_UINT_C_TYPE	USItype
7411debfc3dSmrg #define FROM_MODE_UNSIGNED	1
7421debfc3dSmrg #define FROM_FIXED_SIZE		4	/* in bytes.  */
7431debfc3dSmrg 
7441debfc3dSmrg #elif defined (FROM_UDQ) && HAVE_UDQ == 1
7451debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7461debfc3dSmrg #define FROM_MODE_NAME		UDQ
7471debfc3dSmrg #define FROM_MODE_NAME_S	udq
7481debfc3dSmrg #define FROM_INT_C_TYPE		UDItype
7491debfc3dSmrg #define FROM_SINT_C_TYPE	DItype
7501debfc3dSmrg #define FROM_UINT_C_TYPE	UDItype
7511debfc3dSmrg #define FROM_MODE_UNSIGNED	1
7521debfc3dSmrg #define FROM_FIXED_SIZE		8	/* in bytes.  */
7531debfc3dSmrg 
7541debfc3dSmrg #elif defined (FROM_UTQ) && HAVE_UTQ == 1
7551debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7561debfc3dSmrg #define FROM_MODE_NAME		UTQ
7571debfc3dSmrg #define FROM_MODE_NAME_S	utq
7581debfc3dSmrg #define FROM_INT_C_TYPE		UTItype
7591debfc3dSmrg #define FROM_SINT_C_TYPE	TItype
7601debfc3dSmrg #define FROM_UINT_C_TYPE	UTItype
7611debfc3dSmrg #define FROM_MODE_UNSIGNED	1
7621debfc3dSmrg #define FROM_FIXED_SIZE		16	/* in bytes.  */
7631debfc3dSmrg 
7641debfc3dSmrg #elif defined (FROM_HA) && HAVE_HA == 1
7651debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7661debfc3dSmrg #define FROM_MODE_NAME		HA
7671debfc3dSmrg #define FROM_MODE_NAME_S	ha
7681debfc3dSmrg #define FROM_INT_C_TYPE		HItype
7691debfc3dSmrg #define FROM_SINT_C_TYPE	HItype
7701debfc3dSmrg #define FROM_UINT_C_TYPE	UHItype
7711debfc3dSmrg #define FROM_MODE_UNSIGNED	0
7721debfc3dSmrg #define FROM_FIXED_SIZE		2	/* in bytes.  */
7731debfc3dSmrg 
7741debfc3dSmrg #elif defined (FROM_SA) && HAVE_SA == 1
7751debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7761debfc3dSmrg #define FROM_MODE_NAME		SA
7771debfc3dSmrg #define FROM_MODE_NAME_S	sa
7781debfc3dSmrg #define FROM_INT_C_TYPE		SItype
7791debfc3dSmrg #define FROM_SINT_C_TYPE	SItype
7801debfc3dSmrg #define FROM_UINT_C_TYPE	USItype
7811debfc3dSmrg #define FROM_MODE_UNSIGNED	0
7821debfc3dSmrg #define FROM_FIXED_SIZE		4	/* in bytes.  */
7831debfc3dSmrg 
7841debfc3dSmrg #elif defined (FROM_DA) && HAVE_DA == 1
7851debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7861debfc3dSmrg #define FROM_MODE_NAME		DA
7871debfc3dSmrg #define FROM_MODE_NAME_S	da
7881debfc3dSmrg #define FROM_INT_C_TYPE		DItype
7891debfc3dSmrg #define FROM_SINT_C_TYPE	DItype
7901debfc3dSmrg #define FROM_UINT_C_TYPE	UDItype
7911debfc3dSmrg #define FROM_MODE_UNSIGNED	0
7921debfc3dSmrg #define FROM_FIXED_SIZE		8	/* in bytes.  */
7931debfc3dSmrg 
7941debfc3dSmrg #elif defined (FROM_TA) && HAVE_TA == 1
7951debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
7961debfc3dSmrg #define FROM_MODE_NAME		TA
7971debfc3dSmrg #define FROM_MODE_NAME_S	ta
7981debfc3dSmrg #define FROM_INT_C_TYPE		TItype
7991debfc3dSmrg #define FROM_SINT_C_TYPE	TItype
8001debfc3dSmrg #define FROM_UINT_C_TYPE	UTItype
8011debfc3dSmrg #define FROM_MODE_UNSIGNED	0
8021debfc3dSmrg #define FROM_FIXED_SIZE		16	/* in bytes.  */
8031debfc3dSmrg 
8041debfc3dSmrg #elif defined (FROM_UHA) && HAVE_UHA == 1
8051debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
8061debfc3dSmrg #define FROM_MODE_NAME		UHA
8071debfc3dSmrg #define FROM_MODE_NAME_S	uha
8081debfc3dSmrg #define FROM_INT_C_TYPE		UHItype
8091debfc3dSmrg #define FROM_SINT_C_TYPE	HItype
8101debfc3dSmrg #define FROM_UINT_C_TYPE	UHItype
8111debfc3dSmrg #define FROM_MODE_UNSIGNED	1
8121debfc3dSmrg #define FROM_FIXED_SIZE		2	/* in bytes.  */
8131debfc3dSmrg 
8141debfc3dSmrg #elif defined (FROM_USA) && HAVE_USA == 1
8151debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
8161debfc3dSmrg #define FROM_MODE_NAME		USA
8171debfc3dSmrg #define FROM_MODE_NAME_S	usa
8181debfc3dSmrg #define FROM_INT_C_TYPE		USItype
8191debfc3dSmrg #define FROM_SINT_C_TYPE	SItype
8201debfc3dSmrg #define FROM_UINT_C_TYPE	USItype
8211debfc3dSmrg #define FROM_MODE_UNSIGNED	1
8221debfc3dSmrg #define FROM_FIXED_SIZE		4	/* in bytes.  */
8231debfc3dSmrg 
8241debfc3dSmrg #elif defined (FROM_UDA) && HAVE_UDA == 1
8251debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
8261debfc3dSmrg #define FROM_MODE_NAME		UDA
8271debfc3dSmrg #define FROM_MODE_NAME_S	uda
8281debfc3dSmrg #define FROM_INT_C_TYPE		UDItype
8291debfc3dSmrg #define FROM_SINT_C_TYPE	DItype
8301debfc3dSmrg #define FROM_UINT_C_TYPE	UDItype
8311debfc3dSmrg #define FROM_MODE_UNSIGNED	1
8321debfc3dSmrg #define FROM_FIXED_SIZE		8	/* in bytes.  */
8331debfc3dSmrg 
8341debfc3dSmrg #elif defined (FROM_UTA) && HAVE_UTA == 1
8351debfc3dSmrg #define FROM_TYPE		4	/* Fixed-point.  */
8361debfc3dSmrg #define FROM_MODE_NAME		UTA
8371debfc3dSmrg #define FROM_MODE_NAME_S	uta
8381debfc3dSmrg #define FROM_INT_C_TYPE		UTItype
8391debfc3dSmrg #define FROM_SINT_C_TYPE	TItype
8401debfc3dSmrg #define FROM_UINT_C_TYPE	UTItype
8411debfc3dSmrg #define FROM_MODE_UNSIGNED	1
8421debfc3dSmrg #define FROM_FIXED_SIZE		16	/* in bytes.  */
8431debfc3dSmrg 
8441debfc3dSmrg #endif
8451debfc3dSmrg 
8461debfc3dSmrg #if defined (TO_QI) && HAVE_QI == 1 && !defined (FROM_QI)
8471debfc3dSmrg #define TO_TYPE			1	/* Signed integer.  */
8481debfc3dSmrg #define TO_INT_C_TYPE		QItype
8491debfc3dSmrg #define TO_SINT_C_TYPE		QItype
8501debfc3dSmrg #define TO_UINT_C_TYPE		UQItype
8511debfc3dSmrg #define TO_MODE_NAME_S		qi
8521debfc3dSmrg 
8531debfc3dSmrg #elif defined (TO_HI) && HAVE_HI == 1 && !defined (FROM_HI)
8541debfc3dSmrg #define TO_TYPE			1	/* Signed integer.  */
8551debfc3dSmrg #define TO_INT_C_TYPE		HItype
8561debfc3dSmrg #define TO_SINT_C_TYPE		HItype
8571debfc3dSmrg #define TO_UINT_C_TYPE		UHItype
8581debfc3dSmrg #define TO_MODE_NAME_S		hi
8591debfc3dSmrg 
8601debfc3dSmrg #elif defined (TO_SI) && HAVE_SI == 1 && !defined (FROM_SI)
8611debfc3dSmrg #define TO_TYPE			1	/* Signed integer.  */
8621debfc3dSmrg #define TO_INT_C_TYPE		SItype
8631debfc3dSmrg #define TO_SINT_C_TYPE		SItype
8641debfc3dSmrg #define TO_UINT_C_TYPE		USItype
8651debfc3dSmrg #define TO_MODE_NAME_S		si
8661debfc3dSmrg 
8671debfc3dSmrg #elif defined (TO_DI) && HAVE_DI == 1 && !defined (FROM_DI)
8681debfc3dSmrg #define TO_TYPE			1	/* Signed integer.  */
8691debfc3dSmrg #define TO_INT_C_TYPE		DItype
8701debfc3dSmrg #define TO_SINT_C_TYPE		DItype
8711debfc3dSmrg #define TO_UINT_C_TYPE		UDItype
8721debfc3dSmrg #define TO_MODE_NAME_S		di
8731debfc3dSmrg 
8741debfc3dSmrg #elif defined (TO_TI) && HAVE_TI == 1 && !defined (FROM_TI)
8751debfc3dSmrg #define TO_TYPE			1	/* Signed integer.  */
8761debfc3dSmrg #define TO_INT_C_TYPE		TItype
8771debfc3dSmrg #define TO_SINT_C_TYPE		TItype
8781debfc3dSmrg #define TO_UINT_C_TYPE		UTItype
8791debfc3dSmrg #define TO_MODE_NAME_S		ti
8801debfc3dSmrg 
8811debfc3dSmrg #elif defined (TO_UQI) && HAVE_UQI == 1 && !defined (FROM_UQI)
8821debfc3dSmrg #define TO_TYPE			2	/* Unsigned integer.  */
8831debfc3dSmrg #define TO_INT_C_TYPE		UQItype
8841debfc3dSmrg #define TO_SINT_C_TYPE		QItype
8851debfc3dSmrg #define TO_UINT_C_TYPE		UQItype
8861debfc3dSmrg #define TO_MODE_NAME_S		qi
8871debfc3dSmrg 
8881debfc3dSmrg #elif defined (TO_UHI) && HAVE_UHI == 1 && !defined (FROM_UHI)
8891debfc3dSmrg #define TO_TYPE			2	/* Unsigned integer.  */
8901debfc3dSmrg #define TO_INT_C_TYPE		UHItype
8911debfc3dSmrg #define TO_SINT_C_TYPE		HItype
8921debfc3dSmrg #define TO_UINT_C_TYPE		UHItype
8931debfc3dSmrg #define TO_MODE_NAME_S		hi
8941debfc3dSmrg 
8951debfc3dSmrg #elif defined (TO_USI) && HAVE_USI == 1 && !defined (FROM_USI)
8961debfc3dSmrg #define TO_TYPE			2	/* Unsigned integer.  */
8971debfc3dSmrg #define TO_INT_C_TYPE		USItype
8981debfc3dSmrg #define TO_SINT_C_TYPE		SItype
8991debfc3dSmrg #define TO_UINT_C_TYPE		USItype
9001debfc3dSmrg #define TO_MODE_NAME_S		si
9011debfc3dSmrg 
9021debfc3dSmrg #elif defined (TO_UDI) && HAVE_UDI == 1 && !defined (FROM_UDI)
9031debfc3dSmrg #define TO_TYPE			2	/* Unsigned integer.  */
9041debfc3dSmrg #define TO_INT_C_TYPE		UDItype
9051debfc3dSmrg #define TO_SINT_C_TYPE		DItype
9061debfc3dSmrg #define TO_UINT_C_TYPE		UDItype
9071debfc3dSmrg #define TO_MODE_NAME_S		di
9081debfc3dSmrg 
9091debfc3dSmrg #elif defined (TO_UTI) && HAVE_UTI == 1 && !defined (FROM_UTI)
9101debfc3dSmrg #define TO_TYPE			2	/* Unsigned integer.  */
9111debfc3dSmrg #define TO_INT_C_TYPE		UTItype
9121debfc3dSmrg #define TO_SINT_C_TYPE		TItype
9131debfc3dSmrg #define TO_UINT_C_TYPE		UTItype
9141debfc3dSmrg #define TO_MODE_NAME_S		ti
9151debfc3dSmrg 
9161debfc3dSmrg #elif defined (TO_SF) && HAVE_SF == 1 && !defined (FROM_SF)
9171debfc3dSmrg #define TO_TYPE			3	/* Floating-point.  */
9181debfc3dSmrg #define TO_FLOAT_C_TYPE		SFtype
9191debfc3dSmrg #define TO_MODE_NAME_S		sf
9201debfc3dSmrg 
9211debfc3dSmrg #elif defined (TO_DF) && HAVE_DF == 1 && !defined (FROM_DF)
9221debfc3dSmrg #define TO_TYPE			3	/* Floating-point.  */
9231debfc3dSmrg #define TO_FLOAT_C_TYPE		DFtype
9241debfc3dSmrg #define TO_MODE_NAME_S		df
9251debfc3dSmrg 
9261debfc3dSmrg #elif defined (TO_QQ) && HAVE_QQ == 1 && !defined (FROM_QQ)
9271debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9281debfc3dSmrg #define TO_MODE_NAME		QQ
9291debfc3dSmrg #define TO_MODE_NAME_S		qq
9301debfc3dSmrg #define TO_INT_C_TYPE		QItype
9311debfc3dSmrg #define TO_SINT_C_TYPE		QItype
9321debfc3dSmrg #define TO_UINT_C_TYPE		UQItype
9331debfc3dSmrg #define TO_MODE_UNSIGNED	0
9341debfc3dSmrg #define TO_FIXED_SIZE		1	/* in bytes.  */
9351debfc3dSmrg 
9361debfc3dSmrg #elif defined (TO_HQ) && HAVE_HQ == 1 && !defined (FROM_HQ)
9371debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9381debfc3dSmrg #define TO_MODE_NAME		HQ
9391debfc3dSmrg #define TO_MODE_NAME_S		hq
9401debfc3dSmrg #define TO_INT_C_TYPE		HItype
9411debfc3dSmrg #define TO_SINT_C_TYPE		HItype
9421debfc3dSmrg #define TO_UINT_C_TYPE		UHItype
9431debfc3dSmrg #define TO_MODE_UNSIGNED	0
9441debfc3dSmrg #define TO_FIXED_SIZE		2	/* in bytes.  */
9451debfc3dSmrg 
9461debfc3dSmrg #elif defined (TO_SQ) && HAVE_SQ == 1 && !defined (FROM_SQ)
9471debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9481debfc3dSmrg #define TO_MODE_NAME		SQ
9491debfc3dSmrg #define TO_MODE_NAME_S		sq
9501debfc3dSmrg #define TO_INT_C_TYPE		SItype
9511debfc3dSmrg #define TO_SINT_C_TYPE		SItype
9521debfc3dSmrg #define TO_UINT_C_TYPE		USItype
9531debfc3dSmrg #define TO_MODE_UNSIGNED	0
9541debfc3dSmrg #define TO_FIXED_SIZE		4	/* in bytes.  */
9551debfc3dSmrg 
9561debfc3dSmrg #elif defined (TO_DQ) && HAVE_DQ == 1 && !defined (FROM_DQ)
9571debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9581debfc3dSmrg #define TO_MODE_NAME		DQ
9591debfc3dSmrg #define TO_MODE_NAME_S		dq
9601debfc3dSmrg #define TO_INT_C_TYPE		DItype
9611debfc3dSmrg #define TO_SINT_C_TYPE		DItype
9621debfc3dSmrg #define TO_UINT_C_TYPE		UDItype
9631debfc3dSmrg #define TO_MODE_UNSIGNED	0
9641debfc3dSmrg #define TO_FIXED_SIZE		8	/* in bytes.  */
9651debfc3dSmrg 
9661debfc3dSmrg #elif defined (TO_TQ) && HAVE_TQ == 1 && !defined (FROM_TQ)
9671debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9681debfc3dSmrg #define TO_MODE_NAME		TQ
9691debfc3dSmrg #define TO_MODE_NAME_S		tq
9701debfc3dSmrg #define TO_INT_C_TYPE		TItype
9711debfc3dSmrg #define TO_SINT_C_TYPE		TItype
9721debfc3dSmrg #define TO_UINT_C_TYPE		UTItype
9731debfc3dSmrg #define TO_MODE_UNSIGNED	0
9741debfc3dSmrg #define TO_FIXED_SIZE		16	/* in bytes.  */
9751debfc3dSmrg 
9761debfc3dSmrg #elif defined (TO_UQQ) && HAVE_UQQ == 1 && !defined (FROM_UQQ)
9771debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9781debfc3dSmrg #define TO_MODE_NAME		UQQ
9791debfc3dSmrg #define TO_MODE_NAME_S		uqq
9801debfc3dSmrg #define TO_INT_C_TYPE		UQItype
9811debfc3dSmrg #define TO_SINT_C_TYPE		QItype
9821debfc3dSmrg #define TO_UINT_C_TYPE		UQItype
9831debfc3dSmrg #define TO_MODE_UNSIGNED	1
9841debfc3dSmrg #define TO_FIXED_SIZE		1	/* in bytes.  */
9851debfc3dSmrg 
9861debfc3dSmrg #elif defined (TO_UHQ) && HAVE_UHQ == 1 && !defined (FROM_UHQ)
9871debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9881debfc3dSmrg #define TO_MODE_NAME		UHQ
9891debfc3dSmrg #define TO_MODE_NAME_S		uhq
9901debfc3dSmrg #define TO_INT_C_TYPE		UHItype
9911debfc3dSmrg #define TO_SINT_C_TYPE		HItype
9921debfc3dSmrg #define TO_UINT_C_TYPE		UHItype
9931debfc3dSmrg #define TO_MODE_UNSIGNED	1
9941debfc3dSmrg #define TO_FIXED_SIZE		2	/* in bytes.  */
9951debfc3dSmrg 
9961debfc3dSmrg #elif defined (TO_USQ) && HAVE_USQ == 1 && !defined (FROM_USQ)
9971debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
9981debfc3dSmrg #define TO_MODE_NAME		USQ
9991debfc3dSmrg #define TO_MODE_NAME_S		usq
10001debfc3dSmrg #define TO_INT_C_TYPE		USItype
10011debfc3dSmrg #define TO_SINT_C_TYPE		SItype
10021debfc3dSmrg #define TO_UINT_C_TYPE		USItype
10031debfc3dSmrg #define TO_MODE_UNSIGNED	1
10041debfc3dSmrg #define TO_FIXED_SIZE		4	/* in bytes.  */
10051debfc3dSmrg 
10061debfc3dSmrg #elif defined (TO_UDQ) && HAVE_UDQ == 1 && !defined (FROM_UDQ)
10071debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10081debfc3dSmrg #define TO_MODE_NAME		UDQ
10091debfc3dSmrg #define TO_MODE_NAME_S		udq
10101debfc3dSmrg #define TO_INT_C_TYPE		UDItype
10111debfc3dSmrg #define TO_SINT_C_TYPE		DItype
10121debfc3dSmrg #define TO_UINT_C_TYPE		UDItype
10131debfc3dSmrg #define TO_MODE_UNSIGNED	1
10141debfc3dSmrg #define TO_FIXED_SIZE		8	/* in bytes.  */
10151debfc3dSmrg 
10161debfc3dSmrg #elif defined (TO_UTQ) && HAVE_UTQ == 1 && !defined (FROM_UTQ)
10171debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10181debfc3dSmrg #define TO_MODE_NAME		UTQ
10191debfc3dSmrg #define TO_MODE_NAME_S		utq
10201debfc3dSmrg #define TO_INT_C_TYPE		UTItype
10211debfc3dSmrg #define TO_SINT_C_TYPE		TItype
10221debfc3dSmrg #define TO_UINT_C_TYPE		UTItype
10231debfc3dSmrg #define TO_MODE_UNSIGNED	1
10241debfc3dSmrg #define TO_FIXED_SIZE		16	/* in bytes.  */
10251debfc3dSmrg 
10261debfc3dSmrg #elif defined (TO_HA) && HAVE_HA == 1 && !defined (FROM_HA)
10271debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10281debfc3dSmrg #define TO_MODE_NAME		HA
10291debfc3dSmrg #define TO_MODE_NAME_S		ha
10301debfc3dSmrg #define TO_INT_C_TYPE		HItype
10311debfc3dSmrg #define TO_SINT_C_TYPE		HItype
10321debfc3dSmrg #define TO_UINT_C_TYPE		UHItype
10331debfc3dSmrg #define TO_MODE_UNSIGNED	0
10341debfc3dSmrg #define TO_FIXED_SIZE		2	/* in bytes.  */
10351debfc3dSmrg 
10361debfc3dSmrg #elif defined (TO_SA) && HAVE_SA == 1 && !defined (FROM_SA)
10371debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10381debfc3dSmrg #define TO_MODE_NAME		SA
10391debfc3dSmrg #define TO_MODE_NAME_S		sa
10401debfc3dSmrg #define TO_INT_C_TYPE		SItype
10411debfc3dSmrg #define TO_SINT_C_TYPE		SItype
10421debfc3dSmrg #define TO_UINT_C_TYPE		USItype
10431debfc3dSmrg #define TO_MODE_UNSIGNED	0
10441debfc3dSmrg #define TO_FIXED_SIZE		4	/* in bytes.  */
10451debfc3dSmrg 
10461debfc3dSmrg #elif defined (TO_DA) && HAVE_DA == 1 && !defined (FROM_DA)
10471debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10481debfc3dSmrg #define TO_MODE_NAME		DA
10491debfc3dSmrg #define TO_MODE_NAME_S		da
10501debfc3dSmrg #define TO_INT_C_TYPE		DItype
10511debfc3dSmrg #define TO_SINT_C_TYPE		DItype
10521debfc3dSmrg #define TO_UINT_C_TYPE		UDItype
10531debfc3dSmrg #define TO_MODE_UNSIGNED	0
10541debfc3dSmrg #define TO_FIXED_SIZE		8	/* in bytes.  */
10551debfc3dSmrg 
10561debfc3dSmrg #elif defined (TO_TA) && HAVE_TA == 1 && !defined (FROM_TA)
10571debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10581debfc3dSmrg #define TO_MODE_NAME		TA
10591debfc3dSmrg #define TO_MODE_NAME_S		ta
10601debfc3dSmrg #define TO_INT_C_TYPE		TItype
10611debfc3dSmrg #define TO_SINT_C_TYPE		TItype
10621debfc3dSmrg #define TO_UINT_C_TYPE		UTItype
10631debfc3dSmrg #define TO_MODE_UNSIGNED	0
10641debfc3dSmrg #define TO_FIXED_SIZE		16	/* in bytes.  */
10651debfc3dSmrg 
10661debfc3dSmrg #elif defined (TO_UHA) && HAVE_UHA == 1 && !defined (FROM_UHA)
10671debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10681debfc3dSmrg #define TO_MODE_NAME		UHA
10691debfc3dSmrg #define TO_MODE_NAME_S		uha
10701debfc3dSmrg #define TO_INT_C_TYPE		UHItype
10711debfc3dSmrg #define TO_SINT_C_TYPE		HItype
10721debfc3dSmrg #define TO_UINT_C_TYPE		UHItype
10731debfc3dSmrg #define TO_MODE_UNSIGNED	1
10741debfc3dSmrg #define TO_FIXED_SIZE		2	/* in bytes.  */
10751debfc3dSmrg 
10761debfc3dSmrg #elif defined (TO_USA) && HAVE_USA == 1 && !defined (FROM_USA)
10771debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10781debfc3dSmrg #define TO_MODE_NAME		USA
10791debfc3dSmrg #define TO_MODE_NAME_S		usa
10801debfc3dSmrg #define TO_INT_C_TYPE		USItype
10811debfc3dSmrg #define TO_SINT_C_TYPE		SItype
10821debfc3dSmrg #define TO_UINT_C_TYPE		USItype
10831debfc3dSmrg #define TO_MODE_UNSIGNED	1
10841debfc3dSmrg #define TO_FIXED_SIZE		4	/* in bytes.  */
10851debfc3dSmrg 
10861debfc3dSmrg #elif defined (TO_UDA) && HAVE_UDA == 1 && !defined (FROM_UDA)
10871debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10881debfc3dSmrg #define TO_MODE_NAME		UDA
10891debfc3dSmrg #define TO_MODE_NAME_S		uda
10901debfc3dSmrg #define TO_INT_C_TYPE		UDItype
10911debfc3dSmrg #define TO_SINT_C_TYPE		DItype
10921debfc3dSmrg #define TO_UINT_C_TYPE		UDItype
10931debfc3dSmrg #define TO_MODE_UNSIGNED	1
10941debfc3dSmrg #define TO_FIXED_SIZE		8	/* in bytes.  */
10951debfc3dSmrg 
10961debfc3dSmrg #elif defined (TO_UTA) && HAVE_UTA == 1 && !defined (FROM_UTA)
10971debfc3dSmrg #define TO_TYPE			4	/* Fixed-point.  */
10981debfc3dSmrg #define TO_MODE_NAME		UTA
10991debfc3dSmrg #define TO_MODE_NAME_S		uta
11001debfc3dSmrg #define TO_INT_C_TYPE		UTItype
11011debfc3dSmrg #define TO_SINT_C_TYPE		TItype
11021debfc3dSmrg #define TO_UINT_C_TYPE		UTItype
11031debfc3dSmrg #define TO_MODE_UNSIGNED	1
11041debfc3dSmrg #define TO_FIXED_SIZE		16	/* in bytes.  */
11051debfc3dSmrg 
11061debfc3dSmrg #endif
11071debfc3dSmrg 
11081debfc3dSmrg #if defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S)
11091debfc3dSmrg 
11101debfc3dSmrg #if FROM_TYPE == 1	/* Signed integer.  */
11111debfc3dSmrg #define FROM_INT_WIDTH		(FROM_INT_SIZE * __CHAR_BIT__)
11121debfc3dSmrg #endif
11131debfc3dSmrg 
11141debfc3dSmrg #if FROM_TYPE == 2	/* Unsigned integer.  */
11151debfc3dSmrg #define FROM_INT_WIDTH		(FROM_INT_SIZE * __CHAR_BIT__)
11161debfc3dSmrg #endif
11171debfc3dSmrg 
11181debfc3dSmrg #if FROM_TYPE == 4	/* Fixed-point.  */
11191debfc3dSmrg #define FROM_FIXED_C_TYPE	FIXED_C_TYPE2(FROM_MODE_NAME)
11201debfc3dSmrg #define FROM_FBITS		FBITS2(FROM_MODE_NAME)
11211debfc3dSmrg #define FROM_FIXED_WIDTH	(FROM_FIXED_SIZE * __CHAR_BIT__)
11221debfc3dSmrg #define FROM_FBITS		FBITS2(FROM_MODE_NAME)
11231debfc3dSmrg #define FROM_IBITS		IBITS2(FROM_MODE_NAME)
11241debfc3dSmrg #define FROM_I_F_BITS		(FROM_FBITS + FROM_IBITS)
11251debfc3dSmrg 
11261debfc3dSmrg #if FROM_MODE_UNSIGNED == 0 /* Signed types.  */
11271debfc3dSmrg #define FROM_PADDING_BITS	(FROM_FIXED_WIDTH - 1 - FROM_I_F_BITS)
11281debfc3dSmrg #define FROM_NONPADDING_BITS	(1 + FROM_I_F_BITS)
11291debfc3dSmrg #else /* Unsigned types.  */
11301debfc3dSmrg #define FROM_PADDING_BITS	(FROM_FIXED_WIDTH - FROM_I_F_BITS)
11311debfc3dSmrg #define FROM_NONPADDING_BITS	(FROM_I_F_BITS)
11321debfc3dSmrg #endif
11331debfc3dSmrg #define FROM_HAVE_PADDING_BITS	(FROM_PADDING_BITS > 0)
11341debfc3dSmrg #endif /* FROM_TYPE == 4  */
11351debfc3dSmrg 
11361debfc3dSmrg #if TO_TYPE == 4	/* Fixed-point.  */
11371debfc3dSmrg #define TO_FIXED_C_TYPE		FIXED_C_TYPE2(TO_MODE_NAME)
11381debfc3dSmrg #define TO_FBITS		FBITS2(TO_MODE_NAME)
11391debfc3dSmrg #define TO_FIXED_WIDTH		(TO_FIXED_SIZE * __CHAR_BIT__)
11401debfc3dSmrg #define TO_FBITS		FBITS2(TO_MODE_NAME)
11411debfc3dSmrg #define TO_IBITS		IBITS2(TO_MODE_NAME)
11421debfc3dSmrg #define TO_I_F_BITS		(TO_FBITS + TO_IBITS)
11431debfc3dSmrg 
11441debfc3dSmrg #if TO_MODE_UNSIGNED == 0 /* Signed types.  */
11451debfc3dSmrg #define TO_PADDING_BITS		(TO_FIXED_WIDTH - 1 - TO_I_F_BITS)
11461debfc3dSmrg #define TO_NONPADDING_BITS	(1 + TO_I_F_BITS)
11471debfc3dSmrg #else /* Unsigned types.  */
11481debfc3dSmrg #define TO_PADDING_BITS		(TO_FIXED_WIDTH - TO_I_F_BITS)
11491debfc3dSmrg #define TO_NONPADDING_BITS	(TO_I_F_BITS)
11501debfc3dSmrg #endif
11511debfc3dSmrg #define TO_HAVE_PADDING_BITS	(TO_PADDING_BITS > 0)
11521debfc3dSmrg #endif /* TO_TYPE == 4  */
11531debfc3dSmrg 
11541debfc3dSmrg #ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX
11551debfc3dSmrg #define FIXED_CONVERT_OP(OP,FROM,TO)	__gnu_ ## OP ## FROM ## TO
11561debfc3dSmrg #define FIXED_CONVERT_OP2(OP,FROM,TO)	__gnu_ ## OP ## FROM ## TO ## 2
11571debfc3dSmrg #else
11581debfc3dSmrg #define FIXED_CONVERT_OP(OP,FROM,TO)	__ ## OP ## FROM ## TO
11591debfc3dSmrg #define FIXED_CONVERT_OP2(OP,FROM,TO)	__ ## OP ## FROM ## TO ## 2
11601debfc3dSmrg #endif
11611debfc3dSmrg #define FRACT_TEMP(N1,N2)		FIXED_CONVERT_OP(fract,N1,N2)
11621debfc3dSmrg #define FRACT2_TEMP(N1,N2)		FIXED_CONVERT_OP2(fract,N1,N2)
11631debfc3dSmrg #define SATFRACT_TEMP(N1,N2)		FIXED_CONVERT_OP(satfract,N1,N2)
11641debfc3dSmrg #define SATFRACT2_TEMP(N1,N2)		FIXED_CONVERT_OP2(satfract,N1,N2)
11651debfc3dSmrg #define FRACTUNS_TEMP(N1,N2)		FIXED_CONVERT_OP(fractuns,N1,N2)
11661debfc3dSmrg #define SATFRACTUNS_TEMP(N1,N2)		FIXED_CONVERT_OP(satfractuns,N1,N2)
11671debfc3dSmrg 
11681debfc3dSmrg /* Define conversions from fixed-point to fixed-point.  */
11691debfc3dSmrg #if FROM_TYPE == 4 && TO_TYPE == 4
11701debfc3dSmrg 
11711debfc3dSmrg #if FROM_FIXED_SIZE > TO_FIXED_SIZE
11721debfc3dSmrg #define BIG_SINT_C_TYPE	FROM_SINT_C_TYPE
11731debfc3dSmrg #define BIG_UINT_C_TYPE	FROM_UINT_C_TYPE
11741debfc3dSmrg #define BIG_WIDTH	FROM_FIXED_WIDTH
11751debfc3dSmrg #else
11761debfc3dSmrg #define BIG_SINT_C_TYPE	TO_SINT_C_TYPE
11771debfc3dSmrg #define BIG_UINT_C_TYPE	TO_UINT_C_TYPE
11781debfc3dSmrg #define BIG_WIDTH	TO_FIXED_WIDTH
11791debfc3dSmrg #endif
11801debfc3dSmrg 
11811debfc3dSmrg /* Check if FROM* and TO* are in the same machine class.  */
11821debfc3dSmrg #if ((FROM_MODE_UNSIGNED == TO_MODE_UNSIGNED) \
11831debfc3dSmrg      && ((FROM_IBITS == 0) == (TO_IBITS == 0)))
11841debfc3dSmrg /* Same modes: append '2' to conversion function names */
11851debfc3dSmrg #define FRACT		FRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
11861debfc3dSmrg #define SATFRACT	SATFRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
11871debfc3dSmrg #else
11881debfc3dSmrg /* Different modes: don't append '2' to conversion function names */
11891debfc3dSmrg #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
11901debfc3dSmrg #define SATFRACT	SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
11911debfc3dSmrg #endif
11921debfc3dSmrg 
11931debfc3dSmrg extern TO_FIXED_C_TYPE FRACT (FROM_FIXED_C_TYPE);
11941debfc3dSmrg extern TO_FIXED_C_TYPE SATFRACT (FROM_FIXED_C_TYPE);
11951debfc3dSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 4  */
11961debfc3dSmrg 
11971debfc3dSmrg /* Define conversions from fixed-point to signed integer.  */
11981debfc3dSmrg #if FROM_TYPE == 4 && TO_TYPE == 1
11991debfc3dSmrg #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12001debfc3dSmrg extern TO_INT_C_TYPE	FRACT (FROM_FIXED_C_TYPE);
12011debfc3dSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 1  */
12021debfc3dSmrg 
12031debfc3dSmrg /* Define conversions from fixed-point to unsigned integer.  */
12041debfc3dSmrg #if FROM_TYPE == 4 && TO_TYPE == 2
12051debfc3dSmrg #define FRACTUNS	FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12061debfc3dSmrg extern TO_INT_C_TYPE 	FRACTUNS (FROM_FIXED_C_TYPE);
12071debfc3dSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 2  */
12081debfc3dSmrg 
12091debfc3dSmrg /* Define conversions from fixed-point to floating-point.  */
12101debfc3dSmrg #if FROM_TYPE == 4 && TO_TYPE == 3
12111debfc3dSmrg #define BASE1(NUM)	0x1.0p ## NUM
12121debfc3dSmrg #define BASE2(NUM)	BASE1(NUM)
12131debfc3dSmrg #define BASE		BASE2(FROM_FBITS)
12141debfc3dSmrg #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12151debfc3dSmrg extern TO_FLOAT_C_TYPE	FRACT (FROM_FIXED_C_TYPE);
12161debfc3dSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 3  */
12171debfc3dSmrg 
12181debfc3dSmrg /* Define conversions from signed integer to fixed-point.  */
12191debfc3dSmrg #if FROM_TYPE == 1 && TO_TYPE == 4
12201debfc3dSmrg 
12211debfc3dSmrg #if FROM_INT_SIZE > TO_FIXED_SIZE
12221debfc3dSmrg #define BIG_SINT_C_TYPE	FROM_SINT_C_TYPE
12231debfc3dSmrg #define BIG_UINT_C_TYPE	FROM_UINT_C_TYPE
12241debfc3dSmrg #define BIG_WIDTH	FROM_INT_WIDTH
12251debfc3dSmrg #else
12261debfc3dSmrg #define BIG_SINT_C_TYPE	TO_SINT_C_TYPE
12271debfc3dSmrg #define BIG_UINT_C_TYPE	TO_UINT_C_TYPE
12281debfc3dSmrg #define BIG_WIDTH	TO_FIXED_WIDTH
12291debfc3dSmrg #endif
12301debfc3dSmrg 
12311debfc3dSmrg #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12321debfc3dSmrg #define SATFRACT	SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12331debfc3dSmrg extern TO_FIXED_C_TYPE	FRACT (FROM_INT_C_TYPE);
12341debfc3dSmrg extern TO_FIXED_C_TYPE	SATFRACT (FROM_INT_C_TYPE);
12351debfc3dSmrg #endif /* FROM_TYPE == 1 && TO_TYPE == 4  */
12361debfc3dSmrg 
12371debfc3dSmrg /* Define conversions from unsigned integer to fixed-point.  */
12381debfc3dSmrg #if FROM_TYPE == 2 && TO_TYPE == 4
12391debfc3dSmrg 
12401debfc3dSmrg #if FROM_INT_SIZE > TO_FIXED_SIZE
12411debfc3dSmrg #define BIG_SINT_C_TYPE	FROM_SINT_C_TYPE
12421debfc3dSmrg #define BIG_UINT_C_TYPE	FROM_UINT_C_TYPE
12431debfc3dSmrg #define BIG_WIDTH	FROM_INT_WIDTH
12441debfc3dSmrg #else
12451debfc3dSmrg #define BIG_SINT_C_TYPE	TO_SINT_C_TYPE
12461debfc3dSmrg #define BIG_UINT_C_TYPE	TO_UINT_C_TYPE
12471debfc3dSmrg #define BIG_WIDTH	TO_FIXED_WIDTH
12481debfc3dSmrg #endif
12491debfc3dSmrg 
12501debfc3dSmrg #define FRACTUNS	FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12511debfc3dSmrg #define SATFRACTUNS	SATFRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12521debfc3dSmrg extern TO_FIXED_C_TYPE	FRACTUNS (FROM_INT_C_TYPE);
12531debfc3dSmrg extern TO_FIXED_C_TYPE	SATFRACTUNS (FROM_INT_C_TYPE);
12541debfc3dSmrg #endif /* FROM_TYPE == 2 && TO_TYPE == 4  */
12551debfc3dSmrg 
12561debfc3dSmrg /* Define conversions from floating-point to fixed-point.  */
12571debfc3dSmrg #if FROM_TYPE == 3 && TO_TYPE == 4
12581debfc3dSmrg 
12591debfc3dSmrg #define BASE1(NUM)	(0x1.0p ## NUM)
12601debfc3dSmrg #define BASE2(NUM)	BASE1(NUM)
12611debfc3dSmrg #define BASE		BASE2(TO_FBITS)
12621debfc3dSmrg 
12631debfc3dSmrg #define FIXED_MAX1(NUM1,NUM2)	(0x1.0p ## NUM1 - 0x1.0p- ## NUM2)
12641debfc3dSmrg #define FIXED_MAX2(NUM1,NUM2)	FIXED_MAX1(NUM1,NUM2)
12651debfc3dSmrg #define FIXED_MAX	FIXED_MAX2(TO_IBITS,TO_FBITS)
12661debfc3dSmrg 
12671debfc3dSmrg #define FIXED_MIN1(NUM)	(-0x1.0p ## NUM)
12681debfc3dSmrg #define FIXED_MIN2(NUM)	FIXED_MIN1(NUM)
12691debfc3dSmrg #if TO_MODE_UNSIGNED == 0
12701debfc3dSmrg #define FIXED_MIN	FIXED_MIN2(TO_IBITS)
12711debfc3dSmrg #else
12721debfc3dSmrg #define FIXED_MIN	0.0
12731debfc3dSmrg #endif
12741debfc3dSmrg 
12751debfc3dSmrg #define FRACT		FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12761debfc3dSmrg #define SATFRACT	SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S)
12771debfc3dSmrg extern TO_FIXED_C_TYPE	FRACT (FROM_FLOAT_C_TYPE);
12781debfc3dSmrg extern TO_FIXED_C_TYPE	SATFRACT (FROM_FLOAT_C_TYPE);
12791debfc3dSmrg #endif /* FROM_TYPE == 3 && TO_TYPE == 4  */
12801debfc3dSmrg 
12811debfc3dSmrg #endif /* defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S)  */
12821debfc3dSmrg 
12831debfc3dSmrg #endif  /* _FIXED_BIT_H */
1284