Loading lib_com/hp50_fx.c +18 −14 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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(); Loading Loading
lib_com/hp50_fx.c +18 −14 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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(); Loading