LCOV - code coverage report
Current view: top level - lib_com - complex_basop.c (source / functions) Hit Total Coverage
Test: Coverage on main enc/dec/rend @ 3b2f07138c61dcf997bbf4165d0882f794b2995f Lines: 76 132 57.6 %
Date: 2025-05-03 01:55:50 Functions: 20 35 57.1 %

          Line data    Source code
       1             : /*****************************************************************************
       2             : 
       3             : *
       4             : 
       5             : *  Complex arithmetic operators
       6             : 
       7             : *
       8             : 
       9             : *****************************************************************************/
      10             : 
      11             : 
      12             : #include "stl.h"
      13             : 
      14             : #define WMC_TOOL_SKIP
      15             : 
      16             : #ifdef COMPLEX_OPERATOR
      17             : 
      18             : /* ================================ New Complex Basops ========================= */
      19             : 
      20  8275829444 : cmplx CL_shr( cmplx inp, Word16 shift_val )
      21             : {
      22             :     cmplx out;
      23  8275829444 :     out.re = L_shr( inp.re, shift_val );
      24  8275829444 :     out.im = L_shr( inp.im, shift_val );
      25             : #ifdef WMOPS
      26             :     multiCounter[currCounter].CL_shr++;
      27             :     multiCounter[currCounter].L_shr--;
      28             :     multiCounter[currCounter].L_shr--;
      29             : #endif
      30  8275829444 :     return out;
      31             : }
      32             : 
      33  2732699216 : cmplx CL_shl( cmplx inp, Word16 shift_val )
      34             : {
      35             :     cmplx out;
      36  2732699216 :     out.re = L_shl( inp.re, shift_val );
      37  2732699216 :     out.im = L_shl( inp.im, shift_val );
      38             : #ifdef WMOPS
      39             :     multiCounter[currCounter].CL_shl++;
      40             :     multiCounter[currCounter].L_shl--;
      41             :     multiCounter[currCounter].L_shl--;
      42             : #endif
      43  2732699216 :     return out;
      44             : }
      45             : 
      46 28379626860 : cmplx CL_add( cmplx inp1, cmplx inp2 )
      47             : {
      48             :     cmplx out;
      49 28379626860 :     out.re = L_add( inp1.re, inp2.re );
      50 28379626860 :     out.im = L_add( inp1.im, inp2.im );
      51             : #ifdef WMOPS
      52             :     multiCounter[currCounter].CL_add++;
      53             :     multiCounter[currCounter].L_add--;
      54             :     multiCounter[currCounter].L_add--;
      55             : #endif
      56 28379626860 :     return out;
      57             : }
      58             : 
      59 21551258008 : cmplx CL_sub( cmplx inp1, cmplx inp2 )
      60             : {
      61             :     cmplx out;
      62 21551258008 :     out.re = L_sub( inp1.re, inp2.re );
      63 21551258008 :     out.im = L_sub( inp1.im, inp2.im );
      64             : #ifdef WMOPS
      65             :     multiCounter[currCounter].CL_sub++;
      66             :     multiCounter[currCounter].L_sub--;
      67             :     multiCounter[currCounter].L_sub--;
      68             : #endif
      69 21551258008 :     return out;
      70             : }
      71             : 
      72 13914022022 : cmplx CL_scale( cmplx x, Word16 y )
      73             : {
      74             :     cmplx result;
      75 13914022022 :     result.re = Mpy_32_16_r( x.re, y );
      76 13914022022 :     result.im = Mpy_32_16_r( x.im, y );
      77             : #ifdef WMOPS
      78             :     multiCounter[currCounter].Mpy_32_16_r--;
      79             :     multiCounter[currCounter].Mpy_32_16_r--;
      80             :     multiCounter[currCounter].CL_scale++;
      81             : #endif /* #ifdef WMOPS */
      82 13914022022 :     return ( result );
      83             : }
      84             : 
      85           0 : cmplx CL_dscale( cmplx x, Word16 y1, Word16 y2 )
      86             : {
      87             :     cmplx result;
      88           0 :     result.re = Mpy_32_16_r( x.re, y1 );
      89           0 :     result.im = Mpy_32_16_r( x.im, y2 );
      90             : #ifdef WMOPS
      91             :     multiCounter[currCounter].Mpy_32_16_r--;
      92             :     multiCounter[currCounter].Mpy_32_16_r--;
      93             :     multiCounter[currCounter].CL_dscale++;
      94             : #endif /* #ifdef WMOPS */
      95           0 :     return ( result );
      96             : }
      97             : 
      98  5710486632 : cmplx CL_msu_j( cmplx x, cmplx y )
      99             : {
     100             :     cmplx result;
     101  5710486632 :     result.re = L_add( x.re, y.im );
     102  5710486632 :     result.im = L_sub( x.im, y.re );
     103             : #ifdef WMOPS
     104             :     multiCounter[currCounter].CL_msu_j++;
     105             :     multiCounter[currCounter].L_add--;
     106             :     multiCounter[currCounter].L_sub--;
     107             : #endif
     108  5710486632 :     return result;
     109             : }
     110             : 
     111  9986527521 : cmplx CL_mac_j( cmplx x, cmplx y )
     112             : {
     113             :     cmplx result;
     114  9986527521 :     result.re = L_sub( x.re, y.im );
     115  9986527521 :     result.im = L_add( x.im, y.re );
     116             : #ifdef WMOPS
     117             :     multiCounter[currCounter].CL_mac_j++;
     118             :     multiCounter[currCounter].L_add--;
     119             :     multiCounter[currCounter].L_sub--;
     120             : #endif
     121  9986527521 :     return result;
     122             : }
     123             : 
     124      943914 : cmplx CL_move( cmplx x )
     125             : {
     126             : #ifdef WMOPS
     127             :     multiCounter[currCounter].CL_move++;
     128             : #endif
     129      943914 :     return x;
     130             : }
     131             : 
     132    13792352 : Word32 CL_Extract_real( cmplx x )
     133             : {
     134             : #ifdef WMOPS
     135             :     multiCounter[currCounter].CL_Extract_real++;
     136             : #endif
     137    13792352 :     return x.re;
     138             : }
     139             : 
     140    13792352 : Word32 CL_Extract_imag( cmplx x )
     141             : {
     142             : #ifdef WMOPS
     143             :     multiCounter[currCounter].CL_Extract_imag++;
     144             : #endif
     145    13792352 :     return x.im;
     146             : }
     147             : 
     148    13792352 : cmplx CL_form( Word32 re, Word32 im )
     149             : {
     150             :     cmplx result;
     151    13792352 :     result.re = re;
     152    13792352 :     result.im = im;
     153             : #ifdef WMOPS
     154             :     multiCounter[currCounter].CL_form++;
     155             : #endif
     156    13792352 :     return result;
     157             : }
     158             : 
     159           0 : cmplx CL_multr_32x16( cmplx input, cmplx_s coeff )
     160             : {
     161             :     cmplx result;
     162           0 :     result.re = W_round48_L( W_sub_nosat( W_mult_32_16( input.re, coeff.re ), W_mult_32_16( input.im, coeff.im ) ) );
     163           0 :     result.im = W_round48_L( W_add_nosat( W_mult_32_16( input.re, coeff.im ), W_mult_32_16( input.im, coeff.re ) ) );
     164             : #ifdef WMOPS
     165             :     multiCounter[currCounter].CL_multr_32x16++;
     166             :     multiCounter[currCounter].W_mult_32_16--;
     167             :     multiCounter[currCounter].W_mult_32_16--;
     168             :     multiCounter[currCounter].W_mult_32_16--;
     169             :     multiCounter[currCounter].W_mult_32_16--;
     170             :     multiCounter[currCounter].W_sub_nosat--;
     171             :     multiCounter[currCounter].W_add_nosat--;
     172             :     multiCounter[currCounter].W_round48_L--;
     173             :     multiCounter[currCounter].W_round48_L--;
     174             : #endif
     175           0 :     return result;
     176             : }
     177             : 
     178   167341214 : cmplx CL_negate( cmplx x )
     179             : {
     180             :     cmplx result;
     181   167341214 :     result.re = L_negate( x.re );
     182   167341214 :     result.im = L_negate( x.im );
     183             : #ifdef WMOPS
     184             :     multiCounter[currCounter].CL_negate++;
     185             :     multiCounter[currCounter].L_negate--;
     186             :     multiCounter[currCounter].L_negate--;
     187             : #endif
     188   167341214 :     return result;
     189             : }
     190             : 
     191  3377837660 : cmplx CL_conjugate( cmplx x )
     192             : {
     193             :     cmplx result;
     194  3377837660 :     result.re = x.re;
     195  3377837660 :     result.im = L_negate( x.im );
     196             : #ifdef WMOPS
     197             :     multiCounter[currCounter].CL_conjugate++;
     198             :     multiCounter[currCounter].L_negate--;
     199             : #endif
     200  3377837660 :     return result;
     201             : }
     202             : 
     203             : 
     204   116378720 : cmplx CL_mul_j( cmplx input )
     205             : {
     206             :     cmplx temp, result;
     207   116378720 :     temp = CL_negate( input );
     208   116378720 :     result.re = temp.im;
     209   116378720 :     result.im = input.re;
     210             : #ifdef WMOPS
     211             :     multiCounter[currCounter].CL_mul_j++;
     212             :     multiCounter[currCounter].CL_negate--;
     213             : #endif
     214   116378720 :     return result;
     215             : }
     216             : 
     217  1682873096 : cmplx CL_swap_real_imag( cmplx input )
     218             : {
     219             :     cmplx result;
     220  1682873096 :     result.re = input.im;
     221  1682873096 :     result.im = input.re;
     222             : #ifdef WMOPS
     223             :     multiCounter[currCounter].CL_swap_real_imag++;
     224             : #endif
     225  1682873096 :     return result;
     226             : }
     227             : 
     228      992000 : cmplx_s C_add( cmplx_s inp1, cmplx_s inp2 )
     229             : {
     230             :     cmplx_s out;
     231      992000 :     out.re = add( inp1.re, inp2.re );
     232      992000 :     out.im = add( inp1.im, inp2.im );
     233             : 
     234             : #ifdef WMOPS
     235             :     multiCounter[currCounter].C_add++;
     236             :     multiCounter[currCounter].add--;
     237             :     multiCounter[currCounter].add--;
     238             : #endif
     239      992000 :     return out;
     240             : }
     241             : 
     242      992000 : cmplx_s C_sub( cmplx_s inp1, cmplx_s inp2 )
     243             : {
     244             :     cmplx_s out;
     245      992000 :     out.re = sub( inp1.re, inp2.re );
     246      992000 :     out.im = sub( inp1.im, inp2.im );
     247             : 
     248             : #ifdef WMOPS
     249             :     multiCounter[currCounter].C_sub++;
     250             :     multiCounter[currCounter].sub--;
     251             :     multiCounter[currCounter].sub--;
     252             : #endif
     253      992000 :     return out;
     254             : }
     255             : 
     256      248000 : cmplx_s C_mul_j( cmplx_s input )
     257             : {
     258             :     cmplx_s result;
     259             :     Word16 temp;
     260      248000 :     temp = negate( input.im );
     261      248000 :     result.re = temp;
     262      248000 :     result.im = input.re;
     263             : 
     264             : #ifdef WMOPS
     265             :     multiCounter[currCounter].C_mul_j++;
     266             :     multiCounter[currCounter].negate--;
     267             : #endif
     268      248000 :     return result;
     269             : }
     270             : 
     271      372000 : cmplx_s C_multr( cmplx_s x, cmplx_s c )
     272             : {
     273             :     cmplx_s result;
     274      372000 :     result.re = round_fx( W_sat_l( W_sub_nosat( W_mult_16_16( x.re, c.re ), W_mult_16_16( x.im, c.im ) ) ) );
     275      372000 :     result.im = round_fx( W_sat_l( W_add_nosat( W_mult_16_16( x.im, c.re ), W_mult_16_16( x.re, c.im ) ) ) );
     276             : 
     277             : #ifdef WMOPS
     278             :     multiCounter[currCounter].C_multr++;
     279             :     multiCounter[currCounter].W_mult_16_16--;
     280             :     multiCounter[currCounter].W_mult_16_16--;
     281             :     multiCounter[currCounter].W_mult_16_16--;
     282             :     multiCounter[currCounter].W_mult_16_16--;
     283             :     multiCounter[currCounter].W_sub_nosat--;
     284             :     multiCounter[currCounter].W_add_nosat--;
     285             :     multiCounter[currCounter].W_sat_l--;
     286             :     multiCounter[currCounter].W_sat_l--;
     287             :     multiCounter[currCounter].round--;
     288             :     multiCounter[currCounter].round--;
     289             : #endif
     290      372000 :     return result;
     291             : }
     292             : 
     293     6896176 : cmplx_s C_form( Word16 re, Word16 im )
     294             : {
     295             :     cmplx_s result;
     296     6896176 :     result.re = re;
     297     6896176 :     result.im = im;
     298             : #ifdef WMOPS
     299             :     multiCounter[currCounter].C_form++;
     300             : #endif
     301     6896176 :     return result;
     302             : }
     303             : 
     304           0 : cmplx C_scale( cmplx_s x, Word16 y )
     305             : {
     306             :     cmplx result;
     307           0 :     result.re = L_mult( x.re, y );
     308           0 :     result.im = L_mult( x.im, y );
     309             : #ifdef WMOPS
     310             :     multiCounter[currCounter].L_mult--;
     311             :     multiCounter[currCounter].L_mult--;
     312             :     multiCounter[currCounter].C_scale++;
     313             : #endif /* #ifdef WMOPS */
     314           0 :     return ( result );
     315             : }
     316             : 
     317           0 : cmplx_s CL_round32_16( cmplx x )
     318             : {
     319             :     cmplx_s result;
     320           0 :     result.re = round_fx( x.re );
     321           0 :     result.im = round_fx( x.im );
     322             : 
     323             : #ifdef WMOPS
     324             :     multiCounter[currCounter].CL_round32_16++;
     325             :     multiCounter[currCounter].round--;
     326             :     multiCounter[currCounter].round--;
     327             : #endif
     328           0 :     return result;
     329             : }
     330             : 
     331           0 : cmplx CL_scale_32( cmplx x, Word32 y )
     332             : {
     333             :     cmplx result;
     334           0 :     result.re = Mpy_32_32_r( x.re, y );
     335           0 :     result.im = Mpy_32_32_r( x.im, y );
     336             : #ifdef WMOPS
     337             :     multiCounter[currCounter].Mpy_32_32_r--;
     338             :     multiCounter[currCounter].Mpy_32_32_r--;
     339             :     multiCounter[currCounter].CL_scale_32++;
     340             : #endif /* #ifdef WMOPS */
     341           0 :     return ( result );
     342             : }
     343             : 
     344           0 : cmplx CL_dscale_32( cmplx x, Word32 y1, Word32 y2 )
     345             : {
     346             :     cmplx result;
     347           0 :     result.re = Mpy_32_32_r( x.re, y1 );
     348           0 :     result.im = Mpy_32_32_r( x.im, y2 );
     349             : #ifdef WMOPS
     350             :     multiCounter[currCounter].Mpy_32_32_r--;
     351             :     multiCounter[currCounter].Mpy_32_32_r--;
     352             :     multiCounter[currCounter].CL_dscale_32++;
     353             : #endif /* #ifdef WMOPS */
     354           0 :     return ( result );
     355             : }
     356             : 
     357           0 : cmplx CL_multr_32x32( cmplx x, cmplx y )
     358             : {
     359             :     cmplx result;
     360           0 :     result.re = W_round64_L( W_sub( W_mult_32_32( x.re, y.re ), W_mult_32_32( x.im, y.im ) ) );
     361           0 :     result.im = W_round64_L( W_add( W_mult_32_32( x.im, y.re ), W_mult_32_32( x.re, y.im ) ) );
     362             : 
     363             : #ifdef WMOPS
     364             :     multiCounter[currCounter].CL_multr_32x32++;
     365             :     multiCounter[currCounter].W_mult_32_32--;
     366             :     multiCounter[currCounter].W_mult_32_32--;
     367             :     multiCounter[currCounter].W_mult_32_32--;
     368             :     multiCounter[currCounter].W_mult_32_32--;
     369             :     multiCounter[currCounter].W_round64_L--;
     370             :     multiCounter[currCounter].W_round64_L--;
     371             :     multiCounter[currCounter].W_sub--;
     372             :     multiCounter[currCounter].W_add--;
     373             : #endif
     374           0 :     return result;
     375             : }
     376             : 
     377           0 : cmplx_s C_mac_r( cmplx x, cmplx_s y, Word16 c )
     378             : {
     379             :     cmplx_s result;
     380           0 :     cmplx temp = CL_add( x, C_scale( y, c ) );
     381           0 :     result = CL_round32_16( temp );
     382             : 
     383             : #ifdef WMOPS
     384             :     multiCounter[currCounter].C_mac_r++;
     385             :     multiCounter[currCounter].CL_add--;
     386             :     multiCounter[currCounter].C_scale--;
     387             :     multiCounter[currCounter].CL_round32_16--;
     388             : #endif
     389           0 :     return result;
     390             : }
     391             : 
     392           0 : cmplx_s C_msu_r( cmplx x, cmplx_s y, Word16 c )
     393             : {
     394             :     cmplx_s result;
     395           0 :     cmplx temp = CL_sub( x, C_scale( y, c ) );
     396           0 :     result = CL_round32_16( temp );
     397             : 
     398             : #ifdef WMOPS
     399             :     multiCounter[currCounter].C_msu_r++;
     400             :     multiCounter[currCounter].CL_sub--;
     401             :     multiCounter[currCounter].C_scale--;
     402             :     multiCounter[currCounter].CL_round32_16--;
     403             : #endif
     404           0 :     return result;
     405             : }
     406             : 
     407           0 : Word16 C_Extract_real( cmplx_s x )
     408             : {
     409             : #ifdef WMOPS
     410             :     multiCounter[currCounter].C_Extract_real++;
     411             : #endif
     412           0 :     return x.re;
     413             : }
     414             : 
     415           0 : Word16 C_Extract_imag( cmplx_s x )
     416             : {
     417             : #ifdef WMOPS
     418             :     multiCounter[currCounter].C_Extract_imag++;
     419             : #endif
     420           0 :     return x.im;
     421             : }
     422             : 
     423           0 : cmplx_s C_negate( cmplx_s x )
     424             : {
     425             :     cmplx_s result;
     426           0 :     result.re = negate( x.re );
     427           0 :     result.im = negate( x.im );
     428             : #ifdef WMOPS
     429             :     multiCounter[currCounter].C_negate++;
     430             :     multiCounter[currCounter].negate--;
     431             :     multiCounter[currCounter].negate--;
     432             : #endif
     433           0 :     return result;
     434             : }
     435             : 
     436           0 : cmplx_s C_conjugate( cmplx_s x )
     437             : {
     438             :     cmplx_s result;
     439           0 :     result.re = x.re;
     440           0 :     result.im = negate( x.im );
     441             : #ifdef WMOPS
     442             :     multiCounter[currCounter].C_conjugate++;
     443             :     multiCounter[currCounter].negate--;
     444             : #endif
     445           0 :     return result;
     446             : }
     447             : 
     448           0 : cmplx_s C_shr( cmplx_s inp, Word16 shift_val )
     449             : {
     450             :     cmplx_s out;
     451           0 :     out.re = shr( inp.re, shift_val );
     452           0 :     out.im = shr( inp.im, shift_val );
     453             : #ifdef WMOPS
     454             :     multiCounter[currCounter].C_shr++;
     455             :     multiCounter[currCounter].shr--;
     456             :     multiCounter[currCounter].shr--;
     457             : #endif
     458           0 :     return out;
     459             : }
     460             : 
     461           0 : cmplx_s C_shl( cmplx_s inp, Word16 shift_val )
     462             : {
     463             :     cmplx_s out;
     464           0 :     out.re = shl( inp.re, shift_val );
     465           0 :     out.im = shl( inp.im, shift_val );
     466             : #ifdef WMOPS
     467             :     multiCounter[currCounter].C_shl++;
     468             :     multiCounter[currCounter].shl--;
     469             :     multiCounter[currCounter].shl--;
     470             : #endif
     471           0 :     return out;
     472             : }
     473             : 
     474             : #endif /* #ifdef COMPLEX_OPERATOR */
     475             : 
     476             : /* end of file */

Generated by: LCOV version 1.14