Commit 9fa09725 authored by Arthur Tritthart's avatar Arthur Tritthart
Browse files

added changes according to review comments, results should be same as in last commit

parent a77a208f
Loading
Loading
Loading
Loading
Loading
+18 −14
Original line number Diff line number Diff line
@@ -353,19 +353,26 @@ void hp20_fx_32_opt(
    Word32 tmp_mem[4];

    prescale = L_norm_arr( signal_fx, lg );
    prescale_current_frame = sub( add( 1, HP20_FX_COEFF_SCALE ), prescale );
    prescale_current_frame = sub( 1 + HP20_FX_COEFF_SCALE, prescale );

    prescaleOld = extract_l( mem_fx[4] );

    Copy32( mem_fx, tmp_mem, 4 );
    Scale_sig32( tmp_mem, 4, prescaleOld );
    tmp_mem[0] = L_shl_sat( mem_fx[0], prescaleOld );
    tmp_mem[1] = L_shl_sat( mem_fx[1], prescaleOld );
    tmp_mem[2] = L_shl_sat( mem_fx[2], prescaleOld );
    tmp_mem[3] = L_shl_sat( mem_fx[3], prescaleOld );
    move32();
    move32();
    move32();
    move32();

    diff = L_norm_arr( tmp_mem, 4 );

    prescale = s_min( prescale, diff );

    prescale = sub( add( 1, HP20_FX_COEFF_SCALE ), prescale );
    prescale = sub( 1 + HP20_FX_COEFF_SCALE, prescale );

    IF( EQ_16( prescale_current_frame, -29 ) ) // signal_fx buffer contains only zeros, so use the mem_fx scale_factor instead
    if( EQ_16( prescale_current_frame, 1 + HP20_FX_COEFF_SCALE - 31 ) ) // signal_fx buffer contains only zeros, so use the mem_fx scale_factor instead
    {
        prescale_current_frame = prescale;
    }
@@ -373,21 +380,18 @@ void hp20_fx_32_opt(
    diff = sub( prescale, prescaleOld );
#ifdef ISSUE_1836_replace_overflow_libcom
    mem_fx[0] = L_shr_sat( mem_fx[0], diff );
    move32();
    mem_fx[1] = L_shr_sat( mem_fx[1], diff );
    move32();
    mem_fx[2] = L_shr_sat( mem_fx[2], diff );
    move32();
    mem_fx[3] = L_shr_sat( mem_fx[3], diff );
#else
    mem_fx[0] = L_shr_o( mem_fx[0], diff, &Overflow );
    move32();
    mem_fx[1] = L_shr_o( mem_fx[1], diff, &Overflow );
    move32();
    mem_fx[2] = L_shr_o( mem_fx[2], diff, &Overflow );
    move32();
    mem_fx[3] = L_shr_o( mem_fx[3], diff, &Overflow );
#endif
    move32();
    move32();
    move32();
    move32();
    mem_fx[4] = L_deposit_l( prescale_current_frame );
    move32();
@@ -449,7 +453,7 @@ void hp20_fx_32_opt(
    W_sum = W_add( W_sum, W_mult0_32_32( b2_fx, x2 ) );        /* b2*x0 */
    W_sum = W_add( W_sum, W_mult0_32_32( mem_fx[0], a2_fx ) ); /* y2*a2 */
    W_sum = W_add( W_sum, W_mult0_32_32( mem_fx[1], a1_fx ) ); /* y1*a1 */
    W_y2 = W_shl( W_sum, add( 1, HP20_FX_COEFF_SCALE ) );
    W_y2 = W_shl( W_sum, 1 + HP20_FX_COEFF_SCALE );
    signal_fx[0] = W_round64_L( W_shl( W_y2, prescale ) );
    move32();

@@ -459,7 +463,7 @@ void hp20_fx_32_opt(
    W_sum = W_add( W_sum, W_mult0_32_32( b2_fx, x1 ) );                  /* b2*x0 */
    W_sum = W_add( W_sum, W_mult0_32_32( mem_fx[1], a2_fx ) );           /* y2*a2 */
    W_sum = W_add( W_sum, W_mult0_32_32( W_round64_L( W_y2 ), a1_fx ) ); /* y1*a1 */
    W_y1 = W_shl( W_sum, add( 1, HP20_FX_COEFF_SCALE ) );
    W_y1 = W_shl( W_sum, 1 + HP20_FX_COEFF_SCALE );
    signal_fx[1] = W_round64_L( W_shl( W_y1, prescale ) );
    move32();

@@ -477,7 +481,7 @@ void hp20_fx_32_opt(
        W_sum = W_add( W_sum, W_mult0_32_32( b2_fx, x0 ) );                  /* b2*x0 */
        W_sum = W_add( W_sum, W_mult0_32_32( W_round64_L( W_y2 ), a2_fx ) ); /* y2*a2 */
        W_sum = W_add( W_sum, W_mult0_32_32( W_round64_L( W_y1 ), a1_fx ) ); /* y1*a1 */
        W_y0 = W_shl( W_sum, add( 1, HP20_FX_COEFF_SCALE ) );
        W_y0 = W_shl( W_sum, 1 + HP20_FX_COEFF_SCALE );

        signal_fx[i] = W_round64_L( W_shl( W_y0, prescale_current_frame ) );
        move32();