Commit ebccd1b1 authored by Manuel Jander's avatar Manuel Jander
Browse files

Change 64 bit addition/substraction overflow check according to proposal from Cadence.

parent f5535d39
Loading
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ Word64 W_add_nosat( Word64 L64_var1, Word64 L64_var2 )
{
    Word64 L64_var_out;
#ifdef FIX_2493_CHECK_64BIT
    assert( W_abs( ( ( L64_var1 + L64_var2 ) >> 1 ) - ( ( L64_var1 >> 1 ) + ( L64_var2 >> 1 ) ) ) < 2 );
    assert( !( ( L64_var2 > 0 && L64_var1 > MAX_64 - L64_var2 ) || ( L64_var2 < 0 && L64_var1 < MIN_64 - L64_var2 ) ) );
#endif
    L64_var_out = L64_var1 + L64_var2;

@@ -124,7 +124,7 @@ Word64 W_sub_nosat( Word64 L64_var1, Word64 L64_var2 )
{
    Word64 L64_var_out;
#ifdef FIX_2493_CHECK_64BIT
    assert( W_abs( ( ( L64_var1 - L64_var2 ) >> 1 ) - ( ( L64_var1 >> 1 ) - ( L64_var2 >> 1 ) ) ) < 2 );
    assert( !( ( L64_var2 < 0 && L64_var1 > MAX_64 + L64_var2 ) || ( L64_var2 > 0 && L64_var1 < MIN_64 + L64_var2 ) ) );
#endif
    L64_var_out = L64_var1 - L64_var2;

@@ -438,7 +438,7 @@ Word64 W_mac_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 )
{
    Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1;
#ifdef FIX_2493_CHECK_64BIT
    assert( W_abs( ( ( L64_var_out + L64_var1 ) >> 1 ) - ( ( L64_var_out >> 1 ) + ( L64_var1 >> 1 ) ) ) < 2 );
    assert( !( ( L64_var_out > 0 && L64_var1 > MAX_64 - L64_var_out ) || ( L64_var_out < 0 && L64_var1 < MIN_64 - L64_var_out ) ) );
#endif
    L64_var_out += L64_var1;
#ifdef WMOPS
@@ -488,7 +488,7 @@ Word64 W_msu_32_16( Word64 L64_var1, Word32 L_var2, Word16 var3 )
{
    Word64 L64_var_out = ( (Word64) L_var2 * var3 ) << 1;
#ifdef FIX_2493_CHECK_64BIT
    assert( W_abs( ( ( L64_var1 - L64_var_out ) >> 1 ) - ( ( L64_var1 >> 1 ) - ( L64_var_out >> 1 ) ) ) < 2 );
    assert( !( ( L64_var_out < 0 && L64_var1 > MAX_64 + L64_var_out ) || ( L64_var_out > 0 && L64_var1 < MIN_64 + L64_var_out ) ) );
#endif
    L64_var_out = L64_var1 - L64_var_out;
#ifdef WMOPS
@@ -617,7 +617,7 @@ Word64 W_mac0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
{
    Word64 L64_var_out = (Word64) var2 * var3;
#ifdef FIX_2493_CHECK_64BIT
    assert( W_abs( ( ( L64_var_out + L64_var1 ) >> 1 ) - ( ( L64_var_out >> 1 ) + ( L64_var1 >> 1 ) ) ) < 2 );
    assert( !( ( L64_var_out > 0 && L64_var1 > MAX_64 - L64_var_out ) || ( L64_var_out < 0 && L64_var1 < MIN_64 - L64_var_out ) ) );
#endif
    L64_var_out += L64_var1;
#ifdef WMOPS
@@ -666,7 +666,7 @@ Word64 W_msu0_16_16( Word64 L64_var1, Word16 var2, Word16 var3 )
{
    Word64 L64_var_out = (Word64) var2 * var3;
#ifdef FIX_2493_CHECK_64BIT
    assert( W_abs( ( ( L64_var1 - L64_var_out ) >> 1 ) - ( ( L64_var1 >> 1 ) - ( L64_var_out >> 1 ) ) ) < 2 );
    assert( !( ( L64_var_out < 0 && L64_var1 > MAX_64 + L64_var_out ) || ( L64_var_out > 0 && L64_var1 < MIN_64 + L64_var_out ) ) );
#endif
    L64_var_out = L64_var1 - L64_var_out;
#ifdef WMOPS