LCOV - code coverage report
Current view: top level - lib_com - bitalloc.c (source / functions) Hit Total Coverage
Test: Coverage on main -- short test vectors @ 6c9ddc4024a9c0e1ecb8f643f114a84a0e26ec6b Lines: 436 478 91.2 %
Date: 2025-05-23 08:37:30 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /******************************************************************************************************
       2             : 
       3             :    (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
       4             :    Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
       5             :    Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
       6             :    Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
       7             :    contributors to this repository. All Rights Reserved.
       8             : 
       9             :    This software is protected by copyright law and by international treaties.
      10             :    The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
      11             :    Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
      12             :    Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
      13             :    Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
      14             :    contributors to this repository retain full ownership rights in their respective contributions in
      15             :    the software. This notice grants no license of any kind, including but not limited to patent
      16             :    license, nor is any license granted by implication, estoppel or otherwise.
      17             : 
      18             :    Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
      19             :    contributions.
      20             : 
      21             :    This software is provided "AS IS", without any express or implied warranties. The software is in the
      22             :    development stage. It is intended exclusively for experts who have experience with such software and
      23             :    solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
      24             :    and fitness for a particular purpose are hereby disclaimed and excluded.
      25             : 
      26             :    Any dispute, controversy or claim arising under or in relation to providing this software shall be
      27             :    submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
      28             :    accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
      29             :    the United Nations Convention on Contracts on the International Sales of Goods.
      30             : 
      31             : *******************************************************************************************************/
      32             : 
      33             : /*====================================================================================
      34             :     EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0
      35             :   ====================================================================================*/
      36             : 
      37             : #include <stdint.h>
      38             : #include "options.h"
      39             : #ifdef DEBUGGING
      40             : #include "debug.h"
      41             : #endif
      42             : #include "cnst.h"
      43             : #include "rom_com.h"
      44             : #include "prot.h"
      45             : #include "basop_util.h"
      46             : #include "basop_proto_func.h"
      47             : #include "wmc_auto.h"
      48             : 
      49             : /*--------------------------------------------------------------------------
      50             :  * bitalloc()
      51             :  *
      52             :  * Adaptive bit allocation for 20kHz audio codec
      53             :  *--------------------------------------------------------------------------*/
      54             : 
      55       22680 : void bitalloc(
      56             :     int16_t *y,              /* i  : reordered norm of sub-vectors                 */
      57             :     int16_t *idx,            /* i  : reordered sub-vector indices                  */
      58             :     int16_t sum,             /* i  : number of available bits                      */
      59             :     int16_t N,               /* i  : number of norms                               */
      60             :     int16_t K,               /* i  : maximum number of bits per dimension          */
      61             :     int16_t *r,              /* o  : bit-allacation vector                         */
      62             :     const int16_t *sfmsize,  /* i  : band length                                   */
      63             :     const int16_t hqswb_clas /* i  : signal classification flag                    */
      64             : )
      65             : {
      66             :     int16_t i, j, k, n, m, v, im;
      67             :     int16_t diff, temp;
      68             :     int16_t fac;
      69             :     int16_t ii;
      70       22680 :     int16_t SFM_thr = SFM_G1G2;
      71             : 
      72       22680 :     N -= 1;
      73             : 
      74       22680 :     if ( hqswb_clas == HQ_HARMONIC )
      75             :     {
      76        3158 :         SFM_thr = 22;
      77             :     }
      78             : 
      79       22680 :     fac = 3;
      80       22680 :     K -= 2;
      81       22680 :     im = 1;
      82       22680 :     diff = sum;
      83       22680 :     n = sum >> 3;
      84     1000299 :     for ( i = 0; i < n; i++ )
      85             :     {
      86     1000299 :         k = 0;
      87     1000299 :         temp = y[0];
      88    13739557 :         for ( m = 1; m < im; m++ )
      89             :         {
      90    12739258 :             if ( temp < y[m] )
      91             :             {
      92      970118 :                 temp = y[m];
      93      970118 :                 k = m;
      94             :             }
      95             :         }
      96             : 
      97     1000299 :         if ( temp < y[m] )
      98             :         {
      99      489731 :             k = m;
     100      489731 :             if ( im < N )
     101             :             {
     102      489227 :                 im++;
     103             :             }
     104             :         }
     105             : 
     106     1000299 :         j = idx[k];
     107     1000299 :         if ( sum >= sfmsize[j] && r[j] < K )
     108             :         {
     109      991798 :             y[k] -= fac;
     110      991798 :             r[j]++;
     111      991798 :             if ( r[j] >= K )
     112             :             {
     113        2201 :                 y[k] = MIN16B;
     114             :             }
     115      991798 :             sum -= sfmsize[j];
     116             :         }
     117             :         else
     118             :         {
     119        8501 :             y[k] = MIN16B;
     120        8501 :             k++;
     121        8501 :             if ( k == im && im < N )
     122             :             {
     123        4547 :                 im++;
     124             :             }
     125             :         }
     126             : 
     127     1000299 :         if ( sum < sfmsize[SFM_G1 - 1] || diff == sum ) /* sfmsize[SFM_G1-1] matches WID_G1, but also allows for extended BWs used in ACELP->HQ switching.  */
     128             :         {
     129             :             break;
     130             :         }
     131             : 
     132      977619 :         diff = sum;
     133      977619 :         v = N - 1;
     134             : 
     135      977619 :         if ( k > v )
     136             :         {
     137        1012 :             for ( ii = 0; ii <= N; ii++ )
     138             :             {
     139        1012 :                 if ( y[ii] > MIN16B )
     140             :                 {
     141         476 :                     if ( ii < N )
     142             :                     {
     143         476 :                         im = ii + 1;
     144             :                     }
     145             : 
     146         476 :                     break;
     147             :                 }
     148             :             }
     149             :         }
     150             :     }
     151             : 
     152       22680 :     if ( sum >= sfmsize[SFM_G1] ) /* sfmsize[SFM_G1] matches WID_G2, but also allows for extended BWs used in ACELP->HQ switching.  */
     153             :     {
     154       82763 :         for ( i = 0; i <= N; i++ )
     155             :         {
     156       81957 :             j = idx[i];
     157       81957 :             if ( j >= SFM_G1 && j < SFM_thr && r[j] == 0 )
     158             :             {
     159        2238 :                 r[j] = 1;
     160        2238 :                 sum -= sfmsize[j];
     161        2238 :                 if ( sum < sfmsize[SFM_G1] )
     162             :                 {
     163        2146 :                     break;
     164             :                 }
     165             :             }
     166             :         }
     167             :     }
     168             : 
     169       22680 :     if ( sum >= sfmsize[SFM_G1] )
     170             :     {
     171       16860 :         for ( i = 0; i <= N; i++ )
     172             :         {
     173       16758 :             j = idx[i];
     174       16758 :             if ( j >= SFM_G1 && j < SFM_thr && r[j] == 1 )
     175             :             {
     176         732 :                 r[j] = 2;
     177         732 :                 sum -= sfmsize[j];
     178         732 :                 if ( sum < sfmsize[SFM_G1] )
     179             :                 {
     180         704 :                     break;
     181             :                 }
     182             :             }
     183             :         }
     184             :     }
     185             : 
     186       22680 :     if ( sum >= sfmsize[SFM_G1 - 1] )
     187             :     {
     188      193089 :         for ( i = 0; i <= N; i++ )
     189             :         {
     190      190172 :             j = idx[i];
     191      190172 :             if ( j < SFM_G1 && r[j] == 0 )
     192             :             {
     193        3280 :                 r[j] = 1;
     194        3280 :                 sum -= sfmsize[j];
     195        3280 :                 if ( sum < sfmsize[SFM_G1 - 1] )
     196             :                 {
     197        3280 :                     break;
     198             :                 }
     199             :             }
     200             :         }
     201             :     }
     202             : 
     203       22680 :     if ( sum >= sfmsize[SFM_G1 - 1] )
     204             :     {
     205       72070 :         for ( i = 0; i <= N; i++ )
     206             :         {
     207       71083 :             j = idx[i];
     208       71083 :             if ( j < SFM_G1 && r[j] == 1 )
     209             :             {
     210        1962 :                 r[j] = 2;
     211        1962 :                 sum -= sfmsize[j];
     212        1962 :                 if ( sum < sfmsize[SFM_G1 - 1] )
     213             :                 {
     214        1930 :                     break;
     215             :                 }
     216             :             }
     217             :         }
     218             :     }
     219             : 
     220       22680 :     return;
     221             : }
     222             : 
     223             : 
     224             : #define WMC_TOOL_SKIP
     225             : 
     226             : /*-------------------------------------------------------------------*
     227             :  * BitAllocF()
     228             :  *
     229             :  * Fractional bit allocation
     230             :  *-------------------------------------------------------------------*/
     231             : 
     232             : /*! r: Integer (truncated) number of allocated bits */
     233        3369 : int16_t BitAllocF(
     234             :     int16_t *y,                 /* i  : norm of sub-vectors                           */
     235             :     int32_t bit_rate,           /* i  : bitrate                                       */
     236             :     int16_t B,                  /* i  : number of available bits                      */
     237             :     int16_t N,                  /* i  : number of sub-vectors                         */
     238             :     int16_t *R,                 /* o  : bit-allocation indicator                      */
     239             :     int16_t *Rsubband,          /* o  : sub-band bit-allocation vector (Q3)           */
     240             :     const int16_t hqswb_clas,   /* i  : hq swb class                                  */
     241             :     const int16_t num_env_bands /* i  : Number sub bands to be encoded for HQ_SWB_BWE  */
     242             : )
     243             : {
     244             :     Word16 fac;
     245        3369 :     Word16 i, n, Nmin, Bits, bs, low_rate = 0;
     246             : 
     247             :     Word16 m_fx;
     248             :     Word32 t_fx, B_fx;
     249             :     Word32 L_tmp1, L_tmp2;
     250             :     Word16 tmp, exp1, exp2;
     251             :     Word32 Rsubband_w32_fx[NB_SFM]; /* Q15  */
     252             :     Word16 B_w16_fx;
     253             : #ifdef BASOP_NOGLOB
     254             :     Flag Overflow;
     255             : #endif /* BASOP_NOGLOB */
     256             : 
     257        3369 :     set_l( Rsubband_w32_fx, 0, NB_SFM );
     258             : 
     259        3369 :     fac = 3;
     260        3369 :     if ( L_sub( bit_rate, 32000 ) < 0 )
     261             :     {
     262        3369 :         bs = 2;
     263             :     }
     264             :     else
     265             :     {
     266           0 :         bs = 3;
     267             :     }
     268        3369 :     low_rate = 1;
     269             : 
     270        3369 :     Nmin = N;
     271        3369 :     if ( sub( Nmin, SFM_N ) > 0 )
     272             :     {
     273        3369 :         Nmin = SFM_N;
     274             :     }
     275             : 
     276             :     /* Initial bits distribution */
     277        3369 :     if ( sub( hqswb_clas, HQ_GEN_SWB ) == 0 || sub( hqswb_clas, HQ_GEN_FB ) == 0 )
     278             :     {
     279             :         /* Initial bits distribution */
     280        2998 :         L_tmp1 = 0;
     281        2998 :         m_fx = 0;
     282       83944 :         for ( i = 0; i < num_env_bands; i++ )
     283             :         {
     284       80946 :             L_tmp1 = L_mac0( L_tmp1, Nb[i], y[i] );
     285             :         }
     286        2998 :         L_tmp1 = L_msu0( L_tmp1, fac, B );
     287             : 
     288        2998 :         t_fx = 0;
     289        2998 :         n = 0;
     290        2998 :         tmp = add( band_end_HQ[num_env_bands - 1], shl( band_end_HQ[num_env_bands - 1], 1 ) );
     291        2998 :         exp1 = norm_s( tmp );
     292        2998 :         tmp = div_s( 16384, shl( tmp, exp1 ) ); /*15 + 14 - exp1*/
     293        2998 :         exp2 = norm_s( tmp );
     294        2998 :         tmp = shl( tmp, exp2 );
     295        2998 :         exp1 = add( 29, sub( exp2, exp1 ) );
     296             : 
     297      119920 :         for ( i = 0; i < N; i++ )
     298             :         {
     299      116922 :             L_tmp2 = L_sub( L_mult0( y[i], band_end_HQ[num_env_bands - 1] ), L_tmp1 );
     300      116922 :             Rsubband_w32_fx[i] = L_mult0( extract_l( L_tmp2 ), Nb[i] );
     301      116922 :             move32(); /*Q0*/
     302      116922 :             if ( Rsubband_w32_fx[i] > 0 )
     303             :             {
     304       65728 :                 n = add( n, Nb[i] );
     305       65728 :                 Rsubband_w32_fx[i] = Mpy_32_16( Rsubband_w32_fx[i], tmp );
     306       65728 :                 move32();                                                          /*exp1 - 15*/
     307       65728 :                 Rsubband_w32_fx[i] = L_shl( Rsubband_w32_fx[i], sub( 30, exp1 ) ); /*Q15*/
     308             : 
     309       65728 :                 t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /*Q0*/
     310             :             }
     311             :             else
     312             :             {
     313       51194 :                 Rsubband_w32_fx[i] = 0;
     314       51194 :                 move32();
     315             :             }
     316             :         }
     317             :     }
     318             :     else
     319             :     {
     320             :         /* Initial bits distribution */
     321         371 :         L_tmp1 = 0;
     322         371 :         m_fx = 0;
     323       14840 :         for ( i = 0; i < N; i++ )
     324             :         {
     325       14469 :             L_tmp1 = L_mac0( L_tmp1, Nb[i], y[i] );
     326             :         }
     327         371 :         L_tmp1 = L_msu0( L_tmp1, fac, B );
     328             : 
     329             : 
     330         371 :         t_fx = 0;
     331         371 :         n = 0;
     332         371 :         tmp = add( band_end_HQ[N - 1], shl( band_end_HQ[N - 1], 1 ) );
     333         371 :         exp1 = norm_s( tmp );
     334         371 :         tmp = div_s( 16384, shl( tmp, exp1 ) ); /*15 + 14 - exp1*/
     335         371 :         exp2 = norm_s( tmp );
     336         371 :         tmp = shl( tmp, exp2 );
     337         371 :         exp1 = add( 29, sub( exp2, exp1 ) );
     338       14840 :         for ( i = 0; i < N; i++ )
     339             :         {
     340       14469 :             L_tmp2 = L_sub( L_mult0( y[i], band_end_HQ[N - 1] ), L_tmp1 );
     341       14469 :             Rsubband_w32_fx[i] = L_mult0( extract_l( L_tmp2 ), Nb[i] );
     342       14469 :             move32(); /*Q0*/
     343       14469 :             if ( Rsubband_w32_fx[i] > 0 )
     344             :             {
     345        9771 :                 n = add( n, Nb[i] );
     346        9771 :                 Rsubband_w32_fx[i] = Mpy_32_16( Rsubband_w32_fx[i], tmp );
     347        9771 :                 move32();                                                          /*exp1 - 15*/
     348        9771 :                 Rsubband_w32_fx[i] = L_shl( Rsubband_w32_fx[i], sub( 30, exp1 ) ); /*Q15*/
     349             : 
     350        9771 :                 t_fx = L_add( t_fx, Rsubband_w32_fx[i] ); /*Q0*/
     351             :             }
     352             :             else
     353             :             {
     354        4698 :                 Rsubband_w32_fx[i] = 0;
     355        4698 :                 move32();
     356             :             }
     357             :         }
     358             :     }
     359             : 
     360             :     /* Distribute the remaining bits to subbands with non-zero bits */
     361        3369 :     B_fx = L_shl( B, 15 );
     362        7741 :     WHILE( L_sub( L_shr( L_add( t_fx, 16384 ), 15 ), B ) != 0 )
     363             :     {
     364        4372 :         L_tmp1 = L_sub( t_fx, B_fx );
     365        4372 :         exp1 = sub( norm_l( L_tmp1 ), 1 );
     366        4372 :         exp2 = norm_s( n );
     367        4372 :         tmp = div_s( extract_h( L_shl( L_tmp1, exp1 ) ), shl( n, exp2 ) ); /*15 + 15 + exp1 - 16 - exp2*/
     368             : #ifndef BASOP_NOGLOB
     369             :         m_fx = shl( tmp, sub( exp2, exp1 ) ); /*Q14*/
     370             : #else
     371        4372 :         m_fx = shl_o( tmp, sub( exp2, exp1 ), &Overflow );     /*Q14*/
     372             : #endif
     373             : 
     374        4372 :         t_fx = 0;
     375        4372 :         n = 0;
     376      174880 :         for ( i = 0; i < N; i++ )
     377             :         {
     378      170508 :             if ( Rsubband_w32_fx[i] > 0 )
     379             :             {
     380       93944 :                 Rsubband_w32_fx[i] = L_msu( Rsubband_w32_fx[i], m_fx, Nb[i] );
     381       93944 :                 move32();
     382             : 
     383       93944 :                 if ( Rsubband_w32_fx[i] > 0 )
     384             :                 {
     385       90107 :                     n = add( n, Nb[i] );
     386             : 
     387       90107 :                     t_fx = L_add( t_fx, Rsubband_w32_fx[i] );
     388             :                 }
     389             :                 else
     390             :                 {
     391        3837 :                     Rsubband_w32_fx[i] = 0;
     392        3837 :                     move32();
     393             :                 }
     394             :             }
     395             :         }
     396             :     }
     397        3369 :     Bits = B;
     398             : 
     399             :     /* Impose bit-constraints to subbands with less than minimum bits*/
     400        3369 :     t_fx = 0;
     401        3369 :     n = 0;
     402      134760 :     for ( i = 0; i < N; i++ )
     403             :     {
     404      131391 :         if ( Rsubband_w32_fx[i] > 0 )
     405             :         {
     406       71662 :             test();
     407       71662 :             test();
     408       71662 :             if ( ( L_sub( Rsubband_w32_fx[i], L_shl( add( bs, LNb[i] ), 15 ) ) < 0 ) && ( sub( low_rate, 1 ) == 0 ) )
     409             :             {
     410       15408 :                 Rsubband_w32_fx[i] = 0;
     411       15408 :                 move32();
     412             :             }
     413       56254 :             else if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) <= 0 )
     414             :             {
     415       17825 :                 B = sub( B, Nb[i] );
     416       17825 :                 Rsubband_w32_fx[i] = L_shl( Nb[i], 15 );
     417       17825 :                 move32();
     418             :             }
     419             :             else
     420             :             {
     421       38429 :                 n = add( n, Nb[i] );
     422       38429 :                 t_fx = L_add( t_fx, Rsubband_w32_fx[i] );
     423             :             }
     424             :         }
     425             :     }
     426             : 
     427             :     /* Distribute the remaining bits to subbands with more than 1-bit per sample */
     428        7604 :     WHILE( L_sub( L_shr( L_add( t_fx, 16384 ), 15 ), B ) != 0 )
     429             :     {
     430        4393 :         L_tmp1 = L_sub( t_fx, L_shl( B, 15 ) );
     431        4393 :         L_tmp2 = L_abs( L_tmp1 );
     432             : 
     433        4393 :         if ( n > 0 )
     434             :         {
     435        4393 :             exp1 = sub( norm_l( L_tmp2 ), 1 );
     436        4393 :             exp2 = norm_s( n );
     437        4393 :             tmp = div_s( extract_h( L_shl( L_tmp2, exp1 ) ), shl( n, exp2 ) ); /*15 + 15 + exp1 - 16 - exp2*/
     438             : #ifndef BASOP_NOGLOB
     439             :             m_fx = shl( tmp, sub( exp2, exp1 ) ); /*Q14*/
     440             : #else                                             /* BASOP_NOGLOB */
     441        4393 :             m_fx = shl_o( tmp, sub( exp2, exp1 ), &Overflow ); /*Q14*/
     442             : #endif                                            /* BASOP_NOGLOB */
     443        4393 :             if ( L_tmp1 < 0 )
     444             :             {
     445         867 :                 m_fx = negate( m_fx );
     446             :             }
     447             : 
     448        4393 :             t_fx = 0;
     449        4393 :             n = 0;
     450      175720 :             for ( i = 0; i < N; i++ )
     451             :             {
     452      171327 :                 if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) > 0 )
     453             :                 {
     454       46093 :                     Rsubband_w32_fx[i] = L_msu( Rsubband_w32_fx[i], m_fx, Nb[i] );
     455       46093 :                     if ( L_sub( Rsubband_w32_fx[i], L_shl( Nb[i], 15 ) ) > 0 )
     456             :                     {
     457       41884 :                         n = add( n, Nb[i] );
     458             : 
     459       41884 :                         t_fx = L_add( t_fx, Rsubband_w32_fx[i] );
     460             :                     }
     461             :                     else
     462             :                     {
     463        4209 :                         B = sub( B, Nb[i] );
     464             : 
     465        4209 :                         Rsubband_w32_fx[i] = L_shl( Nb[i], 15 );
     466        4209 :                         move32();
     467             :                     }
     468             :                 }
     469             :             }
     470             :         }
     471             :         /*In case no subband has enough bits more than 1-bit per sample, take bits off the higher subbands */
     472        4393 :         if ( t_fx == 0 )
     473             :         {
     474         782 :             for ( i = N - 1; i >= 0; i-- )
     475             :             {
     476         782 :                 if ( Rsubband_w32_fx[i] > 0 )
     477             :                 {
     478         250 :                     B = add( B, Nb[i] );
     479         250 :                     Rsubband_w32_fx[i] = 0;
     480         250 :                     move32();
     481         250 :                     if ( B >= 0 )
     482             :                     {
     483         158 :                         BREAK;
     484             :                     }
     485             :                 }
     486             :             }
     487         158 :             BREAK;
     488             :         }
     489             :     }
     490             : 
     491             :     /* fine redistribution of over-allocated or under-allocated bits */
     492        3369 :     tmp = 0;
     493      134760 :     for ( i = 0; i < N; i++ )
     494             :     {
     495      131391 :         Rsubband[i] = extract_l( L_shr( Rsubband_w32_fx[i], 12 ) );
     496      131391 :         tmp = add( tmp, Rsubband[i] );
     497             :     }
     498             : 
     499        3369 :     B = Bits;
     500        3369 :     B_w16_fx = shl( B, 3 );
     501        3369 :     if ( sub( tmp, B_w16_fx ) > 0 )
     502             :     {
     503           0 :         tmp = sub( tmp, B_w16_fx );
     504           0 :         for ( i = 0; i < N; i++ )
     505             :         {
     506           0 :             if ( sub( Rsubband[i], add( shl( Nb[i], 3 ), tmp ) ) >= 0 )
     507             :             {
     508           0 :                 Rsubband[i] = sub( Rsubband[i], tmp );
     509           0 :                 BREAK;
     510             :             }
     511             :         }
     512             :     }
     513             :     else
     514             :     {
     515        3369 :         tmp = sub( tmp, B_w16_fx );
     516        4224 :         for ( i = 0; i < N; i++ )
     517             :         {
     518        4224 :             if ( Rsubband[i] > 0 )
     519             :             {
     520        3369 :                 Rsubband[i] = sub( Rsubband[i], tmp );
     521        3369 :                 BREAK;
     522             :             }
     523             :         }
     524             :     }
     525             : 
     526             :     /* Calculate total used bits and initialize R to be used for Noise Filling */
     527        3369 :     tmp = 0;
     528      134760 :     for ( i = 0; i < N; i++ )
     529             :     {
     530      131391 :         tmp = add( tmp, Rsubband[i] );
     531      131391 :         R[i] = shr( Rsubband[i], 3 );
     532             :     }
     533             : 
     534        3369 :     return shr( tmp, 3 );
     535             : }
     536             : 
     537             : /*-------------------------------------------------------------------*
     538             :  * Bit_group()
     539             :  *
     540             :  * bit allocation in group
     541             :  *-------------------------------------------------------------------*/
     542        5655 : static void Bit_group_fx(
     543             :     Word16 *y,           /* i  : norm of sub-band                              Q0*/
     544             :     Word16 start_band,   /* i  : start band indices                            Q0*/
     545             :     Word16 end_band,     /* i  : end band indices                              Q0*/
     546             :     Word16 Bits,         /* i  : number of allocation bits in group            Q0*/
     547             :     Word16 thr,          /* i  : smallest bit number for allocation in group   Q0*/
     548             :     Word32 *Rsubband_fx, /* o  : bit allocation of sub-band                    Q21*/
     549             :     Word16 *fac_fx       /* i  : weight factor for norm of sub-band            Q13*/
     550             : )
     551             : {
     552             :     Word16 i, j, k, m, y_index[16], index[16], bit_band, band_num, norm_sum;
     553             :     Word16 tmp, exp;
     554             :     Word16 factor_fx;
     555        5655 :     Word32 R_temp_fx[16], R_sum_fx = 0, R_sum_org_fx = 0, Bits_avg_fx = 0;
     556             :     Word32 L_tmp;
     557             :     UWord32 lo;
     558             : 
     559             :     /* initialization for bit allocation in one group*/
     560        5655 :     tmp = 6554;
     561        5655 :     move16(); /*Q15  1/5    */
     562        5655 :     IF( sub( thr, 5 ) == 0 )
     563             :     {
     564        1885 :         tmp = 6554;
     565        1885 :         move16(); /*Q15  1/5    */
     566             :     }
     567        5655 :     IF( sub( thr, 6 ) == 0 )
     568             :     {
     569        1885 :         tmp = 5462;
     570        1885 :         move16(); /*Q15  1/6 */
     571             :     }
     572        5655 :     IF( sub( thr, 7 ) == 0 )
     573             :     {
     574        1885 :         tmp = 4682;
     575        1885 :         move16(); /*Q15  1/7 */
     576             :     }
     577        5655 :     bit_band = mult( tmp, Bits ); /*0+15-15=0, Q0 */
     578        5655 :     band_num = sub( end_band, start_band );
     579             : 
     580       54665 :     FOR( i = 0; i < band_num; i++ )
     581             :     {
     582       49010 :         y_index[i] = y[add( i, start_band )];
     583       49010 :         move16();
     584       49010 :         index[i] = i;
     585       49010 :         move16();
     586             :     }
     587             : 
     588             :     /* Rearrange norm vector in decreasing order */
     589        5655 :     reordvct( y_index, band_num, index );
     590             :     /* norm vector modification */
     591             : 
     592        5655 :     factor_fx = div_s( 1, band_num ); /*Q15 */
     593        5655 :     IF( sub( thr, 5 ) > 0 )
     594             :     {
     595       22620 :         FOR( i = 0; i < band_num; i++ )
     596             :         {
     597       18850 :             L_tmp = L_mult( i, factor_fx );              /*Q16 */
     598       18850 :             tmp = extract_h( L_shl( L_tmp, 13 ) );       /*Q13 */
     599       18850 :             tmp = sub( fac_fx[1], tmp );                 /*Q13 */
     600       18850 :             L_tmp = L_mult( y_index[i], tmp );           /*Q14 */
     601       18850 :             y_index[i] = extract_h( L_shl( L_tmp, 2 ) ); /*Q0 */
     602             :         }
     603             :     }
     604             :     ELSE
     605             :     {
     606       32045 :         FOR( i = 0; i < band_num; i++ )
     607             :         {
     608       30160 :             L_tmp = L_mult( i, factor_fx );              /*Q16 */
     609       30160 :             tmp = extract_h( L_shl( L_tmp, 13 ) );       /*Q13 */
     610       30160 :             tmp = sub( fac_fx[0], tmp );                 /*Q13 */
     611       30160 :             L_tmp = L_mult( y_index[i], tmp );           /*Q14 */
     612       30160 :             y_index[i] = extract_h( L_shl( L_tmp, 2 ) ); /*Q0 */
     613             :         }
     614             :     }
     615             : 
     616             :     /* bit allocation based on modified norm */
     617        5655 :     L_tmp = L_mult( band_num, 24576 );    /*Q16 */
     618        5655 :     tmp = extract_h( L_shl( L_tmp, 7 ) ); /*Q7 */
     619        5655 :     IF( sub( shl( bit_band, 7 ), tmp ) >= 0 )
     620             :     {
     621       51341 :         FOR( j = 0; j < band_num; j++ )
     622             :         {
     623       46312 :             IF( y_index[j] < 0 )
     624             :             {
     625        1092 :                 y_index[j] = 0;
     626        1092 :                 move16();
     627             :             }
     628       46312 :             R_temp_fx[j] = 2097152;
     629       46312 :             move16(); /*Q21 = 1     move16(); */
     630             :         }
     631             : 
     632        5029 :         i = sub( band_num, 1 );
     633        5029 :         norm_sum = 0; /*Q0 */
     634       51341 :         FOR( k = 0; k <= i; k++ )
     635             :         {
     636       46312 :             norm_sum = add( norm_sum, y_index[k] );
     637             :         }
     638             : 
     639       11357 :         FOR( j = 0; j < band_num; j++ )
     640             :         {
     641       11357 :             IF( norm_sum == 0 )
     642             :             {
     643           0 :                 FOR( k = 0; k <= i; k++ )
     644             :                 {
     645           0 :                     R_temp_fx[k] = 0;
     646           0 :                     move32(); /*Q21 */
     647             :                 }
     648             :             }
     649             :             ELSE
     650             :             {
     651       11357 :                 exp = norm_s( norm_sum );
     652       11357 :                 tmp = shl( norm_sum, exp );        /*Q(exp) */
     653       11357 :                 tmp = div_s( 16384, tmp );         /*Q(15+14-exp) */
     654       11357 :                 Bits_avg_fx = L_mult( tmp, Bits ); /*Q(30-exp) */
     655             : 
     656      113086 :                 FOR( k = 0; k <= i; k++ )
     657             :                 {
     658      101729 :                     L_tmp = L_shl( L_deposit_l( y_index[k] ), 24 );
     659      101729 :                     Mpy_32_32_ss( Bits_avg_fx, L_tmp, &L_tmp, &lo );
     660             : 
     661      101729 :                     R_temp_fx[k] = L_shl( L_tmp, sub( exp, 2 ) );
     662      101729 :                     move32(); /*Q21 */
     663             :                 }
     664             :             }
     665             : 
     666       11357 :             L_tmp = L_shl( L_deposit_l( thr ), 21 ); /*Q21 */
     667       11357 :             IF( L_sub( R_temp_fx[i], L_tmp ) < 0 )
     668             :             {
     669        6328 :                 R_temp_fx[i] = 0;
     670        6328 :                 move32();
     671        6328 :                 norm_sum = sub( norm_sum, y_index[i] );
     672        6328 :                 i--;
     673             :             }
     674             :             ELSE
     675             :             {
     676        5029 :                 BREAK;
     677             :             }
     678             :         }
     679             :     }
     680             :     ELSE
     681             :     {
     682        1188 :         FOR( j = 0; j < bit_band; j++ )
     683             :         {
     684         562 :             IF( y_index[j] < 0 )
     685             :             {
     686           8 :                 y_index[j] = 0;
     687           8 :                 move16();
     688             :             }
     689         562 :             R_temp_fx[j] = 2097152;
     690         562 :             move32(); /*Q21 = 1 */
     691             :         }
     692             : 
     693        2762 :         FOR( j = bit_band; j < band_num; j++ )
     694             :         {
     695        2136 :             R_temp_fx[j] = 0;
     696        2136 :             move32();
     697             :         }
     698             : 
     699         626 :         norm_sum = 0;
     700        1188 :         FOR( k = 0; k < bit_band; k++ )
     701             :         {
     702         562 :             norm_sum = add( norm_sum, y_index[k] );
     703             :         }
     704             : 
     705         626 :         i = bit_band;
     706         937 :         FOR( j = 0; j < bit_band; j++ )
     707             :         {
     708         404 :             IF( norm_sum == 0 )
     709             :             {
     710           0 :                 FOR( k = 0; k < i; k++ )
     711             :                 {
     712           0 :                     R_temp_fx[k] = 0;
     713           0 :                     move32(); /*Q21                    */
     714             :                 }
     715             :             }
     716             :             ELSE
     717             :             {
     718         404 :                 exp = norm_s( norm_sum );
     719         404 :                 tmp = shl( norm_sum, exp );        /*Q(exp) */
     720         404 :                 tmp = div_s( 16384, tmp );         /*Q(15+14-exp) */
     721         404 :                 Bits_avg_fx = L_mult( tmp, Bits ); /*Q(30-exp) */
     722        1460 :                 FOR( k = 0; k < i; k++ )
     723             :                 {
     724        1056 :                     L_tmp = L_shl( L_deposit_l( y_index[k] ), 24 );
     725        1056 :                     Mpy_32_32_ss( Bits_avg_fx, L_tmp, &L_tmp, &lo );
     726        1056 :                     R_temp_fx[k] = L_shl( L_tmp, sub( exp, 2 ) );
     727        1056 :                     move32(); /*Q21 */
     728             :                 }
     729             :             }
     730         404 :             R_sum_fx = 0;
     731         404 :             L_tmp = L_shl( L_deposit_l( thr ), 21 ); /*Q21 */
     732        1270 :             FOR( k = 0; k < i; k++ )
     733             :             {
     734         959 :                 IF( L_sub( R_temp_fx[k], L_tmp ) < 0 )
     735             :                 {
     736         283 :                     FOR( m = k; m < i; m++ )
     737             :                     {
     738         190 :                         norm_sum = sub( norm_sum, y_index[m] );
     739         190 :                         R_temp_fx[m] = 0;
     740         190 :                         move32(); /*Q21 */
     741             :                     }
     742          93 :                     i = k;
     743          93 :                     BREAK;
     744             :                 }
     745             :                 ELSE
     746             :                 {
     747         866 :                     R_sum_fx = L_add( R_sum_fx, R_temp_fx[k] );
     748             :                 }
     749             :             }
     750         404 :             IF( L_sub( R_sum_fx, R_sum_org_fx ) == 0 )
     751             :             {
     752          93 :                 BREAK;
     753             :             }
     754             : 
     755         311 :             R_sum_org_fx = R_sum_fx;
     756             :         }
     757             :     }
     758             : 
     759             :     /*  index comeback */
     760       54665 :     FOR( k = 0; k < band_num; k++ )
     761             :     {
     762       49010 :         j = index[k];
     763       49010 :         move16();
     764       49010 :         Rsubband_fx[add( j, start_band )] = R_temp_fx[k];
     765       49010 :         move32();
     766             :     }
     767             : 
     768        5655 :     return;
     769             : }
     770             : 
     771             : /*-------------------------------------------------------------------*
     772             :  * BitAllocWB()
     773             :  *
     774             :  * WB bit allocation
     775             :  *-------------------------------------------------------------------*/
     776             : 
     777             : /*! r: Integer (truncated) number of allocated bits */
     778        1885 : int16_t BitAllocWB(
     779             :     int16_t *y,       /* i  : norm of sub-vectors                           */
     780             :     int16_t B,        /* i  : number of available bits                      */
     781             :     int16_t N,        /* i  : number of sub-vectors                         */
     782             :     int16_t *R,       /* o  : bit-allocation indicator                      */
     783             :     int16_t *Rsubband /* o  : sub-band bit-allocation vector (Q3)           */
     784             : )
     785             : {
     786             :     Word16 t_fx;
     787             :     Word16 i, j, k, B1, B2, B3, B_saved;
     788             :     Word16 Rsum_fx, Rsum_sub_fx[3];
     789             :     Word32 Ravg_sub_32_fx[3], R_diff_32_fx[2];
     790             :     Word16 factor_fx[2]; /*Q13 */
     791             :     Word16 BANDS;
     792             :     Word16 tmp, exp;
     793             :     Word32 L_tmp, L_tmp1;
     794             :     Word32 Rsubband_buf[NB_SFM];
     795             :     UWord16 lo;
     796             : 
     797        1885 :     BANDS = N;
     798        1885 :     move16();
     799        1885 :     IF( sub( BANDS, SFM_N ) > 0 )
     800             :     {
     801           0 :         BANDS = SFM_N;
     802           0 :         move16();
     803             :     }
     804             :     /* Init Rsubband to non-zero values for bands to be allocated bits */
     805       50895 :     FOR( k = 0; k < BANDS; k++ )
     806             :     {
     807       49010 :         Rsubband_buf[k] = 2097152;
     808       49010 :         move32(); /*Q21 */
     809             :     }
     810             :     /* Calculate the norm sum and average of sub-band */
     811        1885 :     Rsum_sub_fx[0] = 0;
     812       32045 :     FOR( j = 0; j < SFM_G1; j++ )
     813             :     {
     814       30160 :         IF( y[j] > 0 )
     815             :         {
     816       29020 :             Rsum_sub_fx[0] = add( Rsum_sub_fx[0], y[j] );
     817       29020 :             move16(); /*Q0 */
     818             :         }
     819             :     }
     820        1885 :     Ravg_sub_32_fx[0] = L_mult( Rsum_sub_fx[0], 2048 );
     821        1885 :     move32(); /*Q16  0+15+1, q15 1/16 =2048 */
     822             : 
     823        1885 :     Rsum_sub_fx[1] = 0;
     824        1885 :     move32();
     825       16965 :     FOR( j = SFM_G1; j < SFM_G1G2; j++ )
     826             :     {
     827       15080 :         IF( y[j] > 0 )
     828             :         {
     829       13413 :             Rsum_sub_fx[1] = add( Rsum_sub_fx[1], y[j] );
     830       13413 :             move16(); /*Q0 */
     831             :         }
     832             :     }
     833        1885 :     Ravg_sub_32_fx[1] = L_mult( Rsum_sub_fx[1], 4096 ); /*16  0+15+1, q15 1/8 =4096 */
     834             : 
     835        1885 :     Rsum_sub_fx[2] = 0;
     836        1885 :     move16();
     837        5655 :     FOR( j = SFM_G1G2; j < BANDS; j++ )
     838             :     {
     839        3770 :         IF( y[j] > 0 )
     840             :         {
     841        3338 :             Rsum_sub_fx[2] = add( Rsum_sub_fx[2], y[j] );
     842        3338 :             move16(); /*Q0 */
     843             :         }
     844             :     }
     845        1885 :     tmp = div_s( 1, BANDS - SFM_G1G2 ); /*Q15 */
     846        1885 :     Ravg_sub_32_fx[2] = L_mult( Rsum_sub_fx[2], tmp );
     847        1885 :     move32(); /*Q16 */
     848             : 
     849             :     /* Bit allocation for every group */
     850        1885 :     tmp = add( Rsum_sub_fx[0], Rsum_sub_fx[1] );
     851        1885 :     Rsum_fx = add( tmp, Rsum_sub_fx[2] ); /*Q0     */
     852             : 
     853        1885 :     factor_fx[0] = 16384; /*Q13     move16(); */
     854        1885 :     factor_fx[1] = 24576; /*Q13     move16(); */
     855             :     {
     856        1885 :         R_diff_32_fx[0] = L_sub( Ravg_sub_32_fx[0], Ravg_sub_32_fx[1] );
     857        1885 :         move32(); /*Q16 */
     858        1885 :         R_diff_32_fx[1] = L_sub( Ravg_sub_32_fx[1], Ravg_sub_32_fx[2] );
     859        1885 :         move32(); /*Q16 */
     860             : 
     861        1885 :         IF( L_sub( R_diff_32_fx[0], 393216 ) < 0 && L_sub( R_diff_32_fx[1], 245760 ) < 0 )
     862             :         {
     863        1250 :             IF( Rsum_fx == 0 )
     864             :             {
     865           0 :                 B1 = 0;
     866           0 :                 move16();
     867           0 :                 B2 = 0;
     868           0 :                 move16();
     869           0 :                 B3 = 0;
     870           0 :                 move16();
     871             :             }
     872             :             ELSE
     873             :             {
     874        1250 :                 exp = norm_s( Rsum_fx );
     875        1250 :                 tmp = shl( Rsum_fx, exp );            /*Q(exp) */
     876        1250 :                 tmp = div_s( 16384, tmp );            /*Q(15+14-exp) */
     877        1250 :                 L_tmp1 = L_mult( B, Rsum_sub_fx[0] ); /*Q1 */
     878        1250 :                 Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo );
     879        1250 :                 B1 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */
     880        1250 :                 IF( L_sub( L_tmp1, L_mult( B1, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B1, 1 ), Rsum_fx ) ) >= 0 )
     881             :                 {
     882         132 :                     B1 = add( B1, 1 );
     883             :                 }
     884        1250 :                 L_tmp1 = L_mult( B, Rsum_sub_fx[1] ); /*Q1 */
     885        1250 :                 Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo );
     886        1250 :                 B2 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */
     887        1250 :                 IF( L_sub( L_tmp1, L_mult( B2, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B2, 1 ), Rsum_fx ) ) >= 0 )
     888             :                 {
     889          24 :                     B2 = add( B2, 1 );
     890             :                 }
     891        1250 :                 L_tmp1 = L_mult( B, Rsum_sub_fx[2] ); /*Q1 */
     892        1250 :                 Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo );
     893        1250 :                 B3 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */
     894        1250 :                 IF( L_sub( L_tmp1, L_mult( B3, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B3, 1 ), Rsum_fx ) ) >= 0 )
     895             :                 {
     896          20 :                     B3 = add( B3, 1 );
     897             :                 }
     898             :             }
     899        1250 :             IF( L_sub( Ravg_sub_32_fx[2], 786432 ) > 0 )
     900             :             {
     901         413 :                 B_saved = 0;
     902         413 :                 move16();
     903         413 :                 IF( sub( B1, 288 ) > 0 )
     904             :                 {
     905          52 :                     B_saved = sub( B1, 288 );
     906          52 :                     B1 = 288;
     907          52 :                     move16();
     908             :                 }
     909             : 
     910         413 :                 IF( sub( B2, 256 ) > 0 )
     911             :                 {
     912           0 :                     tmp = sub( B2, 256 );
     913           0 :                     B_saved = add( B_saved, tmp );
     914           0 :                     B2 = 256;
     915           0 :                     move16();
     916             :                 }
     917             : 
     918         413 :                 IF( sub( B3, 96 ) > 0 )
     919             :                 {
     920           0 :                     tmp = sub( B3, 96 );
     921           0 :                     B_saved = add( B_saved, tmp );
     922           0 :                     B3 = 96;
     923           0 :                     move16();
     924             :                 }
     925             : 
     926         413 :                 IF( B_saved > 0 )
     927             :                 {
     928          52 :                     IF( sub( B1, 288 ) == 0 )
     929             :                     {
     930          52 :                         tmp = shr( B_saved, 1 );
     931          52 :                         B2 = add( B2, tmp );
     932          52 :                         tmp = sub( B, B1 );
     933          52 :                         B3 = sub( tmp, B2 );
     934             :                     }
     935             :                     ELSE
     936             :                     {
     937           0 :                         tmp = shr( B_saved, 1 );
     938           0 :                         B1 = add( B1, tmp );
     939           0 :                         IF( sub( B2, 256 ) == 0 )
     940             :                         {
     941           0 :                             tmp = sub( B, B1 );
     942           0 :                             B3 = sub( tmp, B2 );
     943             :                         }
     944             :                         ELSE
     945             :                         {
     946           0 :                             tmp = sub( B, B1 );
     947           0 :                             B2 = sub( tmp, B3 );
     948             :                         }
     949             :                     }
     950             :                 }
     951             :             }
     952             : 
     953        1250 :             factor_fx[0] = 16384;
     954        1250 :             move16(); /*Q13 */
     955        1250 :             factor_fx[1] = 12288;
     956        1250 :             move16(); /*Q13 */
     957             :         }
     958             :         ELSE
     959             :         {
     960         635 :             IF( Rsum_fx == 0 )
     961             :             {
     962           0 :                 B1 = 0;
     963           0 :                 move16();
     964           0 :                 B2 = 0;
     965           0 :                 move16();
     966           0 :                 B3 = B;
     967           0 :                 move16();
     968             :             }
     969             :             ELSE
     970             :             {
     971         635 :                 exp = norm_s( Rsum_fx );
     972         635 :                 tmp = shl( Rsum_fx, exp );            /*Q(exp) */
     973         635 :                 tmp = div_s( 16384, tmp );            /*Q(15+14-exp) */
     974         635 :                 L_tmp1 = L_mult( B, Rsum_sub_fx[0] ); /*Q1 */
     975         635 :                 Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo );
     976         635 :                 B1 = extract_h( L_shl( L_tmp, add( exp, 1 ) ) ); /*Q0 */
     977         635 :                 IF( L_sub( L_tmp1, L_mult( B1, Rsum_fx ) ) > 0 && L_sub( L_tmp1, L_mult( add( B1, 1 ), Rsum_fx ) ) >= 0 )
     978             :                 {
     979           4 :                     B1 = add( B1, 1 );
     980             :                 }
     981         635 :                 Mpy_32_16_ss( 1975684956, shl( B, 5 ), &L_tmp1, &lo );
     982         635 :                 Mpy_32_16_ss( L_tmp1, shl( Rsum_sub_fx[1], 7 ), &L_tmp1, &lo );
     983         635 :                 Mpy_32_16_ss( L_tmp1, tmp, &L_tmp, &lo );
     984         635 :                 B2 = extract_h( L_shl( L_tmp, sub( exp, 11 ) ) ); /*Q0 */
     985         635 :                 IF( L_sub( L_tmp1, L_shl( L_mult( B2, Rsum_fx ), 12 ) ) > 0 && L_sub( L_add( L_tmp1, 2 ), L_shl( L_mult( add( B2, 1 ), Rsum_fx ), 12 ) ) >= 0 )
     986             :                 {
     987           0 :                     B2 = add( B2, 1 );
     988             :                 }
     989         635 :                 tmp = sub( B, B1 );
     990         635 :                 B3 = sub( tmp, B2 );
     991             :             }
     992             :         }
     993             :     }
     994             : 
     995        1885 :     IF( sub( Rsum_sub_fx[2], 3 ) < 0 )
     996             :     {
     997         264 :         B2 = add( B2, B3 );
     998         264 :         B3 = 0;
     999         264 :         move16();
    1000             :     }
    1001             : 
    1002             :     /* Bit allocation in group */
    1003        1885 :     Bit_group_fx( y, 0, SFM_G1, B1, 5, Rsubband_buf, factor_fx );
    1004        1885 :     Bit_group_fx( y, SFM_G1, SFM_G1G2, B2, 6, Rsubband_buf, factor_fx );
    1005        1885 :     Bit_group_fx( y, SFM_G1G2, BANDS, B3, 7, Rsubband_buf, factor_fx );
    1006       50895 :     FOR( i = 0; i < BANDS; i++ )
    1007             :     {
    1008       49010 :         Rsubband[i] = extract_l( L_shr( Rsubband_buf[i], 18 ) );
    1009       49010 :         move16();
    1010             :     }
    1011             : 
    1012             :     /* Calcuate total used bits and initialize R to be used for Noise Filling */
    1013        1885 :     L_tmp = 0;
    1014        1885 :     move32();
    1015       50895 :     FOR( i = 0; i < N; i++ )
    1016             :     {
    1017       49010 :         L_tmp = L_add( L_tmp, Rsubband_buf[i] );         /*Q21 */
    1018       49010 :         R[i] = extract_h( L_shr( Rsubband_buf[i], 5 ) ); /*Q0 */
    1019             :     }
    1020        1885 :     t_fx = extract_h( L_shr( L_tmp, 5 ) ); /*Q0 */
    1021             : 
    1022        1885 :     return (Word16) t_fx;
    1023             : }
    1024             : 
    1025             : #undef WMC_TOOL_SKIP

Generated by: LCOV version 1.14