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