LCOV - code coverage report
Current view: top level - lib_com - enh64.c (source / functions) Hit Total Coverage
Test: Coverage on main enc/dec/rend @ 3b2f07138c61dcf997bbf4165d0882f794b2995f Lines: 191 213 89.7 %
Date: 2025-05-03 01:55:50 Functions: 41 43 95.3 %

          Line data    Source code
       1             : /*****************************************************************************
       2             :  *
       3             :  *  Enhanced 64 bit operators :
       4             :  *
       5             :  *    W_mac_32_16()
       6             :  *    W_mac0_16_16()
       7             :  *    W_msu0_16_16()
       8             :  *
       9             :  *****************************************************************************/
      10             : 
      11             : 
      12             : /*****************************************************************************
      13             :  *
      14             :  *  Include-Files
      15             :  *
      16             :  *****************************************************************************/
      17             : #include <stdio.h>
      18             : #include <stdlib.h>
      19             : #include "stl.h"
      20             : 
      21             : #define WMC_TOOL_SKIP
      22             : 
      23             : /*****************************************************************************
      24             :  *
      25             :  *  Local Functions
      26             :  *
      27             :  *****************************************************************************/
      28             : 
      29             : /*****************************************************************************
      30             :  *
      31             :  *  Constants and Globals
      32             :  *
      33             :  *****************************************************************************/
      34             : 
      35             : 
      36             : /*****************************************************************************
      37             :  *
      38             :  *  Functions
      39             :  *
      40             :  *****************************************************************************/
      41             : 
      42             : #ifdef ENH_64_BIT_OPERATOR
      43             : 
      44             : 
      45             : /*___________________________________________________________________________
      46             : |                                                                           |
      47             : |   Function Name : W_add_nosat                                           |
      48             : |                                                                           |
      49             : |   Purpose :                                                               |
      50             : |                                                                           |
      51             : |   64 bits addition of the two 64 bits variables (L64_var1+L64_var2)       |
      52             : |                                                                           |
      53             : |   Complexity weight : 1                                                   |
      54             : |                                                                           |
      55             : |   Inputs :                                                                |
      56             : |                                                                           |
      57             : |   L64_var1   64 bit long signed integer (Word64) whose value falls in the |
      58             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
      59             : |                                                                           |
      60             : |   L64_var2   64 bit long signed integer (Word64) whose value falls in the |
      61             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
      62             : |                                                                           |
      63             : |   Outputs :                                                               |
      64             : |                                                                           |
      65             : |    none                                                                   |
      66             : |                                                                           |
      67             : |   Return Value :                                                          |
      68             : |                                                                           |
      69             : |    L64_var_out                                                            |
      70             : |             64 bit long signed integer (Word64) whose value falls in the  |
      71             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
      72             : |___________________________________________________________________________|
      73             : */
      74    36934107 : Word64 W_add_nosat( Word64 L64_var1, Word64 L64_var2 )
      75             : {
      76             :     Word64 L64_var_out;
      77             : 
      78    36934107 :     L64_var_out = L64_var1 + L64_var2;
      79             : 
      80             : #ifdef WMOPS
      81             :     multiCounter[currCounter].W_add_nosat++;
      82             : #endif
      83             : 
      84    36934107 :     return L64_var_out;
      85             : }
      86             : 
      87             : 
      88             : /*___________________________________________________________________________
      89             : |                                                                           |
      90             : |   Function Name : W_sub_nosat                                             |
      91             : |                                                                           |
      92             : |   Purpose :                                                               |
      93             : |                                                                           |
      94             : |   64 bits subtraction of the two 64 bits variables (L64_var1-L64_var2)    |
      95             : |                                                                           |
      96             : |   Complexity weight : 1                                                   |
      97             : |                                                                           |
      98             : |   Inputs :                                                                |
      99             : |                                                                           |
     100             : |   L64_var1   64 bit long signed integer (Word64) whose value falls in the |
     101             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     102             : |                                                                           |
     103             : |   L64_var2   64 bit long signed integer (Word64) whose value falls in the |
     104             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     105             : |                                                                           |
     106             : |   Outputs :                                                               |
     107             : |                                                                           |
     108             : |    none                                                                   |
     109             : |                                                                           |
     110             : |   Return Value :                                                          |
     111             : |                                                                           |
     112             : |    L64_var_out                                                            |
     113             : |             64 bit long signed integer (Word64) whose value falls in the  |
     114             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     115             : |___________________________________________________________________________|
     116             : */
     117    11571838 : Word64 W_sub_nosat( Word64 L64_var1, Word64 L64_var2 )
     118             : {
     119             :     Word64 L64_var_out;
     120             : 
     121    11571838 :     L64_var_out = L64_var1 - L64_var2;
     122             : 
     123             : #ifdef WMOPS
     124             :     multiCounter[currCounter].W_sub_nosat++;
     125             : #endif
     126             : 
     127    11571838 :     return L64_var_out;
     128             : }
     129             : 
     130             : 
     131             : /*___________________________________________________________________________
     132             : |                                                                           |
     133             : |   Function Name : W_shl                                                   |
     134             : |                                                                           |
     135             : |   Purpose :                                                               |
     136             : |                                                                           |
     137             : |   Arithmetically shift the 64 bit input L64_var1 left var2 positions. Zero|
     138             : |   fill the var2 LSB of the result. If var2 is negative, arithmetically    |
     139             : |   shift L64_var1 right by -var2 with sign extension. Saturate the result  |
     140             : |   in case of underflows or overflows.                                     |
     141             : |                                                                           |
     142             : |   Complexity weight : 1                                                   |
     143             : |                                                                           |
     144             : |   Inputs :                                                                |
     145             : |                                                                           |
     146             : |    L64_var1   64 bit long signed integer (Word64) whose value falls in the|
     147             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     148             : |                                                                           |
     149             : |    var2                                                                   |
     150             : |             16 bit short signed integer (Word16) whose value falls in the |
     151             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
     152             : |                                                                           |
     153             : |   Outputs :                                                               |
     154             : |                                                                           |
     155             : |    none                                                                   |
     156             : |                                                                           |
     157             : |   Return Value :                                                          |
     158             : |                                                                           |
     159             : |    L64_var_out                                                            |
     160             : |             64 bit long signed integer (Word64) whose value falls in the  |
     161             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     162             : |___________________________________________________________________________|
     163             : */
     164 >29685*10^7 : Word64 W_shl_o( Word64 L64_var1, Word16 var2, Flag *Overflow )
     165             : {
     166             : 
     167 >29685*10^7 :     Word64 L64_var_out = 0LL;
     168             : 
     169 >29685*10^7 :     if ( var2 <= 0 )
     170             :     {
     171  4509731857 :         if ( var2 < -64 )
     172           0 :             var2 = -64;
     173  4509731857 :         var2 = -var2;
     174  4509731857 :         L64_var_out = L64_var1 >> var2;
     175             :     }
     176             :     else
     177             :     {
     178 >13390*10^8 :         for ( ; var2 > 0; var2-- )
     179             :         {
     180 >10466*10^8 :             if ( L64_var1 > (Word64) 0X3fffffffffffffffLL )
     181             :             {
     182     5133578 :                 set_overflow( Overflow );
     183     5133578 :                 L64_var_out = (Word64) 0X7fffffffffffffffLL;
     184     5133578 :                 break;
     185             :             }
     186             :             else
     187             :             {
     188 >10466*10^8 :                 if ( L64_var1 < (Word64) 0xc000000000000000LL )
     189             :                 {
     190           3 :                     set_overflow( Overflow );
     191           3 :                     L64_var_out = (Word64) 0x8000000000000000LL;
     192           3 :                     break;
     193             :                 }
     194             :             }
     195 >10466*10^8 :             L64_var1 *= 2;
     196 >10466*10^8 :             L64_var_out = L64_var1;
     197             :         }
     198             :     }
     199             : #ifdef WMOPS
     200             :     multiCounter[currCounter].W_shl++;
     201             : #endif
     202             : 
     203             :     /*  BASOP_CHECK();*/
     204             : 
     205 >29685*10^7 :     return ( L64_var_out );
     206             : }
     207             : 
     208 59094412719 : Word64 W_shl( Word64 L64_var1, Word16 var2 )
     209             : {
     210 59094412719 :     return W_shl_o( L64_var1, var2, NULL );
     211             : }
     212             : 
     213             : 
     214             : /*___________________________________________________________________________
     215             : |                                                                           |
     216             : |   Function Name : W_shr                                                   |
     217             : |                                                                           |
     218             : |   Purpose :                                                               |
     219             : |                                                                           |
     220             : |   Arithmetically shift the 64 bit input L64_var1 right var2 positions.    |
     221             : |   Zero fill the var2 LSB of the result. If var2 is negative,              |
     222             : |   arithmetically shift L64_var1 left by -var2 with sign extension.        |
     223             : |   Saturate the result in case of underflows or overflows.                 |
     224             : |                                                                           |
     225             : |   Complexity weight : 1                                                   |
     226             : |                                                                           |
     227             : |   Inputs :                                                                |
     228             : |                                                                           |
     229             : |    L64_var1   64 bit long signed integer (Word64) whose value falls in the|
     230             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     231             : |                                                                           |
     232             : |    var2                                                                   |
     233             : |             16 bit short signed integer (Word16) whose value falls in the |
     234             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
     235             : |                                                                           |
     236             : |   Outputs :                                                               |
     237             : |                                                                           |
     238             : |    none                                                                   |
     239             : |                                                                           |
     240             : |   Return Value :                                                          |
     241             : |                                                                           |
     242             : |    L64_var_out                                                            |
     243             : |             64 bit long signed integer (Word64) whose value falls in the  |
     244             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     245             : |___________________________________________________________________________|
     246             : */
     247 30762071211 : Word64 W_shr( Word64 L64_var1, Word16 var2 )
     248             : {
     249             :     Word64 L64_var_out;
     250             : 
     251 30762071211 :     if ( var2 < 0 )
     252             :     {
     253   604076296 :         var2 = -var2;
     254   604076296 :         L64_var_out = W_shl( L64_var1, var2 );
     255             : 
     256             : #ifdef WMOPS
     257             :         multiCounter[currCounter].W_shl--;
     258             : #endif /* if WMOPS */
     259             :     }
     260             :     else
     261             :     {
     262 30157994915 :         L64_var_out = L64_var1 >> var2;
     263             :     }
     264             : 
     265             : #ifdef WMOPS
     266             :     multiCounter[currCounter].W_shr++;
     267             : #endif /* if WMOPS */
     268             : 
     269 30762071211 :     return ( L64_var_out );
     270             : }
     271             : 
     272             : 
     273             : /*___________________________________________________________________________
     274             : |                                                                           |
     275             : |   Function Name : W_shl_nosat                                             |
     276             : |                                                                           |
     277             : |   Purpose :                                                               |
     278             : |                                                                           |
     279             : | Arithmetically shifts left the 64-bit variable W_var1 by var2 positions.  |
     280             : |  if var2 is negative, W_var1 is shifted to the least significant bits by  |
     281             : |  (�var2) positions with extension of the sign bit .                       |
     282             : |  if var2 is positive, W_var1 is shifted to the most significant bits by   |
     283             : |   (var2) positions without saturation control on 64 bits.                 |
     284             : |                                                                           |
     285             : |   Complexity weight : 1                                                   |
     286             : |                                                                           |
     287             : |   Inputs :                                                                |
     288             : |                                                                           |
     289             : |    L64_var1   64 bit long signed integer (Word64) whose value falls in the|
     290             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     291             : |                                                                           |
     292             : |    var2                                                                   |
     293             : |             16 bit short signed integer (Word16) whose value falls in the |
     294             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
     295             : |                                                                           |
     296             : |   Outputs :                                                               |
     297             : |                                                                           |
     298             : |    none                                                                   |
     299             : |                                                                           |
     300             : |   Return Value :                                                          |
     301             : |                                                                           |
     302             : |    L64_var_out                                                            |
     303             : |             64 bit long signed integer (Word64) whose value falls in the  |
     304             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     305             : |___________________________________________________________________________|
     306             : */
     307  1939765086 : Word64 W_shl_nosat( Word64 L64_var1, Word16 var2 )
     308             : {
     309             : 
     310  1939765086 :     Word64 L64_var_out = 0LL;
     311             : 
     312  1939765086 :     if ( var2 <= 0 )
     313             :     {
     314  1933409253 :         var2 = -var2;
     315  1933409253 :         L64_var_out = L64_var1 >> var2;
     316             :     }
     317             :     else
     318             :     {
     319     6355833 :         L64_var_out = L64_var1 << var2;
     320             :     }
     321             : #ifdef WMOPS
     322             :     multiCounter[currCounter].W_shl_nosat++;
     323             : #endif
     324             : 
     325             :     /*  BASOP_CHECK();*/
     326             : 
     327  1939765086 :     return ( L64_var_out );
     328             : }
     329             : 
     330             : 
     331             : /*___________________________________________________________________________
     332             : |                                                                           |
     333             : |   Function Name : W_shr_nosat                                             |
     334             : |                                                                           |
     335             : |   Purpose :                                                               |
     336             : |                                                                           |
     337             : | Arithmetically shifts right the 64-bit variable W_var1 by var2 positions. |
     338             : |  if var2 is negative, W_var1 is shifted to the most significant bits by   |
     339             : |  (�var2) positions without saturation control on 64 bits.                 |
     340             : |  if var2 is positive, W_var1 is shifted to the least significant bits by  |
     341             : |   (var2) positions with extension of the sign bit .                       |
     342             : |                                                                           |
     343             : |   Complexity weight : 1                                                   |
     344             : |                                                                           |
     345             : |   Inputs :                                                                |
     346             : |                                                                           |
     347             : |    L64_var1   64 bit long signed integer (Word64) whose value falls in the|
     348             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     349             : |                                                                           |
     350             : |    var2                                                                   |
     351             : |             16 bit short signed integer (Word16) whose value falls in the |
     352             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                   |
     353             : |                                                                           |
     354             : |   Outputs :                                                               |
     355             : |                                                                           |
     356             : |    none                                                                   |
     357             : |                                                                           |
     358             : |   Return Value :                                                          |
     359             : |                                                                           |
     360             : |    L64_var_out                                                            |
     361             : |             64 bit long signed integer (Word64) whose value falls in the  |
     362             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
     363             : |___________________________________________________________________________|
     364             : */
     365           0 : Word64 W_shr_nosat( Word64 L64_var1, Word16 var2 )
     366             : {
     367             :     Word64 L64_var_out;
     368             : 
     369           0 :     if ( var2 < 0 )
     370             :     {
     371           0 :         var2 = -var2;
     372           0 :         L64_var_out = L64_var1 << var2;
     373             :     }
     374             :     else
     375             :     {
     376           0 :         L64_var_out = L64_var1 >> var2;
     377             :     }
     378             : 
     379             : #ifdef WMOPS
     380             :     multiCounter[currCounter].W_shr_nosat++;
     381             : #endif /* if WMOPS */
     382             : 
     383           0 :     return ( L64_var_out );
     384             : }
     385             : 
     386             : 
     387             : /*_________________________________________________________________________________________________
     388             : |                                                                                                 |
     389             : |   Function Name : W_mac_32_16                                                                   |
     390             : |                                                                                                 |
     391             : |   Purpose :                                                                                     |
     392             : |                                                                                                 |
     393             : |   Multiply L_var2 by var3 and shift the result left by 1. Add the 64 bit                        |
     394             : |   result to L64_var1, return a 64 bit result.                                                   |
     395             : |                                                                                                 |
     396             : |   Complexity weight : 1                                                                         |
     397             : |                                                                                                 |
     398             : |   Inputs :                                                                                      |
     399             : |                                                                                                 |
     400             : |    L64_var1                                                                                     |
     401             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     402             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.                 |
     403             : |                                                                                                 |
     404             : |    L_var2                                                                                       |
     405             : |             32 bit signed integer (Word32) whose value falls in the                             |
     406             : |             range : 0x8000 0000 <= L_var2 <= 0x7fff ffff                                        |
     407             : |                                                                                                 |
     408             : |    var3                                                                                         |
     409             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     410             : |             range : 0xffff 8000 <= var3 <= 0x0000 7fff.                                         |
     411             : |                                                                                                 |
     412             : |   Outputs :                                                                                     |
     413             : |                                                                                                 |
     414             : |    none                                                                                         |
     415             : |                                                                                                 |
     416             : |   Return Value :                                                                                |
     417             : |                                                                                                 |
     418             : |    L64_var_out                                                                                  |
     419             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     420             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
     421             : |_________________________________________________________________________________________________|
     422             : */
     423  2183045628 : Word64 W_mac_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 )
     424             : {
     425  2183045628 :     Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1;
     426  2183045628 :     L64_var_out += L64_var1;
     427             : #ifdef WMOPS
     428             :     multiCounter[currCounter].W_mac_32_16++;
     429             : #endif /* if WMOPS */
     430  2183045628 :     return L64_var_out;
     431             : }
     432             : 
     433             : 
     434             : /*_________________________________________________________________________________________________
     435             : |                                                                                                 |
     436             : |   Function Name : W_msu_32_16                                                                   |
     437             : |                                                                                                 |
     438             : |   Purpose :                                                                                     |
     439             : |                                                                                                 |
     440             : |   Multiply L_var2 by var3 and shift the result left by 1. Subtract the 64 bit                   |
     441             : |   result from L64_var1, return a 64 bit result.                                                 |
     442             : |                                                                                                 |
     443             : |   Complexity weight : 1                                                                         |
     444             : |                                                                                                 |
     445             : |   Inputs :                                                                                      |
     446             : |                                                                                                 |
     447             : |    L64_var1                                                                                     |
     448             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     449             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.                 |
     450             : |                                                                                                 |
     451             : |    L_var2                                                                                       |
     452             : |             32 bit signed integer (Word32) whose value falls in the                             |
     453             : |             range : 0x8000 0000 <= L_var2 <= 0x7fff ffff                                        |
     454             : |                                                                                                 |
     455             : |    var3                                                                                         |
     456             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     457             : |             range : 0xffff 8000 <= var3 <= 0x0000 7fff.                                         |
     458             : |                                                                                                 |
     459             : |   Outputs :                                                                                     |
     460             : |                                                                                                 |
     461             : |    none                                                                                         |
     462             : |                                                                                                 |
     463             : |   Return Value :                                                                                |
     464             : |                                                                                                 |
     465             : |    L64_var_out                                                                                  |
     466             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     467             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
     468             : |_________________________________________________________________________________________________|
     469             : */
     470   984672320 : Word64 W_msu_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 )
     471             : {
     472   984672320 :     Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1;
     473   984672320 :     L64_var_out = L64_var1 - L64_var_out;
     474             : #ifdef WMOPS
     475             :     multiCounter[currCounter].W_msu_32_16++;
     476             : #endif /* if WMOPS */
     477   984672320 :     return L64_var_out;
     478             : }
     479             : 
     480             : 
     481             : /*_________________________________________________________________________________________________
     482             : |                                                                                                 |
     483             : |   Function Name : W_mult_32_16                                                             |
     484             : |                                                                                                 |
     485             : |   Purpose :                                                                                     |
     486             : |                                                                                                 |
     487             : |   Multiply L_var1 by var2 and shift the result left by 1. Return a 64 bit result.               |
     488             : |                                                                                                 |
     489             : |   Complexity weight : 1                                                                         |
     490             : |                                                                                                 |
     491             : |   Inputs :                                                                                      |
     492             : |                                                                                                 |
     493             : |    L_var1                                                                                       |
     494             : |             32 bit signed integer (Word32) whose value falls in the                             |
     495             : |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff                                        |
     496             : |                                                                                                 |
     497             : |    var2                                                                                         |
     498             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     499             : |             range : 0xffff 8000 <= var2 <= 0x0000 7fff.                                         |
     500             : |                                                                                                 |
     501             : |   Outputs :                                                                                     |
     502             : |                                                                                                 |
     503             : |    none                                                                                         |
     504             : |                                                                                                 |
     505             : |   Return Value :                                                                                |
     506             : |                                                                                                 |
     507             : |    L64_var_out                                                                                  |
     508             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     509             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
     510             : |_________________________________________________________________________________________________|
     511             : */
     512 >13203*10^7 : Word64 W_mult_32_16( Word32 L_var1, Word16 var2 )
     513             : {
     514 >13203*10^7 :     Word64 L64_var_out = ( (Word64) L_var1 * var2 ) << 1;
     515             : #ifdef WMOPS
     516             :     multiCounter[currCounter].W_mult_32_16++;
     517             : #endif /* if WMOPS */
     518 >13203*10^7 :     return L64_var_out;
     519             : }
     520             : 
     521             : /*________________________________________________________________________________________________
     522             : |                                                                                                 |
     523             : |   Function Name : W_mult0_16_16                                                            |
     524             : |                                                                                                 |
     525             : |   Purpose :                                                                                     |
     526             : |                                                                                                 |
     527             : |   Multiply var1 by var2 and return a 64 bit result.                                             |
     528             : |                                                                                                 |
     529             : |   Complexity weight : 1                                                                         |
     530             : |                                                                                                 |
     531             : |   Inputs :                                                                                      |
     532             : |                                                                                                 |
     533             : |    var1                                                                                         |
     534             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     535             : |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff                                        |
     536             : |                                                                                                 |
     537             : |    var2                                                                                         |
     538             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     539             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                                         |
     540             : |                                                                                                 |
     541             : |   Outputs :                                                                                     |
     542             : |                                                                                                 |
     543             : |    none                                                                                         |
     544             : |                                                                                                 |
     545             : |   Return Value :                                                                                |
     546             : |                                                                                                 |
     547             : |    L64_var_out                                                                                  |
     548             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     549             : |             range : 0x80000000 00000000LL <= L64_acc <= 0x7fffffff ffffffffLL.                  |
     550             : |_________________________________________________________________________________________________|
     551             : */
     552   338277303 : Word64 W_mult0_16_16( Word16 var1, Word16 var2 )
     553             : {
     554   338277303 :     Word64 L64_var_out = (Word64) var1 * var2;
     555             : #ifdef WMOPS
     556             :     multiCounter[currCounter].W_mult0_16_16++;
     557             : #endif /* if WMOPS */
     558   338277303 :     return L64_var_out;
     559             : }
     560             : 
     561             : /*________________________________________________________________________________________________
     562             : |                                                                                                 |
     563             : |   Function Name : W_mac0_16_16                                                                  |
     564             : |                                                                                                 |
     565             : |   Purpose :                                                                                     |
     566             : |                                                                                                 |
     567             : |   Multiply var2 by var3 and add the 64 bit result to L64_var1, return a 64 bit result.          |
     568             : |                                                                                                 |
     569             : |   Complexity weight : 1                                                                         |
     570             : |                                                                                                 |
     571             : |   Inputs :                                                                                      |
     572             : |                                                                                                 |
     573             : |    L64_var1                                                                                     |
     574             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     575             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.                 |
     576             : |                                                                                                 |
     577             : |    var2                                                                                         |
     578             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     579             : |             range : 0xffff 8000 <= var2 <= 0x0000 7fff.                                         |
     580             : |                                                                                                 |
     581             : |    var3                                                                                         |
     582             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     583             : |             range : 0xffff 8000 <= var3 <= 0x0000 7fff.                                         |
     584             : |                                                                                                 |
     585             : |   Outputs :                                                                                     |
     586             : |                                                                                                 |
     587             : |    none                                                                                         |
     588             : |                                                                                                 |
     589             : |   Return Value :                                                                                |
     590             : |                                                                                                 |
     591             : |    L64_var_out                                                                                  |
     592             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     593             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
     594             : |_________________________________________________________________________________________________|
     595             : */
     596 88764449366 : Word64 W_mac0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
     597             : {
     598 88764449366 :     Word64 L64_var_out = (Word64) var2 * var3;
     599 88764449366 :     L64_var_out += L64_var1;
     600             : #ifdef WMOPS
     601             :     multiCounter[currCounter].W_mac0_16_16++;
     602             : #endif /* if WMOPS */
     603 88764449366 :     return L64_var_out;
     604             : }
     605             : 
     606             : 
     607             : /*________________________________________________________________________________________________
     608             : |                                                                                                 |
     609             : |   Function Name : W_msu0_16_16                                                                  |
     610             : |                                                                                                 |
     611             : |   Purpose :                                                                                     |
     612             : |                                                                                                 |
     613             : |   Multiply var2 by var3 and subtract the 64 bit result from L64_var1, return a 64 bit result.   |
     614             : |                                                                                                 |
     615             : |   Complexity weight : 1                                                                         |
     616             : |                                                                                                 |
     617             : |   Inputs :                                                                                      |
     618             : |                                                                                                 |
     619             : |    L64_var1                                                                                     |
     620             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     621             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.                 |
     622             : |                                                                                                 |
     623             : |    var2                                                                                         |
     624             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     625             : |             range : 0xffff 8000 <= var2 <= 0x0000 7fff.                                         |
     626             : |                                                                                                 |
     627             : |    var3                                                                                         |
     628             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     629             : |             range : 0xffff 8000 <= var3 <= 0x0000 7fff.                                         |
     630             : |                                                                                                 |
     631             : |   Outputs :                                                                                     |
     632             : |                                                                                                 |
     633             : |    none                                                                                         |
     634             : |                                                                                                 |
     635             : |   Return Value :                                                                                |
     636             : |                                                                                                 |
     637             : |    L64_var_out                                                                                  |
     638             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     639             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
     640             : |_________________________________________________________________________________________________|
     641             : */
     642   820159200 : Word64 W_msu0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
     643             : {
     644   820159200 :     Word64 L64_var_out = (Word64) var2 * var3;
     645   820159200 :     L64_var_out = L64_var1 - L64_var_out;
     646             : #ifdef WMOPS
     647             :     multiCounter[currCounter].W_msu0_16_16++;
     648             : #endif /* if WMOPS */
     649   820159200 :     return L64_var_out;
     650             : }
     651             : 
     652             : 
     653             : /*_____________________________________________________________________________________
     654             : |                                                                                     |
     655             : |   Function Name : W_sat_l                                                           |
     656             : |                                                                                     |
     657             : |   Purpose :                                                                         |
     658             : |                                                                                     |
     659             : |   Saturate the lower 32 bits of the 64 bit input number L64_var into 32 bits.       |
     660             : |                                                                                     |
     661             : |   Complexity weight : 1                                                             |
     662             : |                                                                                     |
     663             : |   Inputs :                                                                          |
     664             : |                                                                                     |
     665             : |    L64_var                                                                          |
     666             : |             64 bit long long signed integer (Word64) whose value falls in the      |
     667             : |             range : 0x80000000 00000000LL <= L64_var <= 0x7fffffff ffffffffLL.      |
     668             : |                                                                                     |
     669             : |   Outputs :                                                                         |
     670             : |                                                                                     |
     671             : |    none                                                                             |
     672             : |                                                                                     |
     673             : |   Return Value :                                                                    |
     674             : |                                                                                     |
     675             : |    L_var_out                                                                        |
     676             : |             32 bit signed integer (Word32) whose value falls in the                 |
     677             : |             range : 0x8000 0000 <= L_var_out <= 0x7fff 0000.                        |
     678             : |_____________________________________________________________________________________|
     679             : */
     680 >11020*10^7 : Word32 W_sat_l( Word64 L64_var )
     681             : {
     682             :     Word32 L_var_out;
     683             : 
     684 >11020*10^7 :     if ( L64_var > 0x7FFFFFFF )
     685             :     {
     686     3551386 :         L_var_out = 0x7FFFFFFF;
     687             :     }
     688 >11020*10^7 :     else if ( L64_var < (int) 0x80000000 )
     689             :     {
     690      134324 :         L_var_out = (Word32) 0x80000000;
     691             :     }
     692             :     else
     693             :     {
     694 >11020*10^7 :         L_var_out = (Word32) L64_var;
     695             :     }
     696             : 
     697             : #ifdef WMOPS
     698             :     multiCounter[currCounter].W_sat_l++;
     699             : #endif /* if WMOPS */
     700             : 
     701 >11020*10^7 :     return L_var_out;
     702             : }
     703             : 
     704             : 
     705             : /*___________________________________________________________________________________
     706             : |                                                                                     |
     707             : |   Function Name : W_sat_m                                                           |
     708             : |                                                                                     |
     709             : |   Purpose :                                                                         |
     710             : |                                                                                     |
     711             : |   Truncates the lower 16 bits of the 64 bit input L64_var                           |
     712             : |   and saturates the number into 32 bits.                                            |
     713             : |                                                                                     |
     714             : |   Complexity weight : 1                                                             |
     715             : |                                                                                     |
     716             : |   Inputs :                                                                          |
     717             : |                                                                                     |
     718             : |    L64_var                                                                          |
     719             : |             64 bit long long signed integer (Word64) whose value falls in the      |
     720             : |             range : 0x80000000 00000000LL <= L64_var <= 0x7fffffff ffffffffLL.      |
     721             : |                                                                                     |
     722             : |   Outputs :                                                                         |
     723             : |                                                                                     |
     724             : |    none                                                                             |
     725             : |                                                                                     |
     726             : |   Return Value :                                                                    |
     727             : |                                                                                     |
     728             : |    L_var_out                                                                        |
     729             : |             32 bit signed integer (Word32) whose value falls in the                 |
     730             : |             range : 0x8000 0000 <= L_var_out <= 0x7fff 0000.                        |
     731             : |_____________________________________________________________________________________|
     732             : */
     733 94856603085 : Word32 W_sat_m( Word64 L64_var )
     734             : {
     735             :     Word32 L_var_out;
     736             : 
     737 94856603085 :     L64_var = L64_var >> 16;
     738 94856603085 :     L_var_out = W_sat_l( L64_var );
     739             : 
     740             : #ifdef WMOPS
     741             :     multiCounter[currCounter].W_sat_l--;
     742             :     multiCounter[currCounter].W_sat_m++;
     743             : #endif /* if WMOPS */
     744             : 
     745 94856603085 :     return L_var_out;
     746             : }
     747             : 
     748             : 
     749             : /*__________________________________________________________________________________
     750             : |                                                                                  |
     751             : |   Function Name : W_deposit32_l                                                    |
     752             : |                                                                                  |
     753             : |   Purpose :                                                                      |
     754             : |                                                                                  |
     755             : |   Deposit the 32 bit L_var1 into the 32 LS bits of the 64 bit output. The        |
     756             : |   32 MS bits of the output are sign extended.                                    |
     757             : |                                                                                  |
     758             : |   Complexity weight : 1                                                          |
     759             : |                                                                                  |
     760             : |   Inputs :                                                                       |
     761             : |                                                                                  |
     762             : |    L_var1                                                                        |
     763             : |             32 bit long signed integer (Word32) whose value falls in the         |
     764             : |             range : 0x8000 0000 <= var_out <= 0x7fff 0000.                       |                                                                           |
     765             : |   Outputs :                                                                      |
     766             : |                                                                                  |
     767             : |    none                                                                          |
     768             : |                                                                                  |
     769             : |   Return Value :                                                                 |
     770             : |                                                                                  |
     771             : |    L64_var_out                                                                   |
     772             : |             64 bit long long signed integer (Word64) whose value falls in        |
     773             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
     774             : |__________________________________________________________________________________|
     775             : */
     776  6806681677 : Word64 W_deposit32_l( Word32 L_var1 )
     777             : {
     778             :     Word64 L64_var_out;
     779             : 
     780  6806681677 :     L64_var_out = (Word64) L_var1;
     781             : 
     782             : #ifdef WMOPS
     783             :     multiCounter[currCounter].W_deposit32_l++;
     784             : #endif
     785             : 
     786  6806681677 :     return ( L64_var_out );
     787             : }
     788             : 
     789             : 
     790             : /*__________________________________________________________________________________
     791             : |                                                                                  |
     792             : |   Function Name : W_deposit32_h                                                    |
     793             : |                                                                                  |
     794             : |   Purpose :                                                                      |
     795             : |                                                                                  |
     796             : |   Deposit the 32 bit L_var1 into the 32 MS bits of the 64 bit output. The        |
     797             : |   32 LS bits of the output are zeroed.                                           |
     798             : |                                                                                  |
     799             : |   Complexity weight : 1                                                          |
     800             : |                                                                                  |
     801             : |   Inputs :                                                                       |
     802             : |                                                                                  |
     803             : |    L_var1                                                                        |
     804             : |             32 bit long signed integer (Word32) whose value falls in the         |
     805             : |             range : 0x8000 0000 <= var_out <= 0x7fff 0000.                       |                                                                           |
     806             : |   Outputs :                                                                      |
     807             : |                                                                                  |
     808             : |    none                                                                          |
     809             : |                                                                                  |
     810             : |   Return Value :                                                                 |
     811             : |                                                                                  |
     812             : |    L64_var_out                                                                   |
     813             : |             64 bit long long signed integer (Word64) whose value falls in        |
     814             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
     815             : |__________________________________________________________________________________|
     816             : */
     817        1250 : Word64 W_deposit32_h( Word32 L_var1 )
     818             : {
     819             :     Word64 L64_var_out;
     820             : 
     821        1250 :     L64_var_out = (Word64) L_var1 << 32;
     822             : 
     823             : #ifdef WMOPS
     824             :     multiCounter[currCounter].W_deposit32_h++;
     825             : #endif
     826             : 
     827        1250 :     return ( L64_var_out );
     828             : }
     829             : 
     830             : 
     831             : /*__________________________________________________________________________________
     832             : |                                                                                  |
     833             : |   Function Name : W_extract_l                                                    |
     834             : |                                                                                  |
     835             : |   Purpose :                                                                      |
     836             : |                                                                                  |
     837             : |   Return the 32 LSB of L64_var1.                                                 |
     838             : |                                                                                  |
     839             : |   Complexity weight : 1                                                          |
     840             : |                                                                                  |
     841             : |   Inputs :                                                                       |
     842             : |                                                                                  |
     843             : |    L64_var1                                                                      |
     844             : |             64 bit long long signed integer (Word64) whose value falls in        |
     845             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
     846             : |                                                                                  |
     847             : |   Outputs :                                                                      |
     848             : |                                                                                  |
     849             : |    none                                                                          |
     850             : |                                                                                  |
     851             : |   Return Value :                                                                 |
     852             : |                                                                                  |
     853             : |    L_var_out                                                                     |
     854             : |             32 bit long signed integer (Word32) whose value falls in the         |
     855             : |             range : 0x8000 0000 <= L_var_out <= 0x7fff 0000.                     |
     856             : |__________________________________________________________________________________|
     857             : */
     858  9544489236 : Word32 W_extract_l( Word64 L64_var1 )
     859             : {
     860             :     Word32 L_var_out;
     861             : 
     862  9544489236 :     L_var_out = (Word32) L64_var1;
     863             : 
     864             : #ifdef WMOPS
     865             :     multiCounter[currCounter].W_extract_l++;
     866             : #endif /* if WMOPS */
     867             : 
     868  9544489236 :     return ( L_var_out );
     869             : }
     870             : 
     871             : 
     872             : /*__________________________________________________________________________________
     873             : |                                                                                  |
     874             : |   Function Name : W_extract_h                                                    |
     875             : |                                                                                  |
     876             : |   Purpose :                                                                      |
     877             : |                                                                                  |
     878             : |   Return the 32 MSB of L64_var1.                                                 |
     879             : |                                                                                  |
     880             : |   Complexity weight : 1                                                          |
     881             : |                                                                                  |
     882             : |   Inputs :                                                                       |
     883             : |                                                                                  |
     884             : |    L64_var1                                                                      |
     885             : |             64 bit long long signed integer (Word64) whose value falls in        |
     886             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
     887             : |                                                                                  |
     888             : |   Outputs :                                                                      |
     889             : |                                                                                  |
     890             : |    none                                                                          |
     891             : |                                                                                  |
     892             : |   Return Value :                                                                 |
     893             : |                                                                                  |
     894             : |    L_var_out                                                                     |
     895             : |             32 bit long signed integer (Word32) whose value falls in the         |
     896             : |             range : 0x8000 0000 <= L_var_out <= 0x7fff 0000.                     |
     897             : |__________________________________________________________________________________|
     898             : */
     899 >28063*10^7 : Word32 W_extract_h( Word64 L64_var1 )
     900             : {
     901             :     Word32 L_var_out;
     902             : 
     903 >28063*10^7 :     L_var_out = (Word32) ( L64_var1 >> 32 );
     904             : 
     905             : #ifdef WMOPS
     906             :     multiCounter[currCounter].W_extract_h++;
     907             : #endif /* if WMOPS */
     908             : 
     909 >28063*10^7 :     return ( L_var_out );
     910             : }
     911             : 
     912             : 
     913             : /*________________________________________________________________________________________________
     914             : |                                                                                                 |
     915             : |   Function Name : W_mult_16_16                                                                  |
     916             : |                                                                                                 |
     917             : |   Purpose :                                                                                     |
     918             : |                                                                                                 |
     919             : |   Multiply var1 by var2 and shift the result left by 1. Return a 64 bit result.                 |
     920             : |                                                                                                 |
     921             : |   Complexity weight : 1                                                                         |
     922             : |                                                                                                 |
     923             : |   Inputs :                                                                                      |
     924             : |                                                                                                 |
     925             : |    var1                                                                                         |
     926             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     927             : |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff                                        |
     928             : |                                                                                                 |
     929             : |    var2                                                                                         |
     930             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     931             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                                         |
     932             : |                                                                                                 |
     933             : |   Outputs :                                                                                     |
     934             : |                                                                                                 |
     935             : |    none                                                                                         |
     936             : |                                                                                                 |
     937             : |   Return Value :                                                                                |
     938             : |                                                                                                 |
     939             : |    L64_var_out                                                                                  |
     940             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     941             : |             range : 0x80000000 00000000LL <= L64_acc <= 0x7fffffff ffffffffLL.                  |
     942             : |_________________________________________________________________________________________________|
     943             : */
     944    12241044 : Word64 W_mult_16_16( Word16 var1, Word16 var2 )
     945             : {
     946    12241044 :     Word64 L64_var_out = ( (Word64) var1 * var2 ) << 1;
     947             : #ifdef WMOPS
     948             :     multiCounter[currCounter].W_mult_16_16++;
     949             : #endif /* if WMOPS */
     950    12241044 :     return L64_var_out;
     951             : }
     952             : /*________________________________________________________________________________________________
     953             : |                                                                                                 |
     954             : |   Function Name : W_mac_16_16                                                                   |
     955             : |                                                                                                 |
     956             : |   Purpose :                                                                                     |
     957             : |                                                                                                 |
     958             : |   Multiply var1 by var2 and shift the result left by 1 and add the 64 bit result to L64_acc,    |
     959             : |   return a 64 bit result.                                                                       |
     960             : |                                                                                                 |
     961             : |   Complexity weight : 1                                                                         |
     962             : |                                                                                                 |
     963             : |   Inputs :                                                                                      |
     964             : |                                                                                                 |
     965             : |    L64_acc                                                                                      |
     966             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     967             : |             range : 0x80000000 00000000LL <= L64_acc <= 0x7fffffff ffffffffLL.                  |
     968             : |                                                                                                 |
     969             : |    var1                                                                                         |
     970             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     971             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                                         |
     972             : |                                                                                                 |
     973             : |    var2                                                                                         |
     974             : |             16 bit short signed integer (Word16) whose value falls in the                       |
     975             : |             range : 0xffff 8000 <= var2 <= 0x0000 7fff.                                         |
     976             : |                                                                                                 |
     977             : |   Outputs :                                                                                     |
     978             : |                                                                                                 |
     979             : |    none                                                                                         |
     980             : |                                                                                                 |
     981             : |   Return Value :                                                                                |
     982             : |                                                                                                 |
     983             : |    L64_var_out                                                                                  |
     984             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
     985             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
     986             : |_________________________________________________________________________________________________|
     987             : */
     988 18343075746 : Word64 W_mac_16_16( Word64 L64_acc, Word16 var1, Word16 var2 )
     989             : {
     990 18343075746 :     Word64 L64_var_out = ( (Word64) var1 * var2 ) << 1;
     991 18343075746 :     L64_acc = L64_acc + L64_var_out;
     992             : 
     993             : #ifdef WMOPS
     994             :     multiCounter[currCounter].W_mac_16_16++;
     995             : #endif /* if WMOPS */
     996 18343075746 :     return L64_acc;
     997             : }
     998             : 
     999             : 
    1000             : /*________________________________________________________________________________________________
    1001             : |                                                                                                 |
    1002             : |   Function Name : W_msu_16_16                                                                   |
    1003             : |                                                                                                 |
    1004             : |   Purpose :                                                                                     |
    1005             : |                                                                                                 |
    1006             : |   Multiply var2 by var3 and shift the result left by1 and subtract the 64 bit result            |
    1007             : |   from L64_var1, return a 64 bit result.                                                        |
    1008             : |                                                                                                 |
    1009             : |   Complexity weight : 1                                                                         |
    1010             : |                                                                                                 |
    1011             : |   Inputs :                                                                                      |
    1012             : |                                                                                                 |
    1013             : |    L64_var1                                                                                     |
    1014             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
    1015             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.                 |
    1016             : |                                                                                                 |
    1017             : |    var2                                                                                         |
    1018             : |             16 bit short signed integer (Word16) whose value falls in the                       |
    1019             : |             range : 0xffff 8000 <= var2 <= 0x0000 7fff.                                         |
    1020             : |                                                                                                 |
    1021             : |    var3                                                                                         |
    1022             : |             16 bit short signed integer (Word16) whose value falls in the                       |
    1023             : |             range : 0xffff 8000 <= var3 <= 0x0000 7fff.                                         |
    1024             : |                                                                                                 |
    1025             : |   Outputs :                                                                                     |
    1026             : |                                                                                                 |
    1027             : |    none                                                                                         |
    1028             : |                                                                                                 |
    1029             : |   Return Value :                                                                                |
    1030             : |                                                                                                 |
    1031             : |    L64_var_out                                                                                  |
    1032             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
    1033             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
    1034             : |_________________________________________________________________________________________________|
    1035             : */
    1036   596686688 : Word64 W_msu_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
    1037             : {
    1038   596686688 :     Word64 L64_var_out = ( (Word64) var2 * var3 ) << 1;
    1039   596686688 :     L64_var_out = L64_var1 - L64_var_out;
    1040             : #ifdef WMOPS
    1041             :     multiCounter[currCounter].W_msu_16_16++;
    1042             : #endif /* if WMOPS */
    1043   596686688 :     return L64_var_out;
    1044             : }
    1045             : 
    1046             : /* Below BASOP is not part of STL 2023 library, might be proposed in next update */
    1047             : /*________________________________________________________________________________________________
    1048             : |                                                                                                 |
    1049             : |   Function Name : W_mac_32_32                                                                   |
    1050             : |                                                                                                 |
    1051             : |   Purpose :                                                                                     |
    1052             : |                                                                                                 |
    1053             : |   Multiply var1 by var2 and shift the result left by 1 and add the 64 bit result to L64_acc,    |
    1054             : |   return a 64 bit result.                                                                       |
    1055             : |                                                                                                 |
    1056             : |   Complexity weight : 1                                                                         |
    1057             : |                                                                                                 |
    1058             : |   Inputs :                                                                                      |
    1059             : |                                                                                                 |
    1060             : |    L64_acc                                                                                      |
    1061             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
    1062             : |             range : 0x80000000 00000000LL <= L64_acc <= 0x7fffffff ffffffffLL.                  |
    1063             : |                                                                                                 |
    1064             : |    var1                                                                                         |
    1065             : |             32 bit signed integer (Word32) whose value falls in the                             |
    1066             : |             range : 0x8000 0000 <= var1 <= 0x7fff 0000.                                         |
    1067             : |                                                                                                 |
    1068             : |    var2                                                                                         |
    1069             : |             32 bit signed integer (Word32) whose value falls in the                             |
    1070             : |             range : 0x8000 0000 <= var2 <= 0x7fff 0000.                                         |
    1071             : |                                                                                                 |
    1072             : |   Outputs :                                                                                     |
    1073             : |                                                                                                 |
    1074             : |    none                                                                                         |
    1075             : |                                                                                                 |
    1076             : |   Return Value :                                                                                |
    1077             : |                                                                                                 |
    1078             : |    L64_var_out                                                                                  |
    1079             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
    1080             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
    1081             : |_________________________________________________________________________________________________|
    1082             : */
    1083 >13635*10^7 : Word64 W_mac_32_32( Word64 L64_var1, Word32 L_var2, Word32 L_var3 )
    1084             : {
    1085 >13635*10^7 :     Word64 L64_var_out = W_mult_32_32( L_var2, L_var3 );
    1086 >13635*10^7 :     L64_var_out = W_add( L64_var1, L64_var_out );
    1087             : 
    1088             : #ifdef WMOPS
    1089             :     multiCounter[currCounter].W_mult_32_32--;
    1090             :     /* multiCounter[currCounter].W_add--; */
    1091             : #endif
    1092             : 
    1093 >13635*10^7 :     return L64_var_out;
    1094             : }
    1095             : 
    1096             : 
    1097             : /*___________________________________________________________________________
    1098             : |                                                                           |
    1099             : |   Function Name : W_shl_sat_l                                             |
    1100             : |                                                                           |
    1101             : |   Purpose :                                                               |
    1102             : |                                                                           |
    1103             : |   Arithmetically shift the 64 bit input L64_var left by n positions with  |
    1104             : |   lower 32 bit saturation and return the 32 LSB of 64 bit result          |
    1105             : |                                                                           |
    1106             : |   Complexity weight : 1                                                   |
    1107             : |                                                                           |
    1108             : |   Inputs :                                                                |
    1109             : |                                                                           |
    1110             : |    L64_var                                                                |
    1111             : |       64 bit long signed integer (Word64) whose value falls in the        |
    1112             : |       range : 0x80000000 00000000LL <= L64_var <= 0x7fffffff ffffffffLL.  |
    1113             : |                                                                           |
    1114             : |    n                                                                      |
    1115             : |             32 bit signed integer (Word32) whose value falls in the       |
    1116             : |             range : 0x8000 0000 <= n <= 0x7fff 0000.                      |
    1117             : |                                                                           |
    1118             : |   Outputs :                                                               |
    1119             : |                                                                           |
    1120             : |    none                                                                   |
    1121             : |                                                                           |
    1122             : |   Return Value :                                                          |
    1123             : |                                                                           |
    1124             : |    L_result                                                               |
    1125             : |             32 bit long signed integer (Word32) whose value falls in the  |
    1126             : |             range : 0x8000 0000 <= L_result <= 0x7fff 0000.               |
    1127             : |___________________________________________________________________________|
    1128             : */
    1129 13291078489 : Word32 W_shl_sat_l( Word64 L64_var, Word16 n )
    1130             : {
    1131             :     Word32 L_result;
    1132             :     Word64 d_var_64;
    1133             : 
    1134 13291078489 :     d_var_64 = W_shl( L64_var, n );
    1135 13291078489 :     L_result = W_sat_l( d_var_64 );
    1136             : 
    1137             : #ifdef WMOPS
    1138             :     multiCounter[currCounter].W_shl_sat_l++;
    1139             :     multiCounter[currCounter].W_shl--;
    1140             :     multiCounter[currCounter].W_sat_l--;
    1141             : #endif /* if WMOPS */
    1142             : 
    1143 13291078489 :     return L_result;
    1144             : }
    1145             : 
    1146             : 
    1147             : /*__________________________________________________________________________________
    1148             : |                                                                                  |
    1149             : |   Function Name : W_round48_L                                                    |
    1150             : |                                                                                  |
    1151             : |   Purpose :                                                                      |
    1152             : |                                                                                  |
    1153             : |  Round asymmetrically lower 16 bits, and                                         |
    1154             : |  saturate the 17.47-bit values to 1.31-bit values                                |
    1155             : |   Complexity weight : 1                                                          |
    1156             : |                                                                                  |
    1157             : |   Inputs :                                                                       |
    1158             : |                                                                                  |
    1159             : |    L64_var1                                                                      |
    1160             : |             64 bit long long signed integer (Word64) whose value falls in        |
    1161             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
    1162             : |                                                                                  |
    1163             : |   Outputs :                                                                      |
    1164             : |                                                                                  |
    1165             : |    none                                                                          |
    1166             : |                                                                                  |
    1167             : |   Return Value :                                                                 |
    1168             : |                                                                                  |
    1169             : |    L_var_out                                                                     |
    1170             : |             32 bit long signed integer (Word32) whose value falls in the         |
    1171             : |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.                     |
    1172             : |__________________________________________________________________________________|
    1173             : */
    1174 36780596228 : Word32 W_round48_L_o( Word64 L64_var1, Flag *Overflow )
    1175             : {
    1176             :     Word64 L64_var_out;
    1177             :     Word32 L_result;
    1178             : 
    1179 36780596228 :     Word64 L64_var2 = 0x80000000;
    1180 36780596228 :     Word64 L64_MIN = (Word64) 0x8000000000000000LL;
    1181 36780596228 :     Word64 L64_MAX = 0x7FFFFFFFFFFFFFFFLL;
    1182             : 
    1183 36780596228 :     L64_var1 = W_shl( L64_var1, 16 );
    1184             : 
    1185 36780596228 :     L64_var_out = L64_var1 + L64_var2;
    1186             : 
    1187 36780596228 :     if ( ( ( L64_var1 ^ L64_var2 ) & L64_MIN ) == 0 )
    1188             :     {
    1189 21058586975 :         if ( ( L64_var_out ^ L64_var1 ) & L64_MIN )
    1190             :         {
    1191         367 :             L64_var_out = ( L64_var1 < 0 ) ? L64_MIN : L64_MAX;
    1192         367 :             set_overflow( Overflow );
    1193             :         }
    1194             :     }
    1195 36780596228 :     L_result = W_extract_h( L64_var_out );
    1196             : #ifdef WMOPS
    1197             :     multiCounter[currCounter].W_round48_L++;
    1198             :     multiCounter[currCounter].W_extract_h--;
    1199             :     multiCounter[currCounter].W_shl--;
    1200             : #endif /* if WMOPS */
    1201             : 
    1202 36780596228 :     return ( L_result );
    1203             : }
    1204             : 
    1205 36780596228 : Word32 W_round48_L( Word64 L64_var1 )
    1206             : {
    1207 36780596228 :     return W_round48_L_o( L64_var1, NULL );
    1208             : }
    1209             : 
    1210             : /*__________________________________________________________________________________
    1211             : |                                                                                  |
    1212             : |   Function Name : W_round32_s                                                    |
    1213             : |                                                                                  |
    1214             : |   Purpose :                                                                      |
    1215             : |                                                                                  |
    1216             : |  Round asymmetrically lower 32 bits, and                                         |
    1217             : |  saturate the 17.47-bit values to 1.15-bit values                                |
    1218             : |   Complexity weight : 1                                                          |
    1219             : |                                                                                  |
    1220             : |   Inputs :                                                                       |
    1221             : |                                                                                  |
    1222             : |    L64_var1                                                                      |
    1223             : |             64 bit long long signed integer (Word64) whose value falls in        |
    1224             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
    1225             : |                                                                                  |
    1226             : |   Outputs :                                                                      |
    1227             : |                                                                                  |
    1228             : |    none                                                                          |
    1229             : |                                                                                  |
    1230             : |   Return Value :                                                                 |
    1231             : |                                                                                  |
    1232             : |    var_out                                                                       |
    1233             : |             16 bit short signed integer (Word16) whose value falls in the        |
    1234             : |             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                       |
    1235             : |__________________________________________________________________________________|
    1236             : */
    1237    27938368 : Word16 W_round32_s_o( Word64 L64_var1, Flag *Overflow )
    1238             : {
    1239             :     Word64 L64_var_out;
    1240             :     Word32 L_var;
    1241             :     Word16 var_out;
    1242             : 
    1243             : 
    1244    27938368 :     Word64 L64_var2 = 0x800000000000LL;
    1245    27938368 :     Word64 L64_MIN = 0x8000000000000000LL;
    1246    27938368 :     Word64 L64_MAX = 0x7FFFFFFFFFFFFFFFLL;
    1247             : 
    1248    27938368 :     L64_var1 = W_shl( L64_var1, 16 );
    1249    27938368 :     L64_var_out = L64_var1 + L64_var2;
    1250             : 
    1251    27938368 :     if ( ( ( L64_var1 ^ L64_var2 ) & L64_MIN ) == 0 )
    1252             :     {
    1253    13900697 :         if ( ( L64_var_out ^ L64_var1 ) & L64_MIN )
    1254             :         {
    1255           0 :             L64_var_out = ( L64_var1 < 0 ) ? L64_MIN : L64_MAX;
    1256           0 :             set_overflow( Overflow );
    1257             :         }
    1258             :     }
    1259    27938368 :     L_var = W_extract_h( L64_var_out );
    1260    27938368 :     var_out = extract_h( L_var );
    1261             : #ifdef WMOPS
    1262             :     multiCounter[currCounter].W_round32_s++;
    1263             :     multiCounter[currCounter].W_extract_h--;
    1264             :     multiCounter[currCounter].extract_h--;
    1265             :     multiCounter[currCounter].W_shl--;
    1266             : #endif /* if WMOPS */
    1267             : 
    1268    27938368 :     return ( var_out );
    1269             : }
    1270             : 
    1271    27938368 : Word16 W_round32_s( Word64 L64_var1 )
    1272             : {
    1273    27938368 :     return W_round32_s_o( L64_var1, NULL );
    1274             : }
    1275             : 
    1276             : /*___________________________________________________________________________
    1277             : |                                                                           |
    1278             : |   Function Name : W_norm                                                  |
    1279             : |                                                                           |
    1280             : |   Purpose :                                                               |
    1281             : |                                                                           |
    1282             : |   Produces the number of left shifts needed to normalize the 64 bit varia-|
    1283             : |   ble L64_var1.
    1284             : |                                                                           |
    1285             : |   Complexity weight : 1                                                   |
    1286             : |                                                                           |
    1287             : |   Inputs :                                                                |
    1288             : |                                                                           |
    1289             : |  L64_var1                                                                 |
    1290             : |      64 bit long long signed integer (Word64) whose value falls in        |
    1291             : |      range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
    1292             : |                                                                           |
    1293             : |   Outputs :                                                               |
    1294             : |                                                                           |
    1295             : |    none                                                                   |
    1296             : |                                                                           |
    1297             : |   Return Value :                                                          |
    1298             : |                                                                           |
    1299             : |    var_out                                                                |
    1300             : |             16 bit short signed integer (Word16) whose value falls in the |
    1301             : |             range : 0x0000 0000 <= var_out <= 0x0000 003f.                |
    1302             : |___________________________________________________________________________|
    1303             : */
    1304 18444125907 : Word16 W_norm( Word64 L64_var1 )
    1305             : {
    1306             :     Word16 var_out;
    1307 18444125907 :     if ( L64_var1 == 0 )
    1308             :     {
    1309   773747631 :         var_out = 0;
    1310             :     }
    1311             :     else
    1312             :     {
    1313 17670378276 :         if ( L64_var1 == (Word64) 0xffffffffffffffffLL )
    1314             :         {
    1315       39639 :             var_out = 63;
    1316             :         }
    1317             :         else
    1318             :         {
    1319 17670338637 :             if ( L64_var1 < 0 )
    1320             :             {
    1321  7423688673 :                 L64_var1 = ~L64_var1;
    1322             :             }
    1323 >61060*10^7 :             for ( var_out = 0; L64_var1 < (Word64) 0x4000000000000000LL; var_out++ )
    1324             :             {
    1325 >59293*10^7 :                 L64_var1 <<= 1;
    1326             :             }
    1327             :         }
    1328             :     }
    1329             : #ifdef WMOPS
    1330             :     multiCounter[currCounter].W_norm++;
    1331             : #endif /* if WMOPS */
    1332 18444125907 :     return ( var_out );
    1333             : }
    1334             : 
    1335             : 
    1336             : /*______________________________________________________________________________
    1337             : |                                                                               |
    1338             : |   Function Name : W_add                                                       |
    1339             : |                                                                               |
    1340             : |   Purpose :                                                                   |
    1341             : |                                                                               |
    1342             : |   64 bits addition of the two 64 bits variables (L64_var1+L64_var2)  with     |
    1343             : |   overflow control and saturation; the result is set at 0x7fffffffffffffffLL  |
    1344             : |   when overflow occurs or at 0x8000000000000000LL when underflow occurs.      |
    1345             : |                                                                               |
    1346             : |   Complexity weight : 1                                                       |
    1347             : |                                                                               |
    1348             : |   Inputs :                                                                    |
    1349             : |                                                                               |
    1350             : |   L64_var1   64 bit long signed integer (Word64) whose value falls in the     |
    1351             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1352             : |                                                                               |
    1353             : |   L64_var2   64 bit long signed integer (Word64) whose value falls in the     |
    1354             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1355             : |                                                                               |
    1356             : |   Outputs :                                                                   |
    1357             : |                                                                               |
    1358             : |    none                                                                       |
    1359             : |                                                                               |
    1360             : |   Return Value :                                                              |
    1361             : |                                                                               |
    1362             : |    L64_var_out                                                                |
    1363             : |             64 bit long signed integer (Word64) whose value falls in the      |
    1364             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1365             : |_______________________________________________________________________________|
    1366             : */
    1367 >16549*10^7 : Word64 W_add_o( Word64 L64_var1, Word64 L64_var2, Flag *Overflow )
    1368             : {
    1369             :     Word64 L64_var_out;
    1370             : 
    1371 >16549*10^7 :     L64_var_out = L64_var1 + L64_var2;
    1372             : 
    1373 >16549*10^7 :     if ( ( ( L64_var1 ^ L64_var2 ) & MIN_64 ) == 0 )
    1374             :     {
    1375 92483331263 :         if ( ( L64_var_out ^ L64_var1 ) & MIN_64 )
    1376             :         {
    1377      237111 :             L64_var_out = ( L64_var1 < 0 ) ? MIN_64 : MAX_64;
    1378      237111 :             set_overflow( Overflow );
    1379             :         }
    1380             :     }
    1381             : 
    1382             : #ifdef WMOPS
    1383             :     multiCounter[currCounter].W_add++;
    1384             : #endif
    1385 >16549*10^7 :     return L64_var_out;
    1386             : }
    1387             : 
    1388 >16549*10^7 : Word64 W_add( Word64 L64_var1, Word64 L64_var2 )
    1389             : {
    1390 >16549*10^7 :     return W_add_o( L64_var1, L64_var2, NULL );
    1391             : }
    1392             : 
    1393             : /*______________________________________________________________________________
    1394             : |                                                                               |
    1395             : |   Function Name : W_sub                                                       |
    1396             : |                                                                               |
    1397             : |   Purpose :                                                                   |
    1398             : |                                                                               |
    1399             : |   64 bits subtraction of the two 64 bits variables (L64_var1-L64_var2)  with  |
    1400             : |   overflow control and saturation; the result is set at 0x7fffffffffffffffLL  |
    1401             : |   when overflow occurs or at 0x8000000000000000LL when underflow occurs.      |
    1402             : |                                                                               |
    1403             : |   Complexity weight : 1                                                       |
    1404             : |                                                                               |
    1405             : |   Inputs :                                                                    |
    1406             : |                                                                               |
    1407             : |   L64_var1   64 bit long signed integer (Word64) whose value falls in the     |
    1408             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1409             : |                                                                               |
    1410             : |   L64_var2   64 bit long signed integer (Word64) whose value falls in the     |
    1411             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1412             : |                                                                               |
    1413             : |   Outputs :                                                                   |
    1414             : |                                                                               |
    1415             : |    none                                                                       |
    1416             : |                                                                               |
    1417             : |   Return Value :                                                              |
    1418             : |                                                                               |
    1419             : |    L64_var_out                                                                |
    1420             : |             64 bit long signed integer (Word64) whose value falls in the      |
    1421             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1422             : |_______________________________________________________________________________|
    1423             : */
    1424   236387655 : Word64 W_sub_o( Word64 L64_var1, Word64 L64_var2, Flag *Overflow )
    1425             : {
    1426             :     Word64 L64_var_out;
    1427             : 
    1428   236387655 :     L64_var_out = L64_var1 - L64_var2;
    1429             : 
    1430   236387655 :     if ( ( ( L64_var1 ^ L64_var2 ) & MIN_64 ) != 0 )
    1431             :     {
    1432    45783093 :         if ( ( L64_var_out ^ L64_var1 ) & MIN_64 )
    1433             :         {
    1434           0 :             L64_var_out = ( L64_var1 < 0 ) ? MIN_64 : MAX_64;
    1435           0 :             set_overflow( Overflow );
    1436             :         }
    1437             :     }
    1438             : 
    1439             : #ifdef WMOPS
    1440             :     multiCounter[currCounter].W_add++;
    1441             : #endif
    1442   236387655 :     return L64_var_out;
    1443             : }
    1444             : 
    1445   236387655 : Word64 W_sub( Word64 L64_var1, Word64 L64_var2 )
    1446             : {
    1447   236387655 :     return W_sub_o( L64_var1, L64_var2, NULL );
    1448             : }
    1449             : 
    1450             : 
    1451             : /*______________________________________________________________________________
    1452             : |                                                                               |
    1453             : |   Function Name : W_neg                                                       |
    1454             : |                                                                               |
    1455             : |   Purpose :                                                                   |
    1456             : |                                                                               |
    1457             : |   Negate the 64 bit variable L64_var1 with overflow control and saturation;   |
    1458             : |   Saturate and set overflow in the case where input is 0x8000000000000000LL.  |
    1459             : |                                                                               |
    1460             : |   Complexity weight : 1                                                       |
    1461             : |                                                                               |
    1462             : |   Inputs :                                                                    |
    1463             : |                                                                               |
    1464             : |   L64_var1   64 bit long signed integer (Word64) whose value falls in the     |
    1465             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1466             : |                                                                               |
    1467             : |   Outputs :                                                                   |
    1468             : |                                                                               |
    1469             : |    none                                                                       |
    1470             : |                                                                               |
    1471             : |   Return Value :                                                              |
    1472             : |                                                                               |
    1473             : |    L64_var_out                                                                |
    1474             : |             64 bit long signed integer (Word64) whose value falls in the      |
    1475             : |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
    1476             : |_______________________________________________________________________________|
    1477             : */
    1478     3318532 : Word64 W_neg_o( Word64 L64_var1, Flag *Overflow )
    1479             : {
    1480             :     Word64 L64_var_out;
    1481             : 
    1482     3318532 :     if ( L64_var1 == MIN_64 )
    1483             :     {
    1484           0 :         L64_var_out = MAX_64;
    1485           0 :         set_overflow( Overflow );
    1486             :     }
    1487             :     else
    1488             :     {
    1489     3318532 :         L64_var_out = -L64_var1;
    1490             :     }
    1491             : 
    1492             : #ifdef WMOPS
    1493             :     multiCounter[currCounter].W_neg++;
    1494             : #endif
    1495             : 
    1496     3318532 :     return ( L64_var_out );
    1497             : }
    1498             : 
    1499     3318532 : Word64 W_neg( Word64 L64_var1 )
    1500             : {
    1501     3318532 :     return W_neg_o( L64_var1, NULL );
    1502             : }
    1503             : 
    1504             : 
    1505             : /*___________________________________________________________________________
    1506             :  |                                                                           |
    1507             :  |   Function Name : W_abs                                                   |
    1508             :  |                                                                           |
    1509             :  |   Purpose :                                                               |
    1510             :  |                                                                           |
    1511             :  |    Absolute value of L64_var1; Saturate in case where the input is        |
    1512             :  |    0x8000000000000000LL                                                   |
    1513             :  |                                                                           |
    1514             :  |   Complexity weight : 1                                                   |
    1515             :  |                                                                           |
    1516             :  |   Inputs :                                                                |
    1517             :  |                                                                           |
    1518             :  |   L64_var1   64 bit long signed integer (Word64) whose value falls in the |
    1519             :  |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
    1520             :  |                                                                           |
    1521             :  |   Outputs :                                                               |
    1522             :  |                                                                           |
    1523             :  |    none                                                                   |
    1524             :  |                                                                           |
    1525             :  |   Return Value :                                                          |
    1526             :  |                                                                           |
    1527             :  |    L64_var_out                                                            |
    1528             :  |             64 bit long signed integer (Word64) whose value falls in the  |
    1529             :  |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
    1530             :  |___________________________________________________________________________|
    1531             : */
    1532   399159513 : Word64 W_abs_o( Word64 L64_var1, Flag *Overflow )
    1533             : {
    1534             :     Word64 L64_var_out;
    1535             : 
    1536   399159513 :     if ( L64_var1 == MIN_64 )
    1537             :     {
    1538           0 :         L64_var_out = MAX_64;
    1539           0 :         set_overflow( Overflow );
    1540             :     }
    1541             :     else
    1542             :     {
    1543   399159513 :         if ( L64_var1 < 0 )
    1544             :         {
    1545   163792819 :             L64_var_out = -L64_var1;
    1546             :         }
    1547             :         else
    1548             :         {
    1549   235366694 :             L64_var_out = L64_var1;
    1550             :         }
    1551             :     }
    1552             : 
    1553             : #ifdef WMOPS
    1554             :     multiCounter[currCounter].W_abs++;
    1555             : #endif
    1556             : 
    1557   399159513 :     return ( L64_var_out );
    1558             : }
    1559             : 
    1560   399159513 : Word64 W_abs( Word64 L64_var1 )
    1561             : {
    1562   399159513 :     return W_abs_o( L64_var1, NULL );
    1563             : }
    1564             : 
    1565             : /*_________________________________________________________________________________________________
    1566             : |                                                                                                 |
    1567             : |   Function Name : W_mult_32_32                                                                  |
    1568             : |                                                                                                 |
    1569             : |   Purpose :                                                                                     |
    1570             : |                                                                                                 |
    1571             : |   Multiply L_var1 by L_var2 and shift the result left by 1.Saturate and set overflow in case    |
    1572             : |    where both inputs are 0x80000000 .  Return a 64 bit result.                                  |
    1573             : |                                                                                                 |
    1574             : |   Complexity weight : 1                                                                         |
    1575             : |                                                                                                 |
    1576             : |   Inputs :                                                                                      |
    1577             : |                                                                                                 |
    1578             : |    L_var1                                                                                       |
    1579             : |             32 bit signed integer (Word32) whose value falls in the                             |
    1580             : |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff                                        |
    1581             : |                                                                                                 |
    1582             : |    L_var2                                                                                       |
    1583             : |             32 bit signed integer (Word32) whose value falls in the                             |
    1584             : |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff                                        |
    1585             : |                                                                                                 |
    1586             : |   Outputs :                                                                                     |
    1587             : |                                                                                                 |
    1588             : |    none                                                                                         |
    1589             : |                                                                                                 |
    1590             : |   Return Value :                                                                                |
    1591             : |                                                                                                 |
    1592             : |    L64_var_out                                                                                  |
    1593             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
    1594             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
    1595             : |_________________________________________________________________________________________________|
    1596             : */
    1597 >14482*10^7 : Word64 W_mult_32_32_o( Word32 L_var1, Word32 L_var2, Flag *Overflow )
    1598             : {
    1599             :     Word64 L64_var_out;
    1600             : 
    1601 >14482*10^7 :     if ( ( L_var1 == MIN_32 ) && ( L_var2 == MIN_32 ) )
    1602             :     {
    1603        8227 :         L64_var_out = MAX_64;
    1604        8227 :         set_overflow( Overflow );
    1605             :     }
    1606             :     else
    1607             :     {
    1608 >14482*10^7 :         L64_var_out = ( (Word64) L_var1 * L_var2 ) << 1;
    1609             :     }
    1610             : 
    1611             : #ifdef WMOPS
    1612             :     multiCounter[currCounter].W_mult_32_32++;
    1613             : #endif /* if WMOPS */
    1614 >14482*10^7 :     return L64_var_out;
    1615             : }
    1616             : 
    1617 >14482*10^7 : Word64 W_mult_32_32( Word32 L_var1, Word32 L_var2 )
    1618             : {
    1619 >14482*10^7 :     return W_mult_32_32_o( L_var1, L_var2, NULL );
    1620             : }
    1621             : 
    1622             : /*_________________________________________________________________________________________________
    1623             : |                                                                                                 |
    1624             : |   Function Name : W_mult0_32_32                                                                 |
    1625             : |                                                                                                 |
    1626             : |   Purpose :                                                                                     |
    1627             : |                                                                                                 |
    1628             : |   Multiply L_var1 by L_var2.  Return a 64 bit result.                                           |
    1629             : |                                                                                                 |
    1630             : |   Complexity weight : 1                                                                         |
    1631             : |                                                                                                 |
    1632             : |   Inputs :                                                                                      |
    1633             : |                                                                                                 |
    1634             : |    L_var1                                                                                       |
    1635             : |             32 bit signed integer (Word32) whose value falls in the                             |
    1636             : |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff                                        |
    1637             : |                                                                                                 |
    1638             : |    L_var2                                                                                       |
    1639             : |             32 bit signed integer (Word32) whose value falls in the                             |
    1640             : |             range : 0x8000 0000 <= L_var1 <= 0x7fff ffff                                        |
    1641             : |                                                                                                 |
    1642             : |   Outputs :                                                                                     |
    1643             : |                                                                                                 |
    1644             : |    none                                                                                         |
    1645             : |                                                                                                 |
    1646             : |   Return Value :                                                                                |
    1647             : |                                                                                                 |
    1648             : |    L64_var_out                                                                                  |
    1649             : |             64 bit long long signed integer (Word64) whose value falls in the                   |
    1650             : |             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
    1651             : |_________________________________________________________________________________________________|
    1652             : */
    1653 25213820371 : Word64 W_mult0_32_32( Word32 L_var1, Word32 L_var2 )
    1654             : {
    1655             :     Word64 L64_var_out;
    1656             : 
    1657 25213820371 :     L64_var_out = (Word64) L_var1 * L_var2;
    1658             : 
    1659             : 
    1660             : #ifdef WMOPS
    1661             :     multiCounter[currCounter].W_mult0_32_32++;
    1662             : #endif /* if WMOPS */
    1663 25213820371 :     return L64_var_out;
    1664             : }
    1665             : 
    1666             : 
    1667             : /*_____________________________________________________________________________
    1668             : |                                                                              |
    1669             : |   Function Name : W_lshl                                                     |
    1670             : |                                                                              |
    1671             : |   Purpose :                                                                  |
    1672             : |                                                                              |
    1673             : |   Logically shift the 64 bit unsigned input L64_var1 left by var2 positions. |
    1674             : |   Zero fill the var2 LSB of the result. If var2 is negative, logically shift |
    1675             : |   L64_var1 right by -var2 with zero fill in the MSB.                         |
    1676             : |                                                                              |
    1677             : |   Complexity weight : 1                                                      |
    1678             : |                                                                              |
    1679             : |   Inputs :                                                                   |
    1680             : |                                                                              |
    1681             : |    L64_var1  64 bit long unsigned signed integer (UWord64) whose value falls |
    1682             : |    in the range : 0LL <= L64_var1 <= 0xffffffff ffffffffLL.                  |
    1683             : |                                                                              |
    1684             : |    var2                                                                      |
    1685             : |             16 bit short signed integer (Word16) whose value falls in the    |
    1686             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                      |
    1687             : |                                                                              |
    1688             : |   Outputs :                                                                  |
    1689             : |                                                                              |
    1690             : |    none                                                                      |
    1691             : |                                                                              |
    1692             : |   Return Value :                                                             |
    1693             : |                                                                              |
    1694             : |    L64_var_out                                                               |
    1695             : |             64 bit long unsigned signed integer (UWord64) whose value falls  |
    1696             : |    in the range : 0LL <= L64_var1 <= 0xffffffff ffffffffLL.                  |
    1697             : |______________________________________________________________________________|
    1698             : */
    1699      372352 : UWord64 W_lshl( UWord64 L64_var1, Word16 var2 )
    1700             : {
    1701             : 
    1702      372352 :     UWord64 L64_var_out = 0LL;
    1703             : 
    1704      372352 :     if ( var2 < 0 )
    1705             :     {
    1706           0 :         L64_var_out = L64_var1 >> ( -var2 );
    1707             :     }
    1708             :     else
    1709             :     {
    1710      372352 :         L64_var_out = L64_var1 << var2;
    1711             :     }
    1712             : #ifdef WMOPS
    1713             :     multiCounter[currCounter].W_lshl++;
    1714             : #endif
    1715             : 
    1716      372352 :     return ( L64_var_out );
    1717             : }
    1718             : 
    1719             : /*_____________________________________________________________________________
    1720             : |                                                                              |
    1721             : |   Function Name : W_lshr                                                     |
    1722             : |                                                                              |
    1723             : |   Purpose :                                                                  |
    1724             : |                                                                              |
    1725             : |   Logically shift the 64 bit unsigned input L64_var1 right by var2 positions.|
    1726             : |   Zero fill the var2 MSB of the result. If var2 is negative, logically shift |
    1727             : |   L64_var1 left by -var2 with zero fill in the LSB.                          |
    1728             : |                                                                              |
    1729             : |   Complexity weight : 1                                                      |
    1730             : |                                                                              |
    1731             : |   Inputs :                                                                   |
    1732             : |                                                                              |
    1733             : |    L64_var1  64 bit long unsigned signed integer (UWord64) whose value falls |
    1734             : |    in the range : 0LL <= L64_var1 <= 0xffffffff ffffffffLL.                  |
    1735             : |                                                                              |
    1736             : |    var2                                                                      |
    1737             : |             16 bit short signed integer (Word16) whose value falls in the    |
    1738             : |             range : 0xffff 8000 <= var1 <= 0x0000 7fff.                      |
    1739             : |                                                                              |
    1740             : |   Outputs :                                                                  |
    1741             : |                                                                              |
    1742             : |    none                                                                      |
    1743             : |                                                                              |
    1744             : |   Return Value :                                                             |
    1745             : |                                                                              |
    1746             : |    L64_var_out                                                               |
    1747             : |             64 bit long unsigned signed integer (UWord64) whose value falls  |
    1748             : |    in the range : 0LL <= L64_var1 <= 0xffffffff ffffffffLL.                  |
    1749             : |______________________________________________________________________________|
    1750             : */
    1751           0 : UWord64 W_lshr( UWord64 L64_var1, Word16 var2 )
    1752             : {
    1753             : 
    1754           0 :     UWord64 L64_var_out = 0LL;
    1755             : 
    1756           0 :     if ( var2 < 0 )
    1757             :     {
    1758           0 :         L64_var_out = L64_var1 << ( -var2 );
    1759             :     }
    1760             :     else
    1761             :     {
    1762           0 :         L64_var_out = L64_var1 >> var2;
    1763             :     }
    1764             : #ifdef WMOPS
    1765             :     multiCounter[currCounter].W_lshr++;
    1766             : #endif
    1767             : 
    1768           0 :     return ( L64_var_out );
    1769             : }
    1770             : 
    1771             : 
    1772             : /*__________________________________________________________________________________
    1773             : |                                                                                  |
    1774             : |   Function Name : W_round64_L                                                    |
    1775             : |                                                                                  |
    1776             : |   Purpose :                                                                      |
    1777             : |                                                                                  |
    1778             : |  Round asymmetrically lower 32 bits, and                                         |
    1779             : |  saturate the 1.63-bit values to 1.31-bit values                                 |
    1780             : |   Complexity weight : 1                                                          |
    1781             : |                                                                                  |
    1782             : |   Inputs :                                                                       |
    1783             : |                                                                                  |
    1784             : |    L64_var1                                                                      |
    1785             : |             64 bit long long signed integer (Word64) whose value falls in        |
    1786             : |             range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.  |
    1787             : |                                                                                  |
    1788             : |   Outputs :                                                                      |
    1789             : |                                                                                  |
    1790             : |    none                                                                          |
    1791             : |                                                                                  |
    1792             : |   Return Value :                                                                 |
    1793             : |                                                                                  |
    1794             : |    L_var_out                                                                     |
    1795             : |             32 bit long signed integer (Word32) whose value falls in the         |
    1796             : |             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.                     |
    1797             : |__________________________________________________________________________________|
    1798             : */
    1799     5170901 : Word32 W_round64_L( Word64 L64_var1 )
    1800             : {
    1801             :     Word64 L64_var_out;
    1802             :     Word32 L_result;
    1803             : 
    1804             : 
    1805     5170901 :     Word64 L64_tmp = 0x80000000;
    1806     5170901 :     L64_var_out = W_add( L64_var1, L64_tmp );
    1807     5170901 :     L_result = W_extract_h( L64_var_out );
    1808             : 
    1809             : #ifdef WMOPS
    1810             :     multiCounter[currCounter].W_round64_L++;
    1811             :     multiCounter[currCounter].W_extract_h--;
    1812             :     multiCounter[currCounter].W_add--;
    1813             : #endif /* if WMOPS */
    1814             : 
    1815     5170901 :     return ( L_result );
    1816             : }
    1817             : 
    1818             : #endif /* #ifdef ENH_64_BIT_OPERATOR */
    1819             : #undef WMC_TOOL_SKIP
    1820             : 
    1821             : /* end of file */

Generated by: LCOV version 1.14