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