LCOV - code coverage report
Current view: top level - lib_com - enh32.c (source / functions) Hit Total Coverage
Test: Coverage on main enc/dec/rend @ 3b2f07138c61dcf997bbf4165d0882f794b2995f Lines: 51 51 100.0 %
Date: 2025-05-03 01:55:50 Functions: 12 12 100.0 %

          Line data    Source code
       1             : /*****************************************************************************
       2             :  *
       3             :  *  Enhanced 32 bit operators :
       4             :  *
       5             :  *    Mpy_32_16_1()
       6             :  *    Mpy_32_16_r()
       7             :  *    Mpy_32_32()
       8             :  *    Mpy_32_32_r()
       9             :  *    Madd_32_16()
      10             :  *    Msub_32_16()
      11             :  *    Madd_32_32()
      12             :  *    Msub_32_32()
      13             :  *
      14             :  *****************************************************************************/
      15             : 
      16             : 
      17             : /*****************************************************************************
      18             :  *
      19             :  *  Include-Files
      20             :  *
      21             :  *****************************************************************************/
      22             : #include <stdio.h>
      23             : #include <stdlib.h>
      24             : #include "stl.h"
      25             : 
      26             : #define WMC_TOOL_SKIP
      27             : 
      28             : #ifdef ENH_32_BIT_OPERATOR
      29             : /*****************************************************************************
      30             :  *
      31             :  *  Local Functions
      32             :  *
      33             :  *****************************************************************************/
      34             : 
      35             : /*****************************************************************************
      36             :  *
      37             :  *  Constants and Globals
      38             :  *
      39             :  *****************************************************************************/
      40             : 
      41             : 
      42             : /*****************************************************************************
      43             :  *
      44             :  *  Functions
      45             :  *
      46             :  *****************************************************************************/
      47             : 
      48 94846221061 : Word32 Mpy_32_16_1( Word32 L_var1, Word16 var2 )
      49             : {
      50 94846221061 :     Word32 L_var_out = W_sat_m( W_mult_32_16( L_var1, var2 ) );
      51             : #ifdef WMOPS
      52             :     multiCounter[currCounter].Mpy_32_16_1++;
      53             :     multiCounter[currCounter].W_mult_32_16--;
      54             :     multiCounter[currCounter].W_sat_m--;
      55             : #endif /* if WMOPS */
      56 94846221061 :     return L_var_out;
      57             : }
      58             : 
      59 35473212864 : Word32 Mpy_32_16_r( Word32 L_var1, Word16 var2 )
      60             : {
      61 35473212864 :     Word32 L_var_out = W_round48_L( W_mult_32_16( L_var1, var2 ) );
      62             : #ifdef WMOPS
      63             :     multiCounter[currCounter].Mpy_32_16_r++;
      64             :     multiCounter[currCounter].W_mult_32_16--;
      65             :     multiCounter[currCounter].W_round48_L--;
      66             : #endif /* if WMOPS */
      67 35473212864 :     return L_var_out;
      68             : }
      69             : 
      70 >23775*10^7 : Word32 Mpy_32_32( Word32 L_var1, Word32 L_var2 )
      71             : {
      72             :     Word32 L_var_out;
      73             :     Word64 L64_var1;
      74             : #ifdef BASOP_NOGLOB_DECLARE_LOCAL
      75 >23775*10^7 :     Flag Overflow = 0;
      76             : #endif
      77             : 
      78 >23775*10^7 :     L64_var1 = ( (Word64) L_var1 * L_var2 );
      79 >23775*10^7 :     L64_var1 = W_shl_o( L64_var1, 1, &Overflow );
      80 >23775*10^7 :     L_var_out = W_extract_h( L64_var1 );
      81             : #ifdef WMOPS
      82             :     multiCounter[currCounter].Mpy_32_32++;
      83             :     multiCounter[currCounter].W_shl--;
      84             :     multiCounter[currCounter].W_extract_h--;
      85             : #endif /* if WMOPS */
      86 >23775*10^7 :     return L_var_out;
      87             : }
      88             : 
      89  1304689021 : Word32 Mpy_32_32_r( Word32 L_var1, Word32 L_var2 )
      90             : {
      91             :     Word32 L_var_out;
      92             :     Word64 L64_var1;
      93             : 
      94  1304689021 :     L64_var1 = ( (Word64) L_var1 * L_var2 );
      95  1304689021 :     L64_var1 = W_shr( L64_var1, 15 );
      96  1304689021 :     L_var_out = W_round48_L( L64_var1 );
      97             : #ifdef WMOPS
      98             :     multiCounter[currCounter].Mpy_32_32_r++;
      99             :     multiCounter[currCounter].W_shr--;
     100             :     multiCounter[currCounter].W_round48_L--;
     101             : #endif /* if WMOPS */
     102  1304689021 :     return L_var_out;
     103             : }
     104             : 
     105 18777536398 : Word32 Madd_32_16( Word32 L_var3, Word32 L_var1, Word16 var2 )
     106             : {
     107             :     Word32 L_var_out;
     108             : #ifdef BASOP_NOGLOB_DECLARE_LOCAL
     109 18777536398 :     Flag Overflow = 0;
     110             : #endif
     111             : 
     112 18777536398 :     L_var_out = Mpy_32_16_1( L_var1, var2 );
     113 18777536398 :     L_var_out = L_add_o( L_var3, L_var_out, &Overflow );
     114             : 
     115             : #ifdef WMOPS
     116             :     multiCounter[currCounter].Mpy_32_16_1--;
     117             :     multiCounter[currCounter].L_add--;
     118             :     multiCounter[currCounter].Madd_32_16++;
     119             : #endif /* if WMOPS */
     120 18777536398 :     return L_var_out;
     121             : }
     122             : 
     123  4142996287 : Word32 Madd_32_16_r( Word32 L_var3, Word32 L_var1, Word16 var2 )
     124             : {
     125             :     Word32 L_var_out;
     126             : 
     127  4142996287 :     L_var_out = Mpy_32_16_r( L_var1, var2 );
     128  4142996287 :     L_var_out = L_add( L_var3, L_var_out );
     129             : 
     130             : #ifdef WMOPS
     131             :     multiCounter[currCounter].Mpy_32_16_r--;
     132             :     multiCounter[currCounter].L_add--;
     133             :     multiCounter[currCounter].Madd_32_16_r++;
     134             : #endif /* if WMOPS */
     135  4142996287 :     return L_var_out;
     136             : }
     137             : 
     138 16474502367 : Word32 Msub_32_16( Word32 L_var3, Word32 L_var1, Word16 var2 )
     139             : {
     140             :     Word32 L_var_out;
     141             : #ifdef BASOP_NOGLOB_DECLARE_LOCAL
     142 16474502367 :     Flag Overflow = 0;
     143             : #endif
     144             : 
     145 16474502367 :     L_var_out = Mpy_32_16_1( L_var1, var2 );
     146 16474502367 :     L_var_out = L_sub_o( L_var3, L_var_out, &Overflow );
     147             : 
     148             : #ifdef WMOPS
     149             :     multiCounter[currCounter].Mpy_32_16_1--;
     150             :     multiCounter[currCounter].L_sub--;
     151             :     multiCounter[currCounter].Msub_32_16++;
     152             : #endif /* if WMOPS */
     153 16474502367 :     return L_var_out;
     154             : }
     155             : 
     156     1595935 : Word32 Msub_32_16_r( Word32 L_var3, Word32 L_var1, Word16 var2 )
     157             : {
     158             :     Word32 L_var_out;
     159             : 
     160     1595935 :     L_var_out = Mpy_32_16_r( L_var1, var2 );
     161     1595935 :     L_var_out = L_sub( L_var3, L_var_out );
     162             : 
     163             : #ifdef WMOPS
     164             :     multiCounter[currCounter].Mpy_32_16_r--;
     165             :     multiCounter[currCounter].L_sub--;
     166             :     multiCounter[currCounter].Msub_32_16_r++;
     167             : #endif /* if WMOPS */
     168     1595935 :     return L_var_out;
     169             : }
     170             : 
     171 41877116245 : Word32 Madd_32_32( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
     172             : {
     173             :     Word32 L_var_out;
     174             : 
     175 41877116245 :     L_var_out = Mpy_32_32( L_var1, L_var2 );
     176 41877116245 :     L_var_out = L_add( L_var3, L_var_out );
     177             : 
     178             : #ifdef WMOPS
     179             :     multiCounter[currCounter].Mpy_32_32--;
     180             :     multiCounter[currCounter].L_add--;
     181             :     multiCounter[currCounter].Madd_32_32++;
     182             : #endif /* if WMOPS */
     183 41877116245 :     return L_var_out;
     184             : }
     185             : 
     186  1213224448 : Word32 Madd_32_32_r( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
     187             : {
     188             :     Word32 L_var_out;
     189             : 
     190  1213224448 :     L_var_out = Mpy_32_32_r( L_var1, L_var2 );
     191  1213224448 :     L_var_out = L_add( L_var3, L_var_out );
     192             : 
     193             : #ifdef WMOPS
     194             :     multiCounter[currCounter].Mpy_32_32_r--;
     195             :     multiCounter[currCounter].L_add--;
     196             :     multiCounter[currCounter].Madd_32_32_r++;
     197             : #endif /* if WMOPS */
     198  1213224448 :     return L_var_out;
     199             : }
     200             : 
     201 36980067724 : Word32 Msub_32_32( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
     202             : {
     203             :     Word32 L_var_out;
     204             : 
     205 36980067724 :     L_var_out = Mpy_32_32( L_var1, L_var2 );
     206 36980067724 :     L_var_out = L_sub( L_var3, L_var_out );
     207             : 
     208             : #ifdef WMOPS
     209             :     multiCounter[currCounter].Mpy_32_32--;
     210             :     multiCounter[currCounter].L_sub--;
     211             :     multiCounter[currCounter].Msub_32_32++;
     212             : #endif /* if WMOPS */
     213 36980067724 :     return L_var_out;
     214             : }
     215             : 
     216    27379200 : Word32 Msub_32_32_r( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
     217             : {
     218             :     Word32 L_var_out;
     219             : 
     220    27379200 :     L_var_out = Mpy_32_32_r( L_var1, L_var2 );
     221    27379200 :     L_var_out = L_sub( L_var3, L_var_out );
     222             : 
     223             : #ifdef WMOPS
     224             :     multiCounter[currCounter].Mpy_32_32_r--;
     225             :     multiCounter[currCounter].L_sub--;
     226             :     multiCounter[currCounter].Msub_32_32_r++;
     227             : #endif /* if WMOPS */
     228    27379200 :     return L_var_out;
     229             : }
     230             : 
     231             : #endif /* #ifdef ENH_32_BIT_OPERATOR */
     232             : #undef WMC_TOOL_SKIP
     233             : 
     234             : /* end of file */

Generated by: LCOV version 1.14