148fb7bfaSmrg /* This is a software fixed-point library. 2*b1e83836Smrg Copyright (C) 2007-2022 Free Software Foundation, Inc. 348fb7bfaSmrg 448fb7bfaSmrg This file is part of GCC. 548fb7bfaSmrg 648fb7bfaSmrg GCC is free software; you can redistribute it and/or modify it under 748fb7bfaSmrg the terms of the GNU General Public License as published by the Free 848fb7bfaSmrg Software Foundation; either version 3, or (at your option) any later 948fb7bfaSmrg version. 1048fb7bfaSmrg 1148fb7bfaSmrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY 1248fb7bfaSmrg WARRANTY; without even the implied warranty of MERCHANTABILITY or 1348fb7bfaSmrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1448fb7bfaSmrg for more details. 1548fb7bfaSmrg 1648fb7bfaSmrg Under Section 7 of GPL version 3, you are granted additional 1748fb7bfaSmrg permissions described in the GCC Runtime Library Exception, version 1848fb7bfaSmrg 3.1, as published by the Free Software Foundation. 1948fb7bfaSmrg 2048fb7bfaSmrg You should have received a copy of the GNU General Public License and 2148fb7bfaSmrg a copy of the GCC Runtime Library Exception along with this program; 2248fb7bfaSmrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 2348fb7bfaSmrg <http://www.gnu.org/licenses/>. */ 2448fb7bfaSmrg 2548fb7bfaSmrg #ifndef _FIXED_BIT_H 2648fb7bfaSmrg #define _FIXED_BIT_H 2748fb7bfaSmrg 2848fb7bfaSmrg #ifdef LIBGCC2_GNU_PREFIX 2948fb7bfaSmrg #define LIBGCC2_FIXEDBIT_GNU_PREFIX 3048fb7bfaSmrg #endif 3148fb7bfaSmrg 3248fb7bfaSmrg /* To use this file we need to define one of the following: 3348fb7bfaSmrg QQ_MODE, UQQ_MODE, HQ_MODE, UHQ_MODE, SQ_MODE, USQ_MODE, DQ_MODE, UDQ_MODE, 3448fb7bfaSmrg TQ_MODE, UTQ_MODE, HA_MODE, UHA_MODE, SA_MODE, USA_MODE, DA_MODE, UDA_MODE, 3548fb7bfaSmrg TA_MODE, UTA_MODE. 3648fb7bfaSmrg Then, all operators for this machine mode will be created. 3748fb7bfaSmrg 3848fb7bfaSmrg Or, we need to define FROM_* TO_* for conversions from one mode to another 3948fb7bfaSmrg mode. The mode could be one of the following: 4048fb7bfaSmrg Fract: QQ, UQQ, HQ, UHQ, SQ, USQ, DQ, UDQ, TQ, UTQ 4148fb7bfaSmrg Accum: HA, UHA, SA, USA, DA, UDA, TA, UTA 4248fb7bfaSmrg Signed integer: QI, HI, SI, DI, TI 4348fb7bfaSmrg Unsigned integer: UQI, UHI, USI, UDI, UTI 4448fb7bfaSmrg Floating-point: SF, DF 4548fb7bfaSmrg Ex: If we define FROM_QQ and TO_SI, the conversion from QQ to SI is 4648fb7bfaSmrg generated. */ 4748fb7bfaSmrg 484d5abbe8Smrg #ifdef __LIBGCC_HAS_SF_MODE__ 494d5abbe8Smrg #define LIBGCC2_HAS_SF_MODE 1 504d5abbe8Smrg #else 514d5abbe8Smrg #define LIBGCC2_HAS_SF_MODE 0 5248fb7bfaSmrg #endif 5348fb7bfaSmrg 544d5abbe8Smrg #ifdef __LIBGCC_HAS_DF_MODE__ 554d5abbe8Smrg #define LIBGCC2_HAS_DF_MODE 1 564d5abbe8Smrg #else 574d5abbe8Smrg #define LIBGCC2_HAS_DF_MODE 0 5848fb7bfaSmrg #endif 5948fb7bfaSmrg 6048fb7bfaSmrg typedef int QItype __attribute__ ((mode (QI))); 6148fb7bfaSmrg typedef unsigned int UQItype __attribute__ ((mode (QI))); 6248fb7bfaSmrg typedef int HItype __attribute__ ((mode (HI))); 6348fb7bfaSmrg typedef unsigned int UHItype __attribute__ ((mode (HI))); 6448fb7bfaSmrg typedef _Fract QQtype __attribute__ ((mode (QQ))); 6548fb7bfaSmrg typedef unsigned _Fract UQQtype __attribute__ ((mode (UQQ))); 6648fb7bfaSmrg typedef _Fract HQtype __attribute__ ((mode (HQ))); 6748fb7bfaSmrg typedef unsigned _Fract UHQtype __attribute__ ((mode (UHQ))); 6848fb7bfaSmrg typedef _Fract HAtype __attribute__ ((mode (HA))); 6948fb7bfaSmrg typedef unsigned _Fract UHAtype __attribute__ ((mode (UHA))); 7048fb7bfaSmrg #define HAVE_QQ 1 7148fb7bfaSmrg #define HAVE_UQQ 1 7248fb7bfaSmrg #define HAVE_HQ 1 7348fb7bfaSmrg #define HAVE_UHQ 1 7448fb7bfaSmrg #define HAVE_HA 1 7548fb7bfaSmrg #define HAVE_UHA 1 7648fb7bfaSmrg #define HAVE_QI 1 7748fb7bfaSmrg #define HAVE_UQI 1 7848fb7bfaSmrg #define HAVE_HI 1 7948fb7bfaSmrg #define HAVE_UHI 1 8048fb7bfaSmrg #if MIN_UNITS_PER_WORD > 1 8148fb7bfaSmrg /* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1. */ 8248fb7bfaSmrg typedef int SItype __attribute__ ((mode (SI))); 8348fb7bfaSmrg typedef unsigned int USItype __attribute__ ((mode (SI))); 8448fb7bfaSmrg typedef _Fract SQtype __attribute__ ((mode (SQ))); 8548fb7bfaSmrg typedef unsigned _Fract USQtype __attribute__ ((mode (USQ))); 8648fb7bfaSmrg typedef _Fract SAtype __attribute__ ((mode (SA))); 8748fb7bfaSmrg typedef unsigned _Fract USAtype __attribute__ ((mode (USA))); 8848fb7bfaSmrg #define HAVE_SQ 1 8948fb7bfaSmrg #define HAVE_USQ 1 9048fb7bfaSmrg #define HAVE_SA 1 9148fb7bfaSmrg #define HAVE_USA 1 9248fb7bfaSmrg #define HAVE_SI 1 9348fb7bfaSmrg #define HAVE_USI 1 9448fb7bfaSmrg #if LONG_LONG_TYPE_SIZE > 32 9548fb7bfaSmrg /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2. */ 9648fb7bfaSmrg typedef int DItype __attribute__ ((mode (DI))); 9748fb7bfaSmrg typedef unsigned int UDItype __attribute__ ((mode (DI))); 9848fb7bfaSmrg typedef _Fract DQtype __attribute__ ((mode (DQ))); 9948fb7bfaSmrg typedef unsigned _Fract UDQtype __attribute__ ((mode (UDQ))); 10048fb7bfaSmrg typedef _Fract DAtype __attribute__ ((mode (DA))); 10148fb7bfaSmrg typedef unsigned _Fract UDAtype __attribute__ ((mode (UDA))); 10248fb7bfaSmrg #define HAVE_DQ 1 10348fb7bfaSmrg #define HAVE_UDQ 1 10448fb7bfaSmrg #define HAVE_DA 1 10548fb7bfaSmrg #define HAVE_UDA 1 10648fb7bfaSmrg #define HAVE_DI 1 10748fb7bfaSmrg #define HAVE_UDI 1 10848fb7bfaSmrg #if MIN_UNITS_PER_WORD > 4 10948fb7bfaSmrg /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4. */ 11048fb7bfaSmrg typedef int TItype __attribute__ ((mode (TI))); 11148fb7bfaSmrg typedef unsigned int UTItype __attribute__ ((mode (TI))); 11248fb7bfaSmrg typedef _Fract TQtype __attribute__ ((mode (TQ))); 11348fb7bfaSmrg typedef unsigned _Fract UTQtype __attribute__ ((mode (UTQ))); 11448fb7bfaSmrg typedef _Fract TAtype __attribute__ ((mode (TA))); 11548fb7bfaSmrg typedef unsigned _Fract UTAtype __attribute__ ((mode (UTA))); 11648fb7bfaSmrg #define HAVE_TQ 1 11748fb7bfaSmrg #define HAVE_UTQ 1 11848fb7bfaSmrg #define HAVE_TA 1 11948fb7bfaSmrg #define HAVE_UTA 1 12048fb7bfaSmrg #define HAVE_TI 1 12148fb7bfaSmrg #define HAVE_UTI 1 12248fb7bfaSmrg #endif 12348fb7bfaSmrg #endif 12448fb7bfaSmrg #endif 12548fb7bfaSmrg 12648fb7bfaSmrg #if LIBGCC2_HAS_SF_MODE 12748fb7bfaSmrg typedef float SFtype __attribute__ ((mode (SF))); 12848fb7bfaSmrg #define HAVE_SF 1 12948fb7bfaSmrg #endif 13048fb7bfaSmrg #if LIBGCC2_HAS_DF_MODE 13148fb7bfaSmrg typedef float DFtype __attribute__ ((mode (DF))); 13248fb7bfaSmrg #define HAVE_DF 1 13348fb7bfaSmrg #endif 13448fb7bfaSmrg 13548fb7bfaSmrg typedef int word_type __attribute__ ((mode (__word__))); 13648fb7bfaSmrg 13748fb7bfaSmrg /* Based on modes, we create many defines. */ 13848fb7bfaSmrg 13948fb7bfaSmrg #if defined (QQ_MODE) && (HAVE_QQ == 1) 14048fb7bfaSmrg #define FIXED_SIZE 1 /* in bytes. */ 14148fb7bfaSmrg #define INT_C_TYPE QItype 14248fb7bfaSmrg #define UINT_C_TYPE UQItype 14348fb7bfaSmrg #define DINT_C_TYPE HItype 14448fb7bfaSmrg #define DUINT_C_TYPE UHItype 14548fb7bfaSmrg #define MODE_NAME QQ 14648fb7bfaSmrg #define MODE_NAME_S qq 14748fb7bfaSmrg #define MODE_UNSIGNED 0 14848fb7bfaSmrg #endif 14948fb7bfaSmrg 15048fb7bfaSmrg #if defined (UQQ_MODE) && (HAVE_UQQ == 1) 15148fb7bfaSmrg #define FIXED_SIZE 1 /* in bytes. */ 15248fb7bfaSmrg #define INT_C_TYPE UQItype 15348fb7bfaSmrg #define UINT_C_TYPE UQItype 15448fb7bfaSmrg #define DINT_C_TYPE UHItype 15548fb7bfaSmrg #define DUINT_C_TYPE UHItype 15648fb7bfaSmrg #define MODE_NAME UQQ 15748fb7bfaSmrg #define MODE_NAME_S uqq 15848fb7bfaSmrg #define MODE_UNSIGNED 1 15948fb7bfaSmrg #endif 16048fb7bfaSmrg 16148fb7bfaSmrg #if defined (HQ_MODE) && (HAVE_HQ == 1) 16248fb7bfaSmrg #define FIXED_SIZE 2 /* in bytes. */ 16348fb7bfaSmrg #define INT_C_TYPE HItype 16448fb7bfaSmrg #define UINT_C_TYPE UHItype 16548fb7bfaSmrg 16648fb7bfaSmrg #if HAVE_SI == 1 16748fb7bfaSmrg #define DINT_C_TYPE SItype 16848fb7bfaSmrg #define DUINT_C_TYPE USItype 16948fb7bfaSmrg #else 17048fb7bfaSmrg #define HINT_C_TYPE QItype 17148fb7bfaSmrg #define HUINT_C_TYPE UQItype 17248fb7bfaSmrg #endif 17348fb7bfaSmrg 17448fb7bfaSmrg #define MODE_NAME HQ 17548fb7bfaSmrg #define MODE_NAME_S hq 17648fb7bfaSmrg #define MODE_UNSIGNED 0 17748fb7bfaSmrg #endif 17848fb7bfaSmrg 17948fb7bfaSmrg #if defined (UHQ_MODE) && (HAVE_UHQ == 1) 18048fb7bfaSmrg #define FIXED_SIZE 2 /* in bytes. */ 18148fb7bfaSmrg #define INT_C_TYPE UHItype 18248fb7bfaSmrg #define UINT_C_TYPE UHItype 18348fb7bfaSmrg 18448fb7bfaSmrg #if HAVE_SI == 1 18548fb7bfaSmrg #define DINT_C_TYPE USItype 18648fb7bfaSmrg #define DUINT_C_TYPE USItype 18748fb7bfaSmrg #else 18848fb7bfaSmrg #define HINT_C_TYPE UQItype 18948fb7bfaSmrg #define HUINT_C_TYPE UQItype 19048fb7bfaSmrg #endif 19148fb7bfaSmrg 19248fb7bfaSmrg #define MODE_NAME UHQ 19348fb7bfaSmrg #define MODE_NAME_S uhq 19448fb7bfaSmrg #define MODE_UNSIGNED 1 19548fb7bfaSmrg #endif 19648fb7bfaSmrg 19748fb7bfaSmrg #if defined (SQ_MODE) && (HAVE_SQ == 1) 19848fb7bfaSmrg #define FIXED_SIZE 4 /* in bytes. */ 19948fb7bfaSmrg #define INT_C_TYPE SItype 20048fb7bfaSmrg #define UINT_C_TYPE USItype 20148fb7bfaSmrg 20248fb7bfaSmrg #if HAVE_DI == 1 20348fb7bfaSmrg #define DINT_C_TYPE DItype 20448fb7bfaSmrg #define DUINT_C_TYPE UDItype 20548fb7bfaSmrg #else 20648fb7bfaSmrg #define HINT_C_TYPE HItype 20748fb7bfaSmrg #define HUINT_C_TYPE UHItype 20848fb7bfaSmrg #endif 20948fb7bfaSmrg 21048fb7bfaSmrg #define MODE_NAME SQ 21148fb7bfaSmrg #define MODE_NAME_S sq 21248fb7bfaSmrg #define MODE_UNSIGNED 0 21348fb7bfaSmrg #endif 21448fb7bfaSmrg 21548fb7bfaSmrg #if defined (USQ_MODE) && (HAVE_USQ == 1) 21648fb7bfaSmrg #define FIXED_SIZE 4 /* in bytes. */ 21748fb7bfaSmrg #define INT_C_TYPE USItype 21848fb7bfaSmrg #define UINT_C_TYPE USItype 21948fb7bfaSmrg 22048fb7bfaSmrg #if HAVE_DI == 1 22148fb7bfaSmrg #define DINT_C_TYPE UDItype 22248fb7bfaSmrg #define DUINT_C_TYPE UDItype 22348fb7bfaSmrg #else 22448fb7bfaSmrg #define HINT_C_TYPE UHItype 22548fb7bfaSmrg #define HUINT_C_TYPE UHItype 22648fb7bfaSmrg #endif 22748fb7bfaSmrg 22848fb7bfaSmrg #define MODE_NAME USQ 22948fb7bfaSmrg #define MODE_NAME_S usq 23048fb7bfaSmrg #define MODE_UNSIGNED 1 23148fb7bfaSmrg #endif 23248fb7bfaSmrg 23348fb7bfaSmrg #if defined (DQ_MODE) && (HAVE_DQ == 1) 23448fb7bfaSmrg #define FIXED_SIZE 8 /* in bytes. */ 23548fb7bfaSmrg #define INT_C_TYPE DItype 23648fb7bfaSmrg #define UINT_C_TYPE UDItype 23748fb7bfaSmrg 23848fb7bfaSmrg #if HAVE_TI == 1 23948fb7bfaSmrg #define DINT_C_TYPE TItype 24048fb7bfaSmrg #define DUINT_C_TYPE UTItype 24148fb7bfaSmrg #else 24248fb7bfaSmrg #define HINT_C_TYPE SItype 24348fb7bfaSmrg #define HUINT_C_TYPE USItype 24448fb7bfaSmrg #endif 24548fb7bfaSmrg 24648fb7bfaSmrg #define MODE_NAME DQ 24748fb7bfaSmrg #define MODE_NAME_S dq 24848fb7bfaSmrg #define MODE_UNSIGNED 0 24948fb7bfaSmrg #endif 25048fb7bfaSmrg 25148fb7bfaSmrg #if defined (UDQ_MODE) && (HAVE_UDQ == 1) 25248fb7bfaSmrg #define FIXED_SIZE 8 /* in bytes. */ 25348fb7bfaSmrg #define INT_C_TYPE UDItype 25448fb7bfaSmrg #define UINT_C_TYPE UDItype 25548fb7bfaSmrg 25648fb7bfaSmrg #if HAVE_TI == 1 25748fb7bfaSmrg #define DINT_C_TYPE UTItype 25848fb7bfaSmrg #define DUINT_C_TYPE UTItype 25948fb7bfaSmrg #else 26048fb7bfaSmrg #define HINT_C_TYPE USItype 26148fb7bfaSmrg #define HUINT_C_TYPE USItype 26248fb7bfaSmrg #endif 26348fb7bfaSmrg 26448fb7bfaSmrg #define MODE_NAME UDQ 26548fb7bfaSmrg #define MODE_NAME_S udq 26648fb7bfaSmrg #define MODE_UNSIGNED 1 26748fb7bfaSmrg #endif 26848fb7bfaSmrg 26948fb7bfaSmrg #if defined (TQ_MODE) && (HAVE_TQ == 1) 27048fb7bfaSmrg #define FIXED_SIZE 16 /* in bytes. */ 27148fb7bfaSmrg #define INT_C_TYPE TItype 27248fb7bfaSmrg #define UINT_C_TYPE UTItype 27348fb7bfaSmrg #define HINT_C_TYPE DItype 27448fb7bfaSmrg #define HUINT_C_TYPE UDItype 27548fb7bfaSmrg #define MODE_NAME TQ 27648fb7bfaSmrg #define MODE_NAME_S tq 27748fb7bfaSmrg #define MODE_UNSIGNED 0 27848fb7bfaSmrg #endif 27948fb7bfaSmrg 28048fb7bfaSmrg #if defined (UTQ_MODE) && (HAVE_UTQ == 1) 28148fb7bfaSmrg #define FIXED_SIZE 16 /* in bytes. */ 28248fb7bfaSmrg #define INT_C_TYPE UTItype 28348fb7bfaSmrg #define UINT_C_TYPE UTItype 28448fb7bfaSmrg #define HINT_C_TYPE UDItype 28548fb7bfaSmrg #define HUINT_C_TYPE UDItype 28648fb7bfaSmrg #define MODE_NAME UTQ 28748fb7bfaSmrg #define MODE_NAME_S utq 28848fb7bfaSmrg #define MODE_UNSIGNED 1 28948fb7bfaSmrg #endif 29048fb7bfaSmrg 29148fb7bfaSmrg #if defined (HA_MODE) && (HAVE_HA == 1) 29248fb7bfaSmrg #define FIXED_SIZE 2 /* in bytes. */ 29348fb7bfaSmrg #define INT_C_TYPE HItype 29448fb7bfaSmrg #define UINT_C_TYPE UHItype 29548fb7bfaSmrg 29648fb7bfaSmrg #if HAVE_SI == 1 29748fb7bfaSmrg #define DINT_C_TYPE SItype 29848fb7bfaSmrg #define DUINT_C_TYPE USItype 29948fb7bfaSmrg #else 30048fb7bfaSmrg #define HINT_C_TYPE QItype 30148fb7bfaSmrg #define HUINT_C_TYPE UQItype 30248fb7bfaSmrg #endif 30348fb7bfaSmrg 30448fb7bfaSmrg #define MODE_NAME HA 30548fb7bfaSmrg #define MODE_NAME_S ha 30648fb7bfaSmrg #define MODE_UNSIGNED 0 30748fb7bfaSmrg #endif 30848fb7bfaSmrg 30948fb7bfaSmrg #if defined (UHA_MODE) && (HAVE_UHA == 1) 31048fb7bfaSmrg #define FIXED_SIZE 2 /* in bytes. */ 31148fb7bfaSmrg #define INT_C_TYPE UHItype 31248fb7bfaSmrg #define UINT_C_TYPE UHItype 31348fb7bfaSmrg 31448fb7bfaSmrg #if HAVE_SI == 1 31548fb7bfaSmrg #define DINT_C_TYPE USItype 31648fb7bfaSmrg #define DUINT_C_TYPE USItype 31748fb7bfaSmrg #else 31848fb7bfaSmrg #define HINT_C_TYPE UQItype 31948fb7bfaSmrg #define HUINT_C_TYPE UQItype 32048fb7bfaSmrg #endif 32148fb7bfaSmrg 32248fb7bfaSmrg #define MODE_NAME UHA 32348fb7bfaSmrg #define MODE_NAME_S uha 32448fb7bfaSmrg #define MODE_UNSIGNED 1 32548fb7bfaSmrg #endif 32648fb7bfaSmrg 32748fb7bfaSmrg #if defined (SA_MODE) && (HAVE_SA == 1) 32848fb7bfaSmrg #define FIXED_SIZE 4 /* in bytes. */ 32948fb7bfaSmrg #define INT_C_TYPE SItype 33048fb7bfaSmrg #define UINT_C_TYPE USItype 33148fb7bfaSmrg 33248fb7bfaSmrg #if HAVE_DI == 1 33348fb7bfaSmrg #define DINT_C_TYPE DItype 33448fb7bfaSmrg #define DUINT_C_TYPE UDItype 33548fb7bfaSmrg #else 33648fb7bfaSmrg #define HINT_C_TYPE HItype 33748fb7bfaSmrg #define HUINT_C_TYPE UHItype 33848fb7bfaSmrg #endif 33948fb7bfaSmrg 34048fb7bfaSmrg #define MODE_NAME SA 34148fb7bfaSmrg #define MODE_NAME_S sa 34248fb7bfaSmrg #define MODE_UNSIGNED 0 34348fb7bfaSmrg #endif 34448fb7bfaSmrg 34548fb7bfaSmrg #if defined (USA_MODE) && (HAVE_USA == 1) 34648fb7bfaSmrg #define FIXED_SIZE 4 /* in bytes. */ 34748fb7bfaSmrg #define INT_C_TYPE USItype 34848fb7bfaSmrg #define UINT_C_TYPE USItype 34948fb7bfaSmrg 35048fb7bfaSmrg #if HAVE_DI == 1 35148fb7bfaSmrg #define DINT_C_TYPE UDItype 35248fb7bfaSmrg #define DUINT_C_TYPE UDItype 35348fb7bfaSmrg #else 35448fb7bfaSmrg #define HINT_C_TYPE UHItype 35548fb7bfaSmrg #define HUINT_C_TYPE UHItype 35648fb7bfaSmrg #endif 35748fb7bfaSmrg 35848fb7bfaSmrg #define MODE_NAME USA 35948fb7bfaSmrg #define MODE_NAME_S usa 36048fb7bfaSmrg #define MODE_UNSIGNED 1 36148fb7bfaSmrg #endif 36248fb7bfaSmrg 36348fb7bfaSmrg #if defined (DA_MODE) && (HAVE_DA == 1) 36448fb7bfaSmrg #define FIXED_SIZE 8 /* in bytes. */ 36548fb7bfaSmrg #define INT_C_TYPE DItype 36648fb7bfaSmrg #define UINT_C_TYPE UDItype 36748fb7bfaSmrg 36848fb7bfaSmrg #if HAVE_TI == 1 36948fb7bfaSmrg #define DINT_C_TYPE TItype 37048fb7bfaSmrg #define DUINT_C_TYPE UTItype 37148fb7bfaSmrg #else 37248fb7bfaSmrg #define HINT_C_TYPE SItype 37348fb7bfaSmrg #define HUINT_C_TYPE USItype 37448fb7bfaSmrg #endif 37548fb7bfaSmrg 37648fb7bfaSmrg #define MODE_NAME DA 37748fb7bfaSmrg #define MODE_NAME_S da 37848fb7bfaSmrg #define MODE_UNSIGNED 0 37948fb7bfaSmrg #endif 38048fb7bfaSmrg 38148fb7bfaSmrg #if defined (UDA_MODE) && (HAVE_UDA == 1) 38248fb7bfaSmrg #define FIXED_SIZE 8 /* in bytes. */ 38348fb7bfaSmrg #define INT_C_TYPE UDItype 38448fb7bfaSmrg #define UINT_C_TYPE UDItype 38548fb7bfaSmrg 38648fb7bfaSmrg #if HAVE_TI == 1 38748fb7bfaSmrg #define DINT_C_TYPE UTItype 38848fb7bfaSmrg #define DUINT_C_TYPE UTItype 38948fb7bfaSmrg #else 39048fb7bfaSmrg #define HINT_C_TYPE USItype 39148fb7bfaSmrg #define HUINT_C_TYPE USItype 39248fb7bfaSmrg #endif 39348fb7bfaSmrg 39448fb7bfaSmrg #define MODE_NAME UDA 39548fb7bfaSmrg #define MODE_NAME_S uda 39648fb7bfaSmrg #define MODE_UNSIGNED 1 39748fb7bfaSmrg #endif 39848fb7bfaSmrg 39948fb7bfaSmrg #if defined (TA_MODE) && (HAVE_TA == 1) 40048fb7bfaSmrg #define FIXED_SIZE 16 /* in bytes. */ 40148fb7bfaSmrg #define INT_C_TYPE TItype 40248fb7bfaSmrg #define UINT_C_TYPE UTItype 40348fb7bfaSmrg #define HINT_C_TYPE DItype 40448fb7bfaSmrg #define HUINT_C_TYPE UDItype 40548fb7bfaSmrg #define MODE_NAME TA 40648fb7bfaSmrg #define MODE_NAME_S ta 40748fb7bfaSmrg #define MODE_UNSIGNED 0 40848fb7bfaSmrg #endif 40948fb7bfaSmrg 41048fb7bfaSmrg #if defined (UTA_MODE) && (HAVE_UTA == 1) 41148fb7bfaSmrg #define FIXED_SIZE 16 /* in bytes. */ 41248fb7bfaSmrg #define INT_C_TYPE UTItype 41348fb7bfaSmrg #define UINT_C_TYPE UTItype 41448fb7bfaSmrg #define HINT_C_TYPE UDItype 41548fb7bfaSmrg #define HUINT_C_TYPE UDItype 41648fb7bfaSmrg #define MODE_NAME UTA 41748fb7bfaSmrg #define MODE_NAME_S uta 41848fb7bfaSmrg #define MODE_UNSIGNED 1 41948fb7bfaSmrg #endif 42048fb7bfaSmrg 42148fb7bfaSmrg /* The following defines are based on the previous defines. */ 42248fb7bfaSmrg 42348fb7bfaSmrg #if defined (HINT_C_TYPE) 42448fb7bfaSmrg #if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ 42548fb7bfaSmrg struct INTstruct {HINT_C_TYPE high, low;}; 42648fb7bfaSmrg #else 42748fb7bfaSmrg struct INTstruct {HINT_C_TYPE low, high;}; 42848fb7bfaSmrg #endif 42948fb7bfaSmrg 43048fb7bfaSmrg typedef union 43148fb7bfaSmrg { 43248fb7bfaSmrg struct INTstruct s; 43348fb7bfaSmrg INT_C_TYPE ll; 43448fb7bfaSmrg } INTunion; 43548fb7bfaSmrg #endif 43648fb7bfaSmrg 437f9a78e0eSmrg #define FIXED_WIDTH (FIXED_SIZE * __CHAR_BIT__) /* in bits. */ 43848fb7bfaSmrg #define FIXED_C_TYPE1(NAME) NAME ## type 43948fb7bfaSmrg #define FIXED_C_TYPE2(NAME) FIXED_C_TYPE1(NAME) 44048fb7bfaSmrg #define FIXED_C_TYPE FIXED_C_TYPE2(MODE_NAME) 44148fb7bfaSmrg #define FBITS1(NAME) __ ## NAME ## _FBIT__ 44248fb7bfaSmrg #define FBITS2(NAME) FBITS1(NAME) 44348fb7bfaSmrg #define FBITS FBITS2(MODE_NAME) 44448fb7bfaSmrg #define IBITS1(NAME) __ ## NAME ## _IBIT__ 44548fb7bfaSmrg #define IBITS2(NAME) IBITS1(NAME) 44648fb7bfaSmrg #define IBITS IBITS2(MODE_NAME) 44748fb7bfaSmrg #define I_F_BITS (FBITS + IBITS) 44848fb7bfaSmrg 44948fb7bfaSmrg #ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX 45048fb7bfaSmrg #define FIXED_OP(OP,MODE,NUM) __gnu_ ## OP ## MODE ## NUM 45148fb7bfaSmrg #else 45248fb7bfaSmrg #define FIXED_OP(OP,MODE,NUM) __ ## OP ## MODE ## NUM 45348fb7bfaSmrg #endif 45448fb7bfaSmrg 45548fb7bfaSmrg #define FIXED_SATURATE1_TEMP(NAME) FIXED_OP(saturate1,NAME,) 45648fb7bfaSmrg #define FIXED_SATURATE2_TEMP(NAME) FIXED_OP(saturate2,NAME,) 45748fb7bfaSmrg #define FIXED_MULHELPER_TEMP(NAME) FIXED_OP(mulhelper,NAME,) 45848fb7bfaSmrg #define FIXED_DIVHELPER_TEMP(NAME) FIXED_OP(divhelper,NAME,) 45948fb7bfaSmrg #define FIXED_ASHLHELPER_TEMP(NAME) FIXED_OP(ashlhelper,NAME,) 46048fb7bfaSmrg #define FIXED_ADD_TEMP(NAME) FIXED_OP(add,NAME,3) 46148fb7bfaSmrg #define FIXED_SSADD_TEMP(NAME) FIXED_OP(ssadd,NAME,3) 46248fb7bfaSmrg #define FIXED_USADD_TEMP(NAME) FIXED_OP(usadd,NAME,3) 46348fb7bfaSmrg #define FIXED_SUB_TEMP(NAME) FIXED_OP(sub,NAME,3) 46448fb7bfaSmrg #define FIXED_SSSUB_TEMP(NAME) FIXED_OP(sssub,NAME,3) 46548fb7bfaSmrg #define FIXED_USSUB_TEMP(NAME) FIXED_OP(ussub,NAME,3) 46648fb7bfaSmrg #define FIXED_MUL_TEMP(NAME) FIXED_OP(mul,NAME,3) 46748fb7bfaSmrg #define FIXED_SSMUL_TEMP(NAME) FIXED_OP(ssmul,NAME,3) 46848fb7bfaSmrg #define FIXED_USMUL_TEMP(NAME) FIXED_OP(usmul,NAME,3) 46948fb7bfaSmrg #define FIXED_DIV_TEMP(NAME) FIXED_OP(div,NAME,3) 47048fb7bfaSmrg #define FIXED_UDIV_TEMP(NAME) FIXED_OP(udiv,NAME,3) 47148fb7bfaSmrg #define FIXED_SSDIV_TEMP(NAME) FIXED_OP(ssdiv,NAME,3) 47248fb7bfaSmrg #define FIXED_USDIV_TEMP(NAME) FIXED_OP(usdiv,NAME,3) 47348fb7bfaSmrg #define FIXED_NEG_TEMP(NAME) FIXED_OP(neg,NAME,2) 47448fb7bfaSmrg #define FIXED_SSNEG_TEMP(NAME) FIXED_OP(ssneg,NAME,2) 47548fb7bfaSmrg #define FIXED_USNEG_TEMP(NAME) FIXED_OP(usneg,NAME,2) 47648fb7bfaSmrg #define FIXED_ASHL_TEMP(NAME) FIXED_OP(ashl,NAME,3) 47748fb7bfaSmrg #define FIXED_ASHR_TEMP(NAME) FIXED_OP(ashr,NAME,3) 47848fb7bfaSmrg #define FIXED_LSHR_TEMP(NAME) FIXED_OP(lshr,NAME,3) 47948fb7bfaSmrg #define FIXED_SSASHL_TEMP(NAME) FIXED_OP(ssashl,NAME,3) 48048fb7bfaSmrg #define FIXED_USASHL_TEMP(NAME) FIXED_OP(usashl,NAME,3) 48148fb7bfaSmrg #define FIXED_CMP_TEMP(NAME) FIXED_OP(cmp,NAME,2) 48248fb7bfaSmrg 48348fb7bfaSmrg #if defined (MODE_NAME) 48448fb7bfaSmrg #if defined (DINT_C_TYPE) 48548fb7bfaSmrg #define FIXED_SATURATE1 FIXED_SATURATE1_TEMP(MODE_NAME_S) 48648fb7bfaSmrg #else 48748fb7bfaSmrg #define FIXED_SATURATE2 FIXED_SATURATE2_TEMP(MODE_NAME_S) 48848fb7bfaSmrg #endif 48948fb7bfaSmrg #define FIXED_MULHELPER FIXED_MULHELPER_TEMP(MODE_NAME_S) 49048fb7bfaSmrg #define FIXED_DIVHELPER FIXED_DIVHELPER_TEMP(MODE_NAME_S) 49148fb7bfaSmrg #define FIXED_ASHLHELPER FIXED_ASHLHELPER_TEMP(MODE_NAME_S) 49248fb7bfaSmrg #define FIXED_ADD FIXED_ADD_TEMP(MODE_NAME_S) 49348fb7bfaSmrg #define FIXED_SUB FIXED_SUB_TEMP(MODE_NAME_S) 49448fb7bfaSmrg #define FIXED_MUL FIXED_MUL_TEMP(MODE_NAME_S) 49548fb7bfaSmrg #define FIXED_NEG FIXED_NEG_TEMP(MODE_NAME_S) 49648fb7bfaSmrg #define FIXED_ASHL FIXED_ASHL_TEMP(MODE_NAME_S) 49748fb7bfaSmrg #define FIXED_CMP FIXED_CMP_TEMP(MODE_NAME_S) 49848fb7bfaSmrg 49948fb7bfaSmrg /* The following functions are for all fixed-point modes. */ 50048fb7bfaSmrg #if defined (DINT_C_TYPE) 50148fb7bfaSmrg extern void FIXED_SATURATE1 (DINT_C_TYPE *); 50248fb7bfaSmrg #else 50348fb7bfaSmrg extern void FIXED_SATURATE2 (INT_C_TYPE *, INT_C_TYPE *); 50448fb7bfaSmrg #endif 50548fb7bfaSmrg extern FIXED_C_TYPE FIXED_MULHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type); 50648fb7bfaSmrg extern FIXED_C_TYPE FIXED_DIVHELPER (FIXED_C_TYPE, FIXED_C_TYPE, word_type); 50748fb7bfaSmrg extern FIXED_C_TYPE FIXED_ASHLHELPER (FIXED_C_TYPE, word_type, word_type); 50848fb7bfaSmrg extern FIXED_C_TYPE FIXED_ADD (FIXED_C_TYPE, FIXED_C_TYPE); 50948fb7bfaSmrg extern FIXED_C_TYPE FIXED_SUB (FIXED_C_TYPE, FIXED_C_TYPE); 51048fb7bfaSmrg extern FIXED_C_TYPE FIXED_MUL (FIXED_C_TYPE, FIXED_C_TYPE); 51148fb7bfaSmrg extern FIXED_C_TYPE FIXED_NEG (FIXED_C_TYPE); 51248fb7bfaSmrg extern FIXED_C_TYPE FIXED_ASHL (FIXED_C_TYPE, word_type); 51348fb7bfaSmrg extern word_type FIXED_CMP (FIXED_C_TYPE, FIXED_C_TYPE); 51448fb7bfaSmrg #endif 51548fb7bfaSmrg 51648fb7bfaSmrg #if MODE_UNSIGNED == 0 /* Signed types. */ 51748fb7bfaSmrg #define PADDING_BITS (FIXED_WIDTH - 1 - I_F_BITS) 51848fb7bfaSmrg #define NONPADDING_BITS (1 + I_F_BITS) 51948fb7bfaSmrg 52048fb7bfaSmrg #if defined (MODE_NAME) 52148fb7bfaSmrg #define FIXED_DIV FIXED_DIV_TEMP(MODE_NAME_S) 52248fb7bfaSmrg #define FIXED_ASHR FIXED_ASHR_TEMP(MODE_NAME_S) 52348fb7bfaSmrg #define FIXED_SSADD FIXED_SSADD_TEMP(MODE_NAME_S) 52448fb7bfaSmrg #define FIXED_SSSUB FIXED_SSSUB_TEMP(MODE_NAME_S) 52548fb7bfaSmrg #define FIXED_SSMUL FIXED_SSMUL_TEMP(MODE_NAME_S) 52648fb7bfaSmrg #define FIXED_SSDIV FIXED_SSDIV_TEMP(MODE_NAME_S) 52748fb7bfaSmrg #define FIXED_SSNEG FIXED_SSNEG_TEMP(MODE_NAME_S) 52848fb7bfaSmrg #define FIXED_SSASHL FIXED_SSASHL_TEMP(MODE_NAME_S) 52948fb7bfaSmrg 53048fb7bfaSmrg /* The following functions are for signed fixed-point modes. */ 53148fb7bfaSmrg extern FIXED_C_TYPE FIXED_DIV (FIXED_C_TYPE, FIXED_C_TYPE); 53248fb7bfaSmrg extern FIXED_C_TYPE FIXED_ASHR (FIXED_C_TYPE, word_type); 53348fb7bfaSmrg extern FIXED_C_TYPE FIXED_SSADD (FIXED_C_TYPE, FIXED_C_TYPE); 53448fb7bfaSmrg extern FIXED_C_TYPE FIXED_SSSUB (FIXED_C_TYPE, FIXED_C_TYPE); 53548fb7bfaSmrg extern FIXED_C_TYPE FIXED_SSMUL (FIXED_C_TYPE, FIXED_C_TYPE); 53648fb7bfaSmrg extern FIXED_C_TYPE FIXED_SSDIV (FIXED_C_TYPE, FIXED_C_TYPE); 53748fb7bfaSmrg extern FIXED_C_TYPE FIXED_SSNEG (FIXED_C_TYPE); 53848fb7bfaSmrg extern FIXED_C_TYPE FIXED_SSASHL (FIXED_C_TYPE, word_type); 53948fb7bfaSmrg #endif 54048fb7bfaSmrg 54148fb7bfaSmrg #else /* Unsigned types. */ 54248fb7bfaSmrg #define PADDING_BITS (FIXED_WIDTH - I_F_BITS) 54348fb7bfaSmrg #define NONPADDING_BITS (I_F_BITS) 54448fb7bfaSmrg 54548fb7bfaSmrg #if defined (MODE_NAME) 54648fb7bfaSmrg #define FIXED_UDIV FIXED_UDIV_TEMP(MODE_NAME_S) 54748fb7bfaSmrg #define FIXED_LSHR FIXED_LSHR_TEMP(MODE_NAME_S) 54848fb7bfaSmrg #define FIXED_USDIV FIXED_USDIV_TEMP(MODE_NAME_S) 54948fb7bfaSmrg #define FIXED_USADD FIXED_USADD_TEMP(MODE_NAME_S) 55048fb7bfaSmrg #define FIXED_USSUB FIXED_USSUB_TEMP(MODE_NAME_S) 55148fb7bfaSmrg #define FIXED_USMUL FIXED_USMUL_TEMP(MODE_NAME_S) 55248fb7bfaSmrg #define FIXED_USNEG FIXED_USNEG_TEMP(MODE_NAME_S) 55348fb7bfaSmrg #define FIXED_USASHL FIXED_USASHL_TEMP(MODE_NAME_S) 55448fb7bfaSmrg 55548fb7bfaSmrg /* The following functions are for unsigned fixed-point modes. */ 55648fb7bfaSmrg extern FIXED_C_TYPE FIXED_UDIV (FIXED_C_TYPE, FIXED_C_TYPE); 55748fb7bfaSmrg extern FIXED_C_TYPE FIXED_LSHR (FIXED_C_TYPE, word_type); 55848fb7bfaSmrg extern FIXED_C_TYPE FIXED_USADD (FIXED_C_TYPE, FIXED_C_TYPE); 55948fb7bfaSmrg extern FIXED_C_TYPE FIXED_USSUB (FIXED_C_TYPE, FIXED_C_TYPE); 56048fb7bfaSmrg extern FIXED_C_TYPE FIXED_USMUL (FIXED_C_TYPE, FIXED_C_TYPE); 56148fb7bfaSmrg extern FIXED_C_TYPE FIXED_USDIV (FIXED_C_TYPE, FIXED_C_TYPE); 56248fb7bfaSmrg extern FIXED_C_TYPE FIXED_USNEG (FIXED_C_TYPE); 56348fb7bfaSmrg extern FIXED_C_TYPE FIXED_USASHL (FIXED_C_TYPE, word_type); 56448fb7bfaSmrg #endif 56548fb7bfaSmrg 56648fb7bfaSmrg #endif /* End of testing MODE_UNSIGNED. */ 56748fb7bfaSmrg 56848fb7bfaSmrg /* This define is to check if this mode have any padding bits. */ 56948fb7bfaSmrg #define HAVE_PADDING_BITS (PADDING_BITS > 0) 57048fb7bfaSmrg 57148fb7bfaSmrg /* ------------------------------------------------------------------------ */ 57248fb7bfaSmrg /* The following defines are for conversions. */ 57348fb7bfaSmrg 57448fb7bfaSmrg #if defined (FROM_QI) && HAVE_QI == 1 57548fb7bfaSmrg #define FROM_TYPE 1 /* Signed integer. */ 57648fb7bfaSmrg #define FROM_INT_C_TYPE QItype 57748fb7bfaSmrg #define FROM_SINT_C_TYPE QItype 57848fb7bfaSmrg #define FROM_UINT_C_TYPE UQItype 57948fb7bfaSmrg #define FROM_MODE_NAME_S qi 58048fb7bfaSmrg #define FROM_INT_SIZE 1 /* in bytes. */ 58148fb7bfaSmrg 58248fb7bfaSmrg #elif defined (FROM_HI) && HAVE_HI == 1 58348fb7bfaSmrg #define FROM_TYPE 1 /* Signed integer. */ 58448fb7bfaSmrg #define FROM_INT_C_TYPE HItype 58548fb7bfaSmrg #define FROM_SINT_C_TYPE HItype 58648fb7bfaSmrg #define FROM_UINT_C_TYPE UHItype 58748fb7bfaSmrg #define FROM_MODE_NAME_S hi 58848fb7bfaSmrg #define FROM_INT_SIZE 2 /* in bytes. */ 58948fb7bfaSmrg 59048fb7bfaSmrg #elif defined (FROM_SI) && HAVE_SI == 1 59148fb7bfaSmrg #define FROM_TYPE 1 /* Signed integer. */ 59248fb7bfaSmrg #define FROM_INT_C_TYPE SItype 59348fb7bfaSmrg #define FROM_SINT_C_TYPE SItype 59448fb7bfaSmrg #define FROM_UINT_C_TYPE USItype 59548fb7bfaSmrg #define FROM_MODE_NAME_S si 59648fb7bfaSmrg #define FROM_INT_SIZE 4 /* in bytes. */ 59748fb7bfaSmrg 59848fb7bfaSmrg #elif defined (FROM_DI) && HAVE_DI == 1 59948fb7bfaSmrg #define FROM_TYPE 1 /* Signed integer. */ 60048fb7bfaSmrg #define FROM_INT_C_TYPE DItype 60148fb7bfaSmrg #define FROM_SINT_C_TYPE DItype 60248fb7bfaSmrg #define FROM_UINT_C_TYPE UDItype 60348fb7bfaSmrg #define FROM_MODE_NAME_S di 60448fb7bfaSmrg #define FROM_INT_SIZE 8 /* in bytes. */ 60548fb7bfaSmrg 60648fb7bfaSmrg #elif defined (FROM_TI) && HAVE_TI == 1 60748fb7bfaSmrg #define FROM_TYPE 1 /* Signed integer. */ 60848fb7bfaSmrg #define FROM_INT_C_TYPE TItype 60948fb7bfaSmrg #define FROM_SINT_C_TYPE TItype 61048fb7bfaSmrg #define FROM_UINT_C_TYPE UTItype 61148fb7bfaSmrg #define FROM_MODE_NAME_S ti 61248fb7bfaSmrg #define FROM_INT_SIZE 16 /* in bytes. */ 61348fb7bfaSmrg 61448fb7bfaSmrg #elif defined (FROM_UQI) && HAVE_UQI == 1 61548fb7bfaSmrg #define FROM_TYPE 2 /* Unsigned integer. */ 61648fb7bfaSmrg #define FROM_INT_C_TYPE QItype 61748fb7bfaSmrg #define FROM_SINT_C_TYPE QItype 61848fb7bfaSmrg #define FROM_UINT_C_TYPE UQItype 61948fb7bfaSmrg #define FROM_MODE_NAME_S qi 62048fb7bfaSmrg #define FROM_INT_SIZE 1 /* in bytes. */ 62148fb7bfaSmrg 62248fb7bfaSmrg #elif defined (FROM_UHI) && HAVE_UHI == 1 62348fb7bfaSmrg #define FROM_TYPE 2 /* Unsigned integer. */ 62448fb7bfaSmrg #define FROM_INT_C_TYPE UHItype 62548fb7bfaSmrg #define FROM_SINT_C_TYPE HItype 62648fb7bfaSmrg #define FROM_UINT_C_TYPE UHItype 62748fb7bfaSmrg #define FROM_MODE_NAME_S hi 62848fb7bfaSmrg #define FROM_INT_SIZE 2 /* in bytes. */ 62948fb7bfaSmrg 63048fb7bfaSmrg #elif defined (FROM_USI) && HAVE_USI == 1 63148fb7bfaSmrg #define FROM_TYPE 2 /* Unsigned integer. */ 63248fb7bfaSmrg #define FROM_INT_C_TYPE USItype 63348fb7bfaSmrg #define FROM_SINT_C_TYPE SItype 63448fb7bfaSmrg #define FROM_UINT_C_TYPE USItype 63548fb7bfaSmrg #define FROM_MODE_NAME_S si 63648fb7bfaSmrg #define FROM_INT_SIZE 4 /* in bytes. */ 63748fb7bfaSmrg 63848fb7bfaSmrg #elif defined (FROM_UDI) && HAVE_UDI == 1 63948fb7bfaSmrg #define FROM_TYPE 2 /* Unsigned integer. */ 64048fb7bfaSmrg #define FROM_INT_C_TYPE UDItype 64148fb7bfaSmrg #define FROM_SINT_C_TYPE DItype 64248fb7bfaSmrg #define FROM_UINT_C_TYPE UDItype 64348fb7bfaSmrg #define FROM_MODE_NAME_S di 64448fb7bfaSmrg #define FROM_INT_SIZE 8 /* in bytes. */ 64548fb7bfaSmrg 64648fb7bfaSmrg #elif defined (FROM_UTI) && HAVE_UTI == 1 64748fb7bfaSmrg #define FROM_TYPE 2 /* Unsigned integer. */ 64848fb7bfaSmrg #define FROM_INT_C_TYPE UTItype 64948fb7bfaSmrg #define FROM_SINT_C_TYPE TItype 65048fb7bfaSmrg #define FROM_UINT_C_TYPE UTItype 65148fb7bfaSmrg #define FROM_MODE_NAME_S ti 65248fb7bfaSmrg #define FROM_INT_SIZE 16 /* in bytes. */ 65348fb7bfaSmrg 65448fb7bfaSmrg #elif defined (FROM_SF) && HAVE_SF == 1 65548fb7bfaSmrg #define FROM_TYPE 3 /* Floating-point. */ 65648fb7bfaSmrg #define FROM_FLOAT_C_TYPE SFtype 65748fb7bfaSmrg #define FROM_MODE_NAME_S sf 65848fb7bfaSmrg 65948fb7bfaSmrg #elif defined (FROM_DF) && HAVE_DF == 1 66048fb7bfaSmrg #define FROM_TYPE 3 /* Floating-point. */ 66148fb7bfaSmrg #define FROM_FLOAT_C_TYPE DFtype 66248fb7bfaSmrg #define FROM_MODE_NAME_S df 66348fb7bfaSmrg 66448fb7bfaSmrg #elif defined (FROM_QQ) && HAVE_QQ == 1 66548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 66648fb7bfaSmrg #define FROM_MODE_NAME QQ 66748fb7bfaSmrg #define FROM_MODE_NAME_S qq 66848fb7bfaSmrg #define FROM_INT_C_TYPE QItype 66948fb7bfaSmrg #define FROM_SINT_C_TYPE QItype 67048fb7bfaSmrg #define FROM_UINT_C_TYPE UQItype 67148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 67248fb7bfaSmrg #define FROM_FIXED_SIZE 1 /* in bytes. */ 67348fb7bfaSmrg 67448fb7bfaSmrg #elif defined (FROM_HQ) && HAVE_HQ == 1 67548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 67648fb7bfaSmrg #define FROM_MODE_NAME HQ 67748fb7bfaSmrg #define FROM_MODE_NAME_S hq 67848fb7bfaSmrg #define FROM_INT_C_TYPE HItype 67948fb7bfaSmrg #define FROM_SINT_C_TYPE HItype 68048fb7bfaSmrg #define FROM_UINT_C_TYPE UHItype 68148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 68248fb7bfaSmrg #define FROM_FIXED_SIZE 2 /* in bytes. */ 68348fb7bfaSmrg 68448fb7bfaSmrg #elif defined (FROM_SQ) && HAVE_SQ == 1 68548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 68648fb7bfaSmrg #define FROM_MODE_NAME SQ 68748fb7bfaSmrg #define FROM_MODE_NAME_S sq 68848fb7bfaSmrg #define FROM_INT_C_TYPE SItype 68948fb7bfaSmrg #define FROM_SINT_C_TYPE SItype 69048fb7bfaSmrg #define FROM_UINT_C_TYPE USItype 69148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 69248fb7bfaSmrg #define FROM_FIXED_SIZE 4 /* in bytes. */ 69348fb7bfaSmrg 69448fb7bfaSmrg #elif defined (FROM_DQ) && HAVE_DQ == 1 69548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 69648fb7bfaSmrg #define FROM_MODE_NAME DQ 69748fb7bfaSmrg #define FROM_MODE_NAME_S dq 69848fb7bfaSmrg #define FROM_INT_C_TYPE DItype 69948fb7bfaSmrg #define FROM_SINT_C_TYPE DItype 70048fb7bfaSmrg #define FROM_UINT_C_TYPE UDItype 70148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 70248fb7bfaSmrg #define FROM_FIXED_SIZE 8 /* in bytes. */ 70348fb7bfaSmrg 70448fb7bfaSmrg #elif defined (FROM_TQ) && HAVE_TQ == 1 70548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 70648fb7bfaSmrg #define FROM_MODE_NAME TQ 70748fb7bfaSmrg #define FROM_MODE_NAME_S tq 70848fb7bfaSmrg #define FROM_INT_C_TYPE TItype 70948fb7bfaSmrg #define FROM_SINT_C_TYPE TItype 71048fb7bfaSmrg #define FROM_UINT_C_TYPE UTItype 71148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 71248fb7bfaSmrg #define FROM_FIXED_SIZE 16 /* in bytes. */ 71348fb7bfaSmrg 71448fb7bfaSmrg #elif defined (FROM_UQQ) && HAVE_UQQ == 1 71548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 71648fb7bfaSmrg #define FROM_MODE_NAME UQQ 71748fb7bfaSmrg #define FROM_MODE_NAME_S uqq 71848fb7bfaSmrg #define FROM_INT_C_TYPE UQItype 71948fb7bfaSmrg #define FROM_SINT_C_TYPE QItype 72048fb7bfaSmrg #define FROM_UINT_C_TYPE UQItype 72148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 72248fb7bfaSmrg #define FROM_FIXED_SIZE 1 /* in bytes. */ 72348fb7bfaSmrg 72448fb7bfaSmrg #elif defined (FROM_UHQ) && HAVE_UHQ == 1 72548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 72648fb7bfaSmrg #define FROM_MODE_NAME UHQ 72748fb7bfaSmrg #define FROM_MODE_NAME_S uhq 72848fb7bfaSmrg #define FROM_INT_C_TYPE UHItype 72948fb7bfaSmrg #define FROM_SINT_C_TYPE HItype 73048fb7bfaSmrg #define FROM_UINT_C_TYPE UHItype 73148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 73248fb7bfaSmrg #define FROM_FIXED_SIZE 2 /* in bytes. */ 73348fb7bfaSmrg 73448fb7bfaSmrg #elif defined (FROM_USQ) && HAVE_USQ == 1 73548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 73648fb7bfaSmrg #define FROM_MODE_NAME USQ 73748fb7bfaSmrg #define FROM_MODE_NAME_S usq 73848fb7bfaSmrg #define FROM_INT_C_TYPE USItype 73948fb7bfaSmrg #define FROM_SINT_C_TYPE SItype 74048fb7bfaSmrg #define FROM_UINT_C_TYPE USItype 74148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 74248fb7bfaSmrg #define FROM_FIXED_SIZE 4 /* in bytes. */ 74348fb7bfaSmrg 74448fb7bfaSmrg #elif defined (FROM_UDQ) && HAVE_UDQ == 1 74548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 74648fb7bfaSmrg #define FROM_MODE_NAME UDQ 74748fb7bfaSmrg #define FROM_MODE_NAME_S udq 74848fb7bfaSmrg #define FROM_INT_C_TYPE UDItype 74948fb7bfaSmrg #define FROM_SINT_C_TYPE DItype 75048fb7bfaSmrg #define FROM_UINT_C_TYPE UDItype 75148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 75248fb7bfaSmrg #define FROM_FIXED_SIZE 8 /* in bytes. */ 75348fb7bfaSmrg 75448fb7bfaSmrg #elif defined (FROM_UTQ) && HAVE_UTQ == 1 75548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 75648fb7bfaSmrg #define FROM_MODE_NAME UTQ 75748fb7bfaSmrg #define FROM_MODE_NAME_S utq 75848fb7bfaSmrg #define FROM_INT_C_TYPE UTItype 75948fb7bfaSmrg #define FROM_SINT_C_TYPE TItype 76048fb7bfaSmrg #define FROM_UINT_C_TYPE UTItype 76148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 76248fb7bfaSmrg #define FROM_FIXED_SIZE 16 /* in bytes. */ 76348fb7bfaSmrg 76448fb7bfaSmrg #elif defined (FROM_HA) && HAVE_HA == 1 76548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 76648fb7bfaSmrg #define FROM_MODE_NAME HA 76748fb7bfaSmrg #define FROM_MODE_NAME_S ha 76848fb7bfaSmrg #define FROM_INT_C_TYPE HItype 76948fb7bfaSmrg #define FROM_SINT_C_TYPE HItype 77048fb7bfaSmrg #define FROM_UINT_C_TYPE UHItype 77148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 77248fb7bfaSmrg #define FROM_FIXED_SIZE 2 /* in bytes. */ 77348fb7bfaSmrg 77448fb7bfaSmrg #elif defined (FROM_SA) && HAVE_SA == 1 77548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 77648fb7bfaSmrg #define FROM_MODE_NAME SA 77748fb7bfaSmrg #define FROM_MODE_NAME_S sa 77848fb7bfaSmrg #define FROM_INT_C_TYPE SItype 77948fb7bfaSmrg #define FROM_SINT_C_TYPE SItype 78048fb7bfaSmrg #define FROM_UINT_C_TYPE USItype 78148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 78248fb7bfaSmrg #define FROM_FIXED_SIZE 4 /* in bytes. */ 78348fb7bfaSmrg 78448fb7bfaSmrg #elif defined (FROM_DA) && HAVE_DA == 1 78548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 78648fb7bfaSmrg #define FROM_MODE_NAME DA 78748fb7bfaSmrg #define FROM_MODE_NAME_S da 78848fb7bfaSmrg #define FROM_INT_C_TYPE DItype 78948fb7bfaSmrg #define FROM_SINT_C_TYPE DItype 79048fb7bfaSmrg #define FROM_UINT_C_TYPE UDItype 79148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 79248fb7bfaSmrg #define FROM_FIXED_SIZE 8 /* in bytes. */ 79348fb7bfaSmrg 79448fb7bfaSmrg #elif defined (FROM_TA) && HAVE_TA == 1 79548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 79648fb7bfaSmrg #define FROM_MODE_NAME TA 79748fb7bfaSmrg #define FROM_MODE_NAME_S ta 79848fb7bfaSmrg #define FROM_INT_C_TYPE TItype 79948fb7bfaSmrg #define FROM_SINT_C_TYPE TItype 80048fb7bfaSmrg #define FROM_UINT_C_TYPE UTItype 80148fb7bfaSmrg #define FROM_MODE_UNSIGNED 0 80248fb7bfaSmrg #define FROM_FIXED_SIZE 16 /* in bytes. */ 80348fb7bfaSmrg 80448fb7bfaSmrg #elif defined (FROM_UHA) && HAVE_UHA == 1 80548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 80648fb7bfaSmrg #define FROM_MODE_NAME UHA 80748fb7bfaSmrg #define FROM_MODE_NAME_S uha 80848fb7bfaSmrg #define FROM_INT_C_TYPE UHItype 80948fb7bfaSmrg #define FROM_SINT_C_TYPE HItype 81048fb7bfaSmrg #define FROM_UINT_C_TYPE UHItype 81148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 81248fb7bfaSmrg #define FROM_FIXED_SIZE 2 /* in bytes. */ 81348fb7bfaSmrg 81448fb7bfaSmrg #elif defined (FROM_USA) && HAVE_USA == 1 81548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 81648fb7bfaSmrg #define FROM_MODE_NAME USA 81748fb7bfaSmrg #define FROM_MODE_NAME_S usa 81848fb7bfaSmrg #define FROM_INT_C_TYPE USItype 81948fb7bfaSmrg #define FROM_SINT_C_TYPE SItype 82048fb7bfaSmrg #define FROM_UINT_C_TYPE USItype 82148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 82248fb7bfaSmrg #define FROM_FIXED_SIZE 4 /* in bytes. */ 82348fb7bfaSmrg 82448fb7bfaSmrg #elif defined (FROM_UDA) && HAVE_UDA == 1 82548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 82648fb7bfaSmrg #define FROM_MODE_NAME UDA 82748fb7bfaSmrg #define FROM_MODE_NAME_S uda 82848fb7bfaSmrg #define FROM_INT_C_TYPE UDItype 82948fb7bfaSmrg #define FROM_SINT_C_TYPE DItype 83048fb7bfaSmrg #define FROM_UINT_C_TYPE UDItype 83148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 83248fb7bfaSmrg #define FROM_FIXED_SIZE 8 /* in bytes. */ 83348fb7bfaSmrg 83448fb7bfaSmrg #elif defined (FROM_UTA) && HAVE_UTA == 1 83548fb7bfaSmrg #define FROM_TYPE 4 /* Fixed-point. */ 83648fb7bfaSmrg #define FROM_MODE_NAME UTA 83748fb7bfaSmrg #define FROM_MODE_NAME_S uta 83848fb7bfaSmrg #define FROM_INT_C_TYPE UTItype 83948fb7bfaSmrg #define FROM_SINT_C_TYPE TItype 84048fb7bfaSmrg #define FROM_UINT_C_TYPE UTItype 84148fb7bfaSmrg #define FROM_MODE_UNSIGNED 1 84248fb7bfaSmrg #define FROM_FIXED_SIZE 16 /* in bytes. */ 84348fb7bfaSmrg 84448fb7bfaSmrg #endif 84548fb7bfaSmrg 84648fb7bfaSmrg #if defined (TO_QI) && HAVE_QI == 1 && !defined (FROM_QI) 84748fb7bfaSmrg #define TO_TYPE 1 /* Signed integer. */ 84848fb7bfaSmrg #define TO_INT_C_TYPE QItype 84948fb7bfaSmrg #define TO_SINT_C_TYPE QItype 85048fb7bfaSmrg #define TO_UINT_C_TYPE UQItype 85148fb7bfaSmrg #define TO_MODE_NAME_S qi 85248fb7bfaSmrg 85348fb7bfaSmrg #elif defined (TO_HI) && HAVE_HI == 1 && !defined (FROM_HI) 85448fb7bfaSmrg #define TO_TYPE 1 /* Signed integer. */ 85548fb7bfaSmrg #define TO_INT_C_TYPE HItype 85648fb7bfaSmrg #define TO_SINT_C_TYPE HItype 85748fb7bfaSmrg #define TO_UINT_C_TYPE UHItype 85848fb7bfaSmrg #define TO_MODE_NAME_S hi 85948fb7bfaSmrg 86048fb7bfaSmrg #elif defined (TO_SI) && HAVE_SI == 1 && !defined (FROM_SI) 86148fb7bfaSmrg #define TO_TYPE 1 /* Signed integer. */ 86248fb7bfaSmrg #define TO_INT_C_TYPE SItype 86348fb7bfaSmrg #define TO_SINT_C_TYPE SItype 86448fb7bfaSmrg #define TO_UINT_C_TYPE USItype 86548fb7bfaSmrg #define TO_MODE_NAME_S si 86648fb7bfaSmrg 86748fb7bfaSmrg #elif defined (TO_DI) && HAVE_DI == 1 && !defined (FROM_DI) 86848fb7bfaSmrg #define TO_TYPE 1 /* Signed integer. */ 86948fb7bfaSmrg #define TO_INT_C_TYPE DItype 87048fb7bfaSmrg #define TO_SINT_C_TYPE DItype 87148fb7bfaSmrg #define TO_UINT_C_TYPE UDItype 87248fb7bfaSmrg #define TO_MODE_NAME_S di 87348fb7bfaSmrg 87448fb7bfaSmrg #elif defined (TO_TI) && HAVE_TI == 1 && !defined (FROM_TI) 87548fb7bfaSmrg #define TO_TYPE 1 /* Signed integer. */ 87648fb7bfaSmrg #define TO_INT_C_TYPE TItype 87748fb7bfaSmrg #define TO_SINT_C_TYPE TItype 87848fb7bfaSmrg #define TO_UINT_C_TYPE UTItype 87948fb7bfaSmrg #define TO_MODE_NAME_S ti 88048fb7bfaSmrg 88148fb7bfaSmrg #elif defined (TO_UQI) && HAVE_UQI == 1 && !defined (FROM_UQI) 88248fb7bfaSmrg #define TO_TYPE 2 /* Unsigned integer. */ 88348fb7bfaSmrg #define TO_INT_C_TYPE UQItype 88448fb7bfaSmrg #define TO_SINT_C_TYPE QItype 88548fb7bfaSmrg #define TO_UINT_C_TYPE UQItype 88648fb7bfaSmrg #define TO_MODE_NAME_S qi 88748fb7bfaSmrg 88848fb7bfaSmrg #elif defined (TO_UHI) && HAVE_UHI == 1 && !defined (FROM_UHI) 88948fb7bfaSmrg #define TO_TYPE 2 /* Unsigned integer. */ 89048fb7bfaSmrg #define TO_INT_C_TYPE UHItype 89148fb7bfaSmrg #define TO_SINT_C_TYPE HItype 89248fb7bfaSmrg #define TO_UINT_C_TYPE UHItype 89348fb7bfaSmrg #define TO_MODE_NAME_S hi 89448fb7bfaSmrg 89548fb7bfaSmrg #elif defined (TO_USI) && HAVE_USI == 1 && !defined (FROM_USI) 89648fb7bfaSmrg #define TO_TYPE 2 /* Unsigned integer. */ 89748fb7bfaSmrg #define TO_INT_C_TYPE USItype 89848fb7bfaSmrg #define TO_SINT_C_TYPE SItype 89948fb7bfaSmrg #define TO_UINT_C_TYPE USItype 90048fb7bfaSmrg #define TO_MODE_NAME_S si 90148fb7bfaSmrg 90248fb7bfaSmrg #elif defined (TO_UDI) && HAVE_UDI == 1 && !defined (FROM_UDI) 90348fb7bfaSmrg #define TO_TYPE 2 /* Unsigned integer. */ 90448fb7bfaSmrg #define TO_INT_C_TYPE UDItype 90548fb7bfaSmrg #define TO_SINT_C_TYPE DItype 90648fb7bfaSmrg #define TO_UINT_C_TYPE UDItype 90748fb7bfaSmrg #define TO_MODE_NAME_S di 90848fb7bfaSmrg 90948fb7bfaSmrg #elif defined (TO_UTI) && HAVE_UTI == 1 && !defined (FROM_UTI) 91048fb7bfaSmrg #define TO_TYPE 2 /* Unsigned integer. */ 91148fb7bfaSmrg #define TO_INT_C_TYPE UTItype 91248fb7bfaSmrg #define TO_SINT_C_TYPE TItype 91348fb7bfaSmrg #define TO_UINT_C_TYPE UTItype 91448fb7bfaSmrg #define TO_MODE_NAME_S ti 91548fb7bfaSmrg 91648fb7bfaSmrg #elif defined (TO_SF) && HAVE_SF == 1 && !defined (FROM_SF) 91748fb7bfaSmrg #define TO_TYPE 3 /* Floating-point. */ 91848fb7bfaSmrg #define TO_FLOAT_C_TYPE SFtype 91948fb7bfaSmrg #define TO_MODE_NAME_S sf 92048fb7bfaSmrg 92148fb7bfaSmrg #elif defined (TO_DF) && HAVE_DF == 1 && !defined (FROM_DF) 92248fb7bfaSmrg #define TO_TYPE 3 /* Floating-point. */ 92348fb7bfaSmrg #define TO_FLOAT_C_TYPE DFtype 92448fb7bfaSmrg #define TO_MODE_NAME_S df 92548fb7bfaSmrg 92648fb7bfaSmrg #elif defined (TO_QQ) && HAVE_QQ == 1 && !defined (FROM_QQ) 92748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 92848fb7bfaSmrg #define TO_MODE_NAME QQ 92948fb7bfaSmrg #define TO_MODE_NAME_S qq 93048fb7bfaSmrg #define TO_INT_C_TYPE QItype 93148fb7bfaSmrg #define TO_SINT_C_TYPE QItype 93248fb7bfaSmrg #define TO_UINT_C_TYPE UQItype 93348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 93448fb7bfaSmrg #define TO_FIXED_SIZE 1 /* in bytes. */ 93548fb7bfaSmrg 93648fb7bfaSmrg #elif defined (TO_HQ) && HAVE_HQ == 1 && !defined (FROM_HQ) 93748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 93848fb7bfaSmrg #define TO_MODE_NAME HQ 93948fb7bfaSmrg #define TO_MODE_NAME_S hq 94048fb7bfaSmrg #define TO_INT_C_TYPE HItype 94148fb7bfaSmrg #define TO_SINT_C_TYPE HItype 94248fb7bfaSmrg #define TO_UINT_C_TYPE UHItype 94348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 94448fb7bfaSmrg #define TO_FIXED_SIZE 2 /* in bytes. */ 94548fb7bfaSmrg 94648fb7bfaSmrg #elif defined (TO_SQ) && HAVE_SQ == 1 && !defined (FROM_SQ) 94748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 94848fb7bfaSmrg #define TO_MODE_NAME SQ 94948fb7bfaSmrg #define TO_MODE_NAME_S sq 95048fb7bfaSmrg #define TO_INT_C_TYPE SItype 95148fb7bfaSmrg #define TO_SINT_C_TYPE SItype 95248fb7bfaSmrg #define TO_UINT_C_TYPE USItype 95348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 95448fb7bfaSmrg #define TO_FIXED_SIZE 4 /* in bytes. */ 95548fb7bfaSmrg 95648fb7bfaSmrg #elif defined (TO_DQ) && HAVE_DQ == 1 && !defined (FROM_DQ) 95748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 95848fb7bfaSmrg #define TO_MODE_NAME DQ 95948fb7bfaSmrg #define TO_MODE_NAME_S dq 96048fb7bfaSmrg #define TO_INT_C_TYPE DItype 96148fb7bfaSmrg #define TO_SINT_C_TYPE DItype 96248fb7bfaSmrg #define TO_UINT_C_TYPE UDItype 96348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 96448fb7bfaSmrg #define TO_FIXED_SIZE 8 /* in bytes. */ 96548fb7bfaSmrg 96648fb7bfaSmrg #elif defined (TO_TQ) && HAVE_TQ == 1 && !defined (FROM_TQ) 96748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 96848fb7bfaSmrg #define TO_MODE_NAME TQ 96948fb7bfaSmrg #define TO_MODE_NAME_S tq 97048fb7bfaSmrg #define TO_INT_C_TYPE TItype 97148fb7bfaSmrg #define TO_SINT_C_TYPE TItype 97248fb7bfaSmrg #define TO_UINT_C_TYPE UTItype 97348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 97448fb7bfaSmrg #define TO_FIXED_SIZE 16 /* in bytes. */ 97548fb7bfaSmrg 97648fb7bfaSmrg #elif defined (TO_UQQ) && HAVE_UQQ == 1 && !defined (FROM_UQQ) 97748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 97848fb7bfaSmrg #define TO_MODE_NAME UQQ 97948fb7bfaSmrg #define TO_MODE_NAME_S uqq 98048fb7bfaSmrg #define TO_INT_C_TYPE UQItype 98148fb7bfaSmrg #define TO_SINT_C_TYPE QItype 98248fb7bfaSmrg #define TO_UINT_C_TYPE UQItype 98348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 98448fb7bfaSmrg #define TO_FIXED_SIZE 1 /* in bytes. */ 98548fb7bfaSmrg 98648fb7bfaSmrg #elif defined (TO_UHQ) && HAVE_UHQ == 1 && !defined (FROM_UHQ) 98748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 98848fb7bfaSmrg #define TO_MODE_NAME UHQ 98948fb7bfaSmrg #define TO_MODE_NAME_S uhq 99048fb7bfaSmrg #define TO_INT_C_TYPE UHItype 99148fb7bfaSmrg #define TO_SINT_C_TYPE HItype 99248fb7bfaSmrg #define TO_UINT_C_TYPE UHItype 99348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 99448fb7bfaSmrg #define TO_FIXED_SIZE 2 /* in bytes. */ 99548fb7bfaSmrg 99648fb7bfaSmrg #elif defined (TO_USQ) && HAVE_USQ == 1 && !defined (FROM_USQ) 99748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 99848fb7bfaSmrg #define TO_MODE_NAME USQ 99948fb7bfaSmrg #define TO_MODE_NAME_S usq 100048fb7bfaSmrg #define TO_INT_C_TYPE USItype 100148fb7bfaSmrg #define TO_SINT_C_TYPE SItype 100248fb7bfaSmrg #define TO_UINT_C_TYPE USItype 100348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 100448fb7bfaSmrg #define TO_FIXED_SIZE 4 /* in bytes. */ 100548fb7bfaSmrg 100648fb7bfaSmrg #elif defined (TO_UDQ) && HAVE_UDQ == 1 && !defined (FROM_UDQ) 100748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 100848fb7bfaSmrg #define TO_MODE_NAME UDQ 100948fb7bfaSmrg #define TO_MODE_NAME_S udq 101048fb7bfaSmrg #define TO_INT_C_TYPE UDItype 101148fb7bfaSmrg #define TO_SINT_C_TYPE DItype 101248fb7bfaSmrg #define TO_UINT_C_TYPE UDItype 101348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 101448fb7bfaSmrg #define TO_FIXED_SIZE 8 /* in bytes. */ 101548fb7bfaSmrg 101648fb7bfaSmrg #elif defined (TO_UTQ) && HAVE_UTQ == 1 && !defined (FROM_UTQ) 101748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 101848fb7bfaSmrg #define TO_MODE_NAME UTQ 101948fb7bfaSmrg #define TO_MODE_NAME_S utq 102048fb7bfaSmrg #define TO_INT_C_TYPE UTItype 102148fb7bfaSmrg #define TO_SINT_C_TYPE TItype 102248fb7bfaSmrg #define TO_UINT_C_TYPE UTItype 102348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 102448fb7bfaSmrg #define TO_FIXED_SIZE 16 /* in bytes. */ 102548fb7bfaSmrg 102648fb7bfaSmrg #elif defined (TO_HA) && HAVE_HA == 1 && !defined (FROM_HA) 102748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 102848fb7bfaSmrg #define TO_MODE_NAME HA 102948fb7bfaSmrg #define TO_MODE_NAME_S ha 103048fb7bfaSmrg #define TO_INT_C_TYPE HItype 103148fb7bfaSmrg #define TO_SINT_C_TYPE HItype 103248fb7bfaSmrg #define TO_UINT_C_TYPE UHItype 103348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 103448fb7bfaSmrg #define TO_FIXED_SIZE 2 /* in bytes. */ 103548fb7bfaSmrg 103648fb7bfaSmrg #elif defined (TO_SA) && HAVE_SA == 1 && !defined (FROM_SA) 103748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 103848fb7bfaSmrg #define TO_MODE_NAME SA 103948fb7bfaSmrg #define TO_MODE_NAME_S sa 104048fb7bfaSmrg #define TO_INT_C_TYPE SItype 104148fb7bfaSmrg #define TO_SINT_C_TYPE SItype 104248fb7bfaSmrg #define TO_UINT_C_TYPE USItype 104348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 104448fb7bfaSmrg #define TO_FIXED_SIZE 4 /* in bytes. */ 104548fb7bfaSmrg 104648fb7bfaSmrg #elif defined (TO_DA) && HAVE_DA == 1 && !defined (FROM_DA) 104748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 104848fb7bfaSmrg #define TO_MODE_NAME DA 104948fb7bfaSmrg #define TO_MODE_NAME_S da 105048fb7bfaSmrg #define TO_INT_C_TYPE DItype 105148fb7bfaSmrg #define TO_SINT_C_TYPE DItype 105248fb7bfaSmrg #define TO_UINT_C_TYPE UDItype 105348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 105448fb7bfaSmrg #define TO_FIXED_SIZE 8 /* in bytes. */ 105548fb7bfaSmrg 105648fb7bfaSmrg #elif defined (TO_TA) && HAVE_TA == 1 && !defined (FROM_TA) 105748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 105848fb7bfaSmrg #define TO_MODE_NAME TA 105948fb7bfaSmrg #define TO_MODE_NAME_S ta 106048fb7bfaSmrg #define TO_INT_C_TYPE TItype 106148fb7bfaSmrg #define TO_SINT_C_TYPE TItype 106248fb7bfaSmrg #define TO_UINT_C_TYPE UTItype 106348fb7bfaSmrg #define TO_MODE_UNSIGNED 0 106448fb7bfaSmrg #define TO_FIXED_SIZE 16 /* in bytes. */ 106548fb7bfaSmrg 106648fb7bfaSmrg #elif defined (TO_UHA) && HAVE_UHA == 1 && !defined (FROM_UHA) 106748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 106848fb7bfaSmrg #define TO_MODE_NAME UHA 106948fb7bfaSmrg #define TO_MODE_NAME_S uha 107048fb7bfaSmrg #define TO_INT_C_TYPE UHItype 107148fb7bfaSmrg #define TO_SINT_C_TYPE HItype 107248fb7bfaSmrg #define TO_UINT_C_TYPE UHItype 107348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 107448fb7bfaSmrg #define TO_FIXED_SIZE 2 /* in bytes. */ 107548fb7bfaSmrg 107648fb7bfaSmrg #elif defined (TO_USA) && HAVE_USA == 1 && !defined (FROM_USA) 107748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 107848fb7bfaSmrg #define TO_MODE_NAME USA 107948fb7bfaSmrg #define TO_MODE_NAME_S usa 108048fb7bfaSmrg #define TO_INT_C_TYPE USItype 108148fb7bfaSmrg #define TO_SINT_C_TYPE SItype 108248fb7bfaSmrg #define TO_UINT_C_TYPE USItype 108348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 108448fb7bfaSmrg #define TO_FIXED_SIZE 4 /* in bytes. */ 108548fb7bfaSmrg 108648fb7bfaSmrg #elif defined (TO_UDA) && HAVE_UDA == 1 && !defined (FROM_UDA) 108748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 108848fb7bfaSmrg #define TO_MODE_NAME UDA 108948fb7bfaSmrg #define TO_MODE_NAME_S uda 109048fb7bfaSmrg #define TO_INT_C_TYPE UDItype 109148fb7bfaSmrg #define TO_SINT_C_TYPE DItype 109248fb7bfaSmrg #define TO_UINT_C_TYPE UDItype 109348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 109448fb7bfaSmrg #define TO_FIXED_SIZE 8 /* in bytes. */ 109548fb7bfaSmrg 109648fb7bfaSmrg #elif defined (TO_UTA) && HAVE_UTA == 1 && !defined (FROM_UTA) 109748fb7bfaSmrg #define TO_TYPE 4 /* Fixed-point. */ 109848fb7bfaSmrg #define TO_MODE_NAME UTA 109948fb7bfaSmrg #define TO_MODE_NAME_S uta 110048fb7bfaSmrg #define TO_INT_C_TYPE UTItype 110148fb7bfaSmrg #define TO_SINT_C_TYPE TItype 110248fb7bfaSmrg #define TO_UINT_C_TYPE UTItype 110348fb7bfaSmrg #define TO_MODE_UNSIGNED 1 110448fb7bfaSmrg #define TO_FIXED_SIZE 16 /* in bytes. */ 110548fb7bfaSmrg 110648fb7bfaSmrg #endif 110748fb7bfaSmrg 110848fb7bfaSmrg #if defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S) 110948fb7bfaSmrg 111048fb7bfaSmrg #if FROM_TYPE == 1 /* Signed integer. */ 1111f9a78e0eSmrg #define FROM_INT_WIDTH (FROM_INT_SIZE * __CHAR_BIT__) 111248fb7bfaSmrg #endif 111348fb7bfaSmrg 111448fb7bfaSmrg #if FROM_TYPE == 2 /* Unsigned integer. */ 1115f9a78e0eSmrg #define FROM_INT_WIDTH (FROM_INT_SIZE * __CHAR_BIT__) 111648fb7bfaSmrg #endif 111748fb7bfaSmrg 111848fb7bfaSmrg #if FROM_TYPE == 4 /* Fixed-point. */ 111948fb7bfaSmrg #define FROM_FIXED_C_TYPE FIXED_C_TYPE2(FROM_MODE_NAME) 112048fb7bfaSmrg #define FROM_FBITS FBITS2(FROM_MODE_NAME) 1121f9a78e0eSmrg #define FROM_FIXED_WIDTH (FROM_FIXED_SIZE * __CHAR_BIT__) 112248fb7bfaSmrg #define FROM_FBITS FBITS2(FROM_MODE_NAME) 112348fb7bfaSmrg #define FROM_IBITS IBITS2(FROM_MODE_NAME) 112448fb7bfaSmrg #define FROM_I_F_BITS (FROM_FBITS + FROM_IBITS) 112548fb7bfaSmrg 112648fb7bfaSmrg #if FROM_MODE_UNSIGNED == 0 /* Signed types. */ 112748fb7bfaSmrg #define FROM_PADDING_BITS (FROM_FIXED_WIDTH - 1 - FROM_I_F_BITS) 112848fb7bfaSmrg #define FROM_NONPADDING_BITS (1 + FROM_I_F_BITS) 112948fb7bfaSmrg #else /* Unsigned types. */ 113048fb7bfaSmrg #define FROM_PADDING_BITS (FROM_FIXED_WIDTH - FROM_I_F_BITS) 113148fb7bfaSmrg #define FROM_NONPADDING_BITS (FROM_I_F_BITS) 113248fb7bfaSmrg #endif 113348fb7bfaSmrg #define FROM_HAVE_PADDING_BITS (FROM_PADDING_BITS > 0) 113448fb7bfaSmrg #endif /* FROM_TYPE == 4 */ 113548fb7bfaSmrg 113648fb7bfaSmrg #if TO_TYPE == 4 /* Fixed-point. */ 113748fb7bfaSmrg #define TO_FIXED_C_TYPE FIXED_C_TYPE2(TO_MODE_NAME) 113848fb7bfaSmrg #define TO_FBITS FBITS2(TO_MODE_NAME) 1139f9a78e0eSmrg #define TO_FIXED_WIDTH (TO_FIXED_SIZE * __CHAR_BIT__) 114048fb7bfaSmrg #define TO_FBITS FBITS2(TO_MODE_NAME) 114148fb7bfaSmrg #define TO_IBITS IBITS2(TO_MODE_NAME) 114248fb7bfaSmrg #define TO_I_F_BITS (TO_FBITS + TO_IBITS) 114348fb7bfaSmrg 114448fb7bfaSmrg #if TO_MODE_UNSIGNED == 0 /* Signed types. */ 114548fb7bfaSmrg #define TO_PADDING_BITS (TO_FIXED_WIDTH - 1 - TO_I_F_BITS) 114648fb7bfaSmrg #define TO_NONPADDING_BITS (1 + TO_I_F_BITS) 114748fb7bfaSmrg #else /* Unsigned types. */ 114848fb7bfaSmrg #define TO_PADDING_BITS (TO_FIXED_WIDTH - TO_I_F_BITS) 114948fb7bfaSmrg #define TO_NONPADDING_BITS (TO_I_F_BITS) 115048fb7bfaSmrg #endif 115148fb7bfaSmrg #define TO_HAVE_PADDING_BITS (TO_PADDING_BITS > 0) 115248fb7bfaSmrg #endif /* TO_TYPE == 4 */ 115348fb7bfaSmrg 115448fb7bfaSmrg #ifdef LIBGCC2_FIXEDBIT_GNU_PREFIX 115548fb7bfaSmrg #define FIXED_CONVERT_OP(OP,FROM,TO) __gnu_ ## OP ## FROM ## TO 115648fb7bfaSmrg #define FIXED_CONVERT_OP2(OP,FROM,TO) __gnu_ ## OP ## FROM ## TO ## 2 115748fb7bfaSmrg #else 115848fb7bfaSmrg #define FIXED_CONVERT_OP(OP,FROM,TO) __ ## OP ## FROM ## TO 115948fb7bfaSmrg #define FIXED_CONVERT_OP2(OP,FROM,TO) __ ## OP ## FROM ## TO ## 2 116048fb7bfaSmrg #endif 116148fb7bfaSmrg #define FRACT_TEMP(N1,N2) FIXED_CONVERT_OP(fract,N1,N2) 116248fb7bfaSmrg #define FRACT2_TEMP(N1,N2) FIXED_CONVERT_OP2(fract,N1,N2) 116348fb7bfaSmrg #define SATFRACT_TEMP(N1,N2) FIXED_CONVERT_OP(satfract,N1,N2) 116448fb7bfaSmrg #define SATFRACT2_TEMP(N1,N2) FIXED_CONVERT_OP2(satfract,N1,N2) 116548fb7bfaSmrg #define FRACTUNS_TEMP(N1,N2) FIXED_CONVERT_OP(fractuns,N1,N2) 116648fb7bfaSmrg #define SATFRACTUNS_TEMP(N1,N2) FIXED_CONVERT_OP(satfractuns,N1,N2) 116748fb7bfaSmrg 116848fb7bfaSmrg /* Define conversions from fixed-point to fixed-point. */ 116948fb7bfaSmrg #if FROM_TYPE == 4 && TO_TYPE == 4 117048fb7bfaSmrg 117148fb7bfaSmrg #if FROM_FIXED_SIZE > TO_FIXED_SIZE 117248fb7bfaSmrg #define BIG_SINT_C_TYPE FROM_SINT_C_TYPE 117348fb7bfaSmrg #define BIG_UINT_C_TYPE FROM_UINT_C_TYPE 117448fb7bfaSmrg #define BIG_WIDTH FROM_FIXED_WIDTH 117548fb7bfaSmrg #else 117648fb7bfaSmrg #define BIG_SINT_C_TYPE TO_SINT_C_TYPE 117748fb7bfaSmrg #define BIG_UINT_C_TYPE TO_UINT_C_TYPE 117848fb7bfaSmrg #define BIG_WIDTH TO_FIXED_WIDTH 117948fb7bfaSmrg #endif 118048fb7bfaSmrg 118148fb7bfaSmrg /* Check if FROM* and TO* are in the same machine class. */ 118248fb7bfaSmrg #if ((FROM_MODE_UNSIGNED == TO_MODE_UNSIGNED) \ 118348fb7bfaSmrg && ((FROM_IBITS == 0) == (TO_IBITS == 0))) 118448fb7bfaSmrg /* Same modes: append '2' to conversion function names */ 118548fb7bfaSmrg #define FRACT FRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 118648fb7bfaSmrg #define SATFRACT SATFRACT2_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 118748fb7bfaSmrg #else 118848fb7bfaSmrg /* Different modes: don't append '2' to conversion function names */ 118948fb7bfaSmrg #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 119048fb7bfaSmrg #define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 119148fb7bfaSmrg #endif 119248fb7bfaSmrg 119348fb7bfaSmrg extern TO_FIXED_C_TYPE FRACT (FROM_FIXED_C_TYPE); 119448fb7bfaSmrg extern TO_FIXED_C_TYPE SATFRACT (FROM_FIXED_C_TYPE); 119548fb7bfaSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 4 */ 119648fb7bfaSmrg 119748fb7bfaSmrg /* Define conversions from fixed-point to signed integer. */ 119848fb7bfaSmrg #if FROM_TYPE == 4 && TO_TYPE == 1 119948fb7bfaSmrg #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 120048fb7bfaSmrg extern TO_INT_C_TYPE FRACT (FROM_FIXED_C_TYPE); 120148fb7bfaSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 1 */ 120248fb7bfaSmrg 120348fb7bfaSmrg /* Define conversions from fixed-point to unsigned integer. */ 120448fb7bfaSmrg #if FROM_TYPE == 4 && TO_TYPE == 2 120548fb7bfaSmrg #define FRACTUNS FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 120648fb7bfaSmrg extern TO_INT_C_TYPE FRACTUNS (FROM_FIXED_C_TYPE); 120748fb7bfaSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 2 */ 120848fb7bfaSmrg 120948fb7bfaSmrg /* Define conversions from fixed-point to floating-point. */ 121048fb7bfaSmrg #if FROM_TYPE == 4 && TO_TYPE == 3 121148fb7bfaSmrg #define BASE1(NUM) 0x1.0p ## NUM 121248fb7bfaSmrg #define BASE2(NUM) BASE1(NUM) 121348fb7bfaSmrg #define BASE BASE2(FROM_FBITS) 121448fb7bfaSmrg #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 121548fb7bfaSmrg extern TO_FLOAT_C_TYPE FRACT (FROM_FIXED_C_TYPE); 121648fb7bfaSmrg #endif /* FROM_TYPE == 4 && TO_TYPE == 3 */ 121748fb7bfaSmrg 121848fb7bfaSmrg /* Define conversions from signed integer to fixed-point. */ 121948fb7bfaSmrg #if FROM_TYPE == 1 && TO_TYPE == 4 122048fb7bfaSmrg 122148fb7bfaSmrg #if FROM_INT_SIZE > TO_FIXED_SIZE 122248fb7bfaSmrg #define BIG_SINT_C_TYPE FROM_SINT_C_TYPE 122348fb7bfaSmrg #define BIG_UINT_C_TYPE FROM_UINT_C_TYPE 122448fb7bfaSmrg #define BIG_WIDTH FROM_INT_WIDTH 122548fb7bfaSmrg #else 122648fb7bfaSmrg #define BIG_SINT_C_TYPE TO_SINT_C_TYPE 122748fb7bfaSmrg #define BIG_UINT_C_TYPE TO_UINT_C_TYPE 122848fb7bfaSmrg #define BIG_WIDTH TO_FIXED_WIDTH 122948fb7bfaSmrg #endif 123048fb7bfaSmrg 123148fb7bfaSmrg #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 123248fb7bfaSmrg #define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 123348fb7bfaSmrg extern TO_FIXED_C_TYPE FRACT (FROM_INT_C_TYPE); 123448fb7bfaSmrg extern TO_FIXED_C_TYPE SATFRACT (FROM_INT_C_TYPE); 123548fb7bfaSmrg #endif /* FROM_TYPE == 1 && TO_TYPE == 4 */ 123648fb7bfaSmrg 123748fb7bfaSmrg /* Define conversions from unsigned integer to fixed-point. */ 123848fb7bfaSmrg #if FROM_TYPE == 2 && TO_TYPE == 4 123948fb7bfaSmrg 124048fb7bfaSmrg #if FROM_INT_SIZE > TO_FIXED_SIZE 124148fb7bfaSmrg #define BIG_SINT_C_TYPE FROM_SINT_C_TYPE 124248fb7bfaSmrg #define BIG_UINT_C_TYPE FROM_UINT_C_TYPE 124348fb7bfaSmrg #define BIG_WIDTH FROM_INT_WIDTH 124448fb7bfaSmrg #else 124548fb7bfaSmrg #define BIG_SINT_C_TYPE TO_SINT_C_TYPE 124648fb7bfaSmrg #define BIG_UINT_C_TYPE TO_UINT_C_TYPE 124748fb7bfaSmrg #define BIG_WIDTH TO_FIXED_WIDTH 124848fb7bfaSmrg #endif 124948fb7bfaSmrg 125048fb7bfaSmrg #define FRACTUNS FRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 125148fb7bfaSmrg #define SATFRACTUNS SATFRACTUNS_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 125248fb7bfaSmrg extern TO_FIXED_C_TYPE FRACTUNS (FROM_INT_C_TYPE); 125348fb7bfaSmrg extern TO_FIXED_C_TYPE SATFRACTUNS (FROM_INT_C_TYPE); 125448fb7bfaSmrg #endif /* FROM_TYPE == 2 && TO_TYPE == 4 */ 125548fb7bfaSmrg 125648fb7bfaSmrg /* Define conversions from floating-point to fixed-point. */ 125748fb7bfaSmrg #if FROM_TYPE == 3 && TO_TYPE == 4 125848fb7bfaSmrg 125948fb7bfaSmrg #define BASE1(NUM) (0x1.0p ## NUM) 126048fb7bfaSmrg #define BASE2(NUM) BASE1(NUM) 126148fb7bfaSmrg #define BASE BASE2(TO_FBITS) 126248fb7bfaSmrg 126348fb7bfaSmrg #define FIXED_MAX1(NUM1,NUM2) (0x1.0p ## NUM1 - 0x1.0p- ## NUM2) 126448fb7bfaSmrg #define FIXED_MAX2(NUM1,NUM2) FIXED_MAX1(NUM1,NUM2) 126548fb7bfaSmrg #define FIXED_MAX FIXED_MAX2(TO_IBITS,TO_FBITS) 126648fb7bfaSmrg 126748fb7bfaSmrg #define FIXED_MIN1(NUM) (-0x1.0p ## NUM) 126848fb7bfaSmrg #define FIXED_MIN2(NUM) FIXED_MIN1(NUM) 126948fb7bfaSmrg #if TO_MODE_UNSIGNED == 0 127048fb7bfaSmrg #define FIXED_MIN FIXED_MIN2(TO_IBITS) 127148fb7bfaSmrg #else 127248fb7bfaSmrg #define FIXED_MIN 0.0 127348fb7bfaSmrg #endif 127448fb7bfaSmrg 127548fb7bfaSmrg #define FRACT FRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 127648fb7bfaSmrg #define SATFRACT SATFRACT_TEMP(FROM_MODE_NAME_S,TO_MODE_NAME_S) 127748fb7bfaSmrg extern TO_FIXED_C_TYPE FRACT (FROM_FLOAT_C_TYPE); 127848fb7bfaSmrg extern TO_FIXED_C_TYPE SATFRACT (FROM_FLOAT_C_TYPE); 127948fb7bfaSmrg #endif /* FROM_TYPE == 3 && TO_TYPE == 4 */ 128048fb7bfaSmrg 128148fb7bfaSmrg #endif /* defined (FROM_MODE_NAME_S) && defined (TO_MODE_NAME_S) */ 128248fb7bfaSmrg 128348fb7bfaSmrg #endif /* _FIXED_BIT_H */ 1284