Commit f783eba9 authored by Stefan Doehla's avatar Stefan Doehla
Browse files

[fix] missing overflow handling as in legacy STL

parent fe603f82
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2044,6 +2044,8 @@ Word32 L_sub_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow )
    Word32 L_test;
    Flag carry_int = 0;

    /* TODO: unset overflow, but not done  */
    /* unset_overflow( Overflow ); */
    if ( get_carry( Carry ) )
    {
        unset_carry( Carry );
@@ -2056,6 +2058,7 @@ Word32 L_sub_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow )
            L_var_out = L_var1 - L_var2;
            if ( L_var1 > 0L )
            {
                set_overflow( Overflow );
                unset_carry( Carry );
            }
        }
@@ -2067,18 +2070,22 @@ Word32 L_sub_co( Word32 L_var1, Word32 L_var2, Flag *Carry, Flag *Overflow )

        if ( ( L_test < 0 ) && ( L_var1 > 0 ) && ( L_var2 < 0 ) )
        {
            set_overflow( Overflow );
            carry_int = 0;
        }
        else if ( ( L_test > 0 ) && ( L_var1 < 0 ) && ( L_var2 > 0 ) )
        {
            set_overflow( Overflow );
            carry_int = 1;
        }
        else if ( ( L_test > 0 ) && ( ( L_var1 ^ L_var2 ) > 0 ) )
        {
            unset_overflow( Overflow );
            carry_int = 1;
        }
        if ( L_test == MIN_32 )
        {
            set_overflow( Overflow );
            carry_int ? set_carry( Carry ) : unset_carry( Carry );
        }
        else