Commit 79bf4238 authored by norvell's avatar norvell
Browse files

Added fix for L_add_o, L_add_co, shl_o and L_sub_o under FIX_1528_USAN_BASOP32

parent f3dda925
Loading
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -740,7 +740,12 @@ Word16 shl_o( Word16 var1, Word16 var2, Flag *Overflow )
    }
    else
    {

#ifdef FIX_1528_USAN_BASOP32
        result = (Word32) var1 * (Word32) ( 1UL << var2 );
#else
        result = (Word32) var1 * ( (Word32) 1 << var2 );
#endif

        if ( ( var2 > 15 && var1 != 0 ) || ( result != (Word32) ( (Word16) result ) ) )
        {
@@ -1626,7 +1631,11 @@ Word32 L_add_o( Word32 L_var1, Word32 L_var2, Flag *Overflow )
{
    Word32 L_var_out;

#ifdef FIX_1528_USAN_BASOP32
    L_var_out = (Word32) ( (UWord32) L_var1 + (UWord32) L_var2 );
#else
    L_var_out = L_var1 + L_var2;
#endif

    if ( ( ( L_var1 ^ L_var2 ) & MIN_32 ) == 0 )
    {
@@ -1708,7 +1717,11 @@ Word32 L_sub_o( Word32 L_var1, Word32 L_var2, Flag *Overflow )
{
    Word32 L_var_out;

#ifdef FIX_1528_USAN_BASOP32
    L_var_out = (Word32) ( (UWord32) L_var1 - (UWord32) L_var2 );
#else
    L_var_out = L_var1 - L_var2;
#endif

    if ( ( ( L_var1 ^ L_var2 ) & MIN_32 ) != 0 )
    {
@@ -1871,9 +1884,17 @@ Word32 L_add_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow )
    Word32 L_test;
    Flag carry_int = 0;

#ifdef FIX_1528_USAN_BASOP32
    L_var_out = (Word32) ( (UWord32) L_var1 + (UWord32) L_var2 + get_carry( Carry ) );
#else
    L_var_out = L_var1 + L_var2 + get_carry( Carry );
#endif

#ifdef FIX_1528_USAN_BASOP32
    L_test = (Word32) ( (UWord32) L_var1 + (UWord32) L_var2 );
#else
    L_test = L_var1 + L_var2;
#endif

    if ( ( L_var1 > 0 ) && ( L_var2 > 0 ) && ( L_test < 0 ) )
    {
@@ -2790,7 +2811,7 @@ Word32 L_deposit_h( Word16 var1 )
{
    Word32 L_var_out;

#ifdef FIX_USAN_L_DEPOSIT_H
#ifdef FIX_1528_USAN_BASOP32
    L_var_out = (Word32) ( ( (UWord32) var1 ) << 16 );
#else
    L_var_out = (Word32) var1 << 16;
+1 −1
Original line number Diff line number Diff line
@@ -98,5 +98,5 @@
#define FIX_1486_IND_SHB_RES                   /* VA: Fix for issue 1486: align the usage of IND_SHB_RES_GS indices with float code */

#define TEST_HR
#define FIX_USAN_L_DEPOSIT_H                    /* Eri: (Issue #1528): The L_deposit_h does left-shift of negative numbers, which is undefined. This is resolved by casting to an unsigned number before the shift. */
#define FIX_1528_USAN_BASOP32                    /* Eri: (Issue #1528): The operators L_add_o, L_add_co, shl_o and L_sub_o assume additions/subtractions treated as unsigned numbers where wrap-around may happen.   */
#endif