Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c5915062 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Improve overflow handling" into main

parents 78e3c8ad a19e9176
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -115,7 +115,6 @@ extern "C"
     Returns:
        L_sum = 32-bit sum of L_var1 and L_var2 (Word32)
    */
    __attribute__((no_sanitize("integer")))
    static inline Word32 L_add(Word32 L_var1, Word32 L_var2, Flag *pOverflow)
    {
        Word32 L_sum;
@@ -454,7 +453,8 @@ extern "C"
    {
        Word32 result;

        result = L_var3 + L_var1 * L_var2;
        __builtin_mul_overflow(L_var1, L_var2, &result);
        __builtin_add_overflow(L_var3, result, &result);

        return result;
    }
@@ -463,7 +463,8 @@ extern "C"
    {
        Word32 result;

        result = L_var3 - L_var1 * L_var2;
        __builtin_mul_overflow(L_var1, L_var2, &result);
        __builtin_sub_overflow(L_var3, result, &result);

        return result;
    }
+0 −3
Original line number Diff line number Diff line
@@ -237,9 +237,6 @@ static Word16 Chebps (Word16 x,

------------------------------------------------------------------------------
*/
#ifdef __clang__
__attribute__((no_sanitize("integer")))
#endif
static Word16 Chebps(Word16 x,
                     Word16 f[], /* (n) */
                     Word16 n,
+7 −3
Original line number Diff line number Diff line
@@ -186,8 +186,12 @@ Word32 L_abs(Word32 L_var1)
    ; Function body here
    ----------------------------------------------------------------------------*/

    Word32 y = L_var1 - (L_var1 < 0);
    y = y ^(y >> 31);
    return (y);
    if (L_var1 >= 0) return L_var1;
    if (L_var1 != 0x80000000) return -L_var1;
    // abs(0x80000000) can not be represented in Word32.
    // we choose to return the closest value we can -- 0x7fffffff
    // This is acceptable because it keeps the result within the valid 32-bit signed integer range,
    // consistent with other overflow handling in the code. such as amrnb/enc/src/l_negate.cpp.
    return 0x7FFFFFFF;

}
+2 −2
Original line number Diff line number Diff line
@@ -281,8 +281,8 @@ static void Get_lsp_pol(
            t0 += ((Word32)lo * *lsp) >> 15;

            *(f) +=  *(f - 2);          /*      *f += f[-2]      */
            *(f--) -=  t0 << 2;         /*      *f -= t0         */

            __builtin_sub_overflow(*(f), (t0 << 2), f);   /*      *f -= t0         */
            f--;
        }

        *f -= (Word32)(*lsp++) << 10;
+1 −2
Original line number Diff line number Diff line
@@ -211,8 +211,7 @@ Word16 norm_l(Word32 L_var1)
    if (L_var1)
    {

        Word32 y = L_var1 - (L_var1 < 0);
        L_var1 = y ^(y >> 31);
        L_var1 = L_abs(L_var1);


        while (!(0x40000000L & L_var1))
Loading