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

Commit 696f5bb8 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Improve overflow handling" into main am: c5915062

parents 1a2e2bca c5915062
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