Loading lib_com/fft_fx.c +88 −136 Original line number Diff line number Diff line Loading @@ -4727,13 +4727,13 @@ static void fft_len16( cmplx t[4]; cmplx y[16]; s[0] = CL_shr( x[0], SCALEFACTOR16 ); // Qx s[0] = x[0]; // Qx move64(); s[1] = CL_shr( x[4], SCALEFACTOR16 ); // Qx s[1] = x[4]; // Qx move64(); s[2] = CL_shr( x[8], SCALEFACTOR16 ); // Qx s[2] = x[8]; // Qx move64(); s[3] = CL_shr( x[12], SCALEFACTOR16 ); // Qx s[3] = x[12]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading @@ -4754,13 +4754,13 @@ static void fft_len16( y[3] = CL_add( t[1], t[3] ); move64(); s[0] = CL_shr( x[1], SCALEFACTOR16 ); // Qx s[0] = x[1]; // Qx move64(); s[1] = CL_shr( x[5], SCALEFACTOR16 ); // Qx s[1] = x[5]; // Qx move64(); s[2] = CL_shr( x[9], SCALEFACTOR16 ); // Qx s[2] = x[9]; // Qx move64(); s[3] = CL_shr( x[13], SCALEFACTOR16 ); // Qx s[3] = x[13]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading @@ -4781,13 +4781,13 @@ static void fft_len16( y[7] = CL_add( t[1], t[3] ); move64(); s[0] = CL_shr( x[2], SCALEFACTOR16 ); // Qx s[0] = x[2]; // Qx move64(); s[1] = CL_shr( x[6], SCALEFACTOR16 ); // Qx s[1] = x[6]; // Qx move64(); s[2] = CL_shr( x[10], SCALEFACTOR16 ); // Qx s[2] = x[10]; // Qx move64(); s[3] = CL_shr( x[14], SCALEFACTOR16 ); // Qx s[3] = x[14]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading @@ -4810,13 +4810,13 @@ static void fft_len16( y[11] = CL_add( t[1], t[3] ); move64(); s[0] = CL_shr( x[3], SCALEFACTOR16 ); // Qx s[0] = x[3]; // Qx move64(); s[1] = CL_shr( x[7], SCALEFACTOR16 ); // Qx s[1] = x[7]; // Qx move64(); s[2] = CL_shr( x[11], SCALEFACTOR16 ); // Qx s[2] = x[11]; // Qx move64(); s[3] = CL_shr( x[15], SCALEFACTOR16 ); // Qx s[3] = x[15]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading Loading @@ -4978,15 +4978,15 @@ static void fft_len20_fx( cmplx tt[4]; cmplx y[20]; xx[0] = CL_shr( x[0], SCALEFACTOR20 ); // Qx xx[0] = x[0]; // Qx move64(); xx[1] = CL_shr( x[16], SCALEFACTOR20 ); // Qx xx[1] = x[16]; // Qx move64(); xx[2] = CL_shr( x[12], SCALEFACTOR20 ); // Qx xx[2] = x[12]; // Qx move64(); xx[3] = CL_shr( x[8], SCALEFACTOR20 ); // Qx xx[3] = x[8]; // Qx move64(); xx[4] = CL_shr( x[4], SCALEFACTOR20 ); // Qx xx[4] = x[4]; // Qx move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -5023,15 +5023,15 @@ static void fft_len20_fx( y[12] = CL_msu_j( s[2], s[3] ); move64(); xx[0] = CL_shr( x[5], SCALEFACTOR20 ); xx[0] = x[5]; move64(); xx[1] = CL_shr( x[1], SCALEFACTOR20 ); xx[1] = x[1]; move64(); xx[2] = CL_shr( x[17], SCALEFACTOR20 ); xx[2] = x[17]; move64(); xx[3] = CL_shr( x[13], SCALEFACTOR20 ); xx[3] = x[13]; move64(); xx[4] = CL_shr( x[9], SCALEFACTOR20 ); xx[4] = x[9]; move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -5068,15 +5068,15 @@ static void fft_len20_fx( y[13] = CL_msu_j( s[2], s[3] ); move64(); xx[0] = CL_shr( x[10], SCALEFACTOR20 ); xx[0] = x[10]; move64(); xx[1] = CL_shr( x[6], SCALEFACTOR20 ); xx[1] = x[6]; move64(); xx[2] = CL_shr( x[2], SCALEFACTOR20 ); xx[2] = x[2]; move64(); xx[3] = CL_shr( x[18], SCALEFACTOR20 ); xx[3] = x[18]; move64(); xx[4] = CL_shr( x[14], SCALEFACTOR20 ); xx[4] = x[14]; move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -5113,15 +5113,15 @@ static void fft_len20_fx( y[14] = CL_msu_j( s[2], s[3] ); move64(); xx[0] = CL_shr( x[15], SCALEFACTOR20 ); xx[0] = x[15]; move64(); xx[1] = CL_shr( x[11], SCALEFACTOR20 ); xx[1] = x[11]; move64(); xx[2] = CL_shr( x[7], SCALEFACTOR20 ); xx[2] = x[7]; move64(); xx[3] = CL_shr( x[3], SCALEFACTOR20 ); xx[3] = x[3]; move64(); xx[4] = CL_shr( x[19], SCALEFACTOR20 ); xx[4] = x[19]; move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -6501,84 +6501,66 @@ static void fft_lenN( cmplx s[8]; cmplx y[8]; test(); test(); test(); test(); IF( EQ_16( dim1, 30 ) || EQ_16( dim1, 20 ) || EQ_16( dim1, 15 ) || EQ_16( dim1, 10 ) || EQ_16( dim1, 5 ) ) { FOR( i = 0; i < dim1; i++ ) { { y[0] = xx[i]; // y[0] = xx[i + 0 * dim1] y[1] = xx[1 * dim1]; move64(); }; IF( i == 0 ) { { y[1] = xx[( i + ( 1 * dim1 ) )]; y[2] = xx[2 * dim1]; move64(); }; { y[2] = xx[( i + ( 2 * dim1 ) )]; y[3] = xx[3 * dim1]; move64(); }; { y[3] = xx[( i + ( 3 * dim1 ) )]; y[4] = xx[4 * dim1]; move64(); }; { y[4] = xx[( i + ( 4 * dim1 ) )]; y[5] = xx[5 * dim1]; move64(); }; { y[5] = xx[( i + ( 5 * dim1 ) )]; y[6] = xx[6 * dim1]; move64(); }; { y[6] = xx[( i + ( 6 * dim1 ) )]; y[7] = xx[7 * dim1]; move64(); }; test(); test(); IF( EQ_16( dim1, 8 ) || EQ_16( dim1, 16 ) || EQ_16( dim1, 32 ) ) { y[7] = xx[( i + ( 7 * dim1 ) )]; FOR( i = 0; i < dim1; i++ ) { { y[0] = xx[i]; move64(); }; } ELSE IF( i > 0 ) { { y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; } Loading Loading @@ -6625,7 +6607,7 @@ static void fft_lenN( s[7] = CL_conjugate( s[7] ); move64(); x[i] = CL_add( s[0], s[1] ); /*x[add(i + i_mult(0 , dim1)] = CL_add( s[0], s[1] )*/ x[i] = CL_add( s[0], s[1] ); move64(); x[( i + ( 1 * dim1 ) )] = CL_add( s[5], s[6] ); move64(); Loading @@ -6645,78 +6627,48 @@ static void fft_lenN( } ELSE { FOR( i = 0; i < dim1; i++ ) { { y[0] = xx[i]; /* y[0] = xx[i + 0 * dim1] */ move64(); }; IF( i == 0 ) { { y[1] = xx[( i + ( 1 * dim1 ) )]; move64(); }; { y[2] = xx[( i + ( 2 * dim1 ) )]; move64(); }; { y[3] = xx[( i + ( 3 * dim1 ) )]; y[0] = xx[i]; move64(); }; { y[4] = xx[( i + ( 4 * dim1 ) )]; move64(); }; { y[5] = xx[( i + ( 5 * dim1 ) )]; move64(); }; { y[6] = xx[( i + ( 6 * dim1 ) )]; move64(); }; { y[7] = xx[( i + ( 7 * dim1 ) )]; move64(); }; } ELSE IF( i > 0 ) { { y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; } Loading Loading @@ -6763,7 +6715,7 @@ static void fft_lenN( s[7] = CL_conjugate( s[7] ); move64(); x[i] = CL_add( s[0], s[1] ); /*x[i + 0 * dim1] = CL_add( s[0], s[1] )*/ x[i] = CL_add( s[0], s[1] ); move64(); x[( i + ( 1 * dim1 ) )] = CL_add( s[5], s[6] ); move64(); Loading Loading @@ -7173,7 +7125,7 @@ void rfft_fx( move32(); x[( length - ( i << 1 ) )] = Mpy_32_16_1( L_add( t1, t3 ), 16384 /*0.5.Q15*/ ); move32(); x[( ( length - ( i << 1 ) ) + 1 )] = Mpy_32_16_1( L_negate( L_add( t2, t4 ) ), 16384 /*0.5.Q15*/ ); x[( ( length - ( i << 1 ) ) + 1 )] = Mpy_32_16_1( L_add( t2, t4 ), -16384 /*0.5.Q15*/ ); move32(); } Loading lib_com/hp50_fx.c +29 −86 Original line number Diff line number Diff line Loading @@ -469,8 +469,9 @@ void hp20_fx_32( { Word16 i; Word32 a1_fx, a2_fx, b1_fx, b2_fx; Word16 Qx0, Qx1, Qx2, Qy1, Qprev_y1, Qy2, Qprev_y2, Qmin; Word64 x0_fx64, x1_fx64, x2_fx64, y0_fx64, y1_fx64, y2_fx64, R1, R2, R3, R4, R5; Word16 Qy1, Qy2, Qmin; Word64 y0_fx64, y1_fx64, y2_fx64; Word32 x0, x1, x2; IF( EQ_32( Fs, 8000 ) ) { Loading Loading @@ -521,20 +522,22 @@ void hp20_fx_32( move32(); move32(); Qprev_y1 = extract_l( mem_fx[4] ); Qprev_y2 = extract_l( mem_fx[5] ); y1_fx64 = W_deposit32_l( mem_fx[0] ); y2_fx64 = W_deposit32_l( mem_fx[1] ); x0_fx64 = W_deposit32_l( mem_fx[2] ); x1_fx64 = W_deposit32_l( mem_fx[3] ); y1_fx64 = W_add( W_deposit32_l( mem_fx[0] ), W_deposit32_h( mem_fx[1] ) ); y2_fx64 = W_add( W_deposit32_l( mem_fx[2] ), W_deposit32_h( mem_fx[3] ) ); x0 = mem_fx[4]; move32(); x1 = mem_fx[5]; move32(); FOR( i = 0; i < lg; i++ ) { x2_fx64 = x1_fx64; move64(); x1_fx64 = x0_fx64; move64(); x0_fx64 = W_deposit32_l( signal_fx[i] ); x2 = x1; move32(); x1 = x0; move32(); x0 = signal_fx[i]; move32(); Qy1 = W_norm( y1_fx64 ); if ( y1_fx64 == 0 ) Loading @@ -542,9 +545,6 @@ void hp20_fx_32( Qy1 = 62; move16(); } Qy1 = sub( Qy1, 34 ); R1 = W_mult0_32_32( W_extract_l( W_shl( y1_fx64, Qy1 ) ), a1_fx ); Qy1 = add( Qy1, Qprev_y1 ); Qy2 = W_norm( y2_fx64 ); if ( y2_fx64 == 0 ) Loading @@ -552,89 +552,32 @@ void hp20_fx_32( Qy2 = 62; move16(); } Qy2 = sub( Qy2, 34 ); R2 = W_mult0_32_32( W_extract_l( W_shl( y2_fx64, Qy2 ) ), a2_fx ); Qy2 = add( Qy2, Qprev_y2 ); Qx0 = W_norm( x0_fx64 ); if ( x0_fx64 == 0 ) { Qx0 = 62; move16(); } Qx0 = sub( Qx0, 34 ); R3 = W_mult0_32_32( W_extract_l( W_shl( x0_fx64, Qx0 ) ), b2_fx ); Qx1 = W_norm( x1_fx64 ); if ( x1_fx64 == 0 ) { Qx1 = 62; move16(); } Qx1 = sub( Qx1, 34 ); R4 = W_mult0_32_32( W_extract_l( W_shl( x1_fx64, Qx1 ) ), b1_fx ); Qx2 = W_norm( x2_fx64 ); if ( x2_fx64 == 0 ) { Qx2 = 62; move16(); } Qx2 = sub( Qx2, 34 ); R5 = W_mult0_32_32( W_extract_l( W_shl( x2_fx64, Qx2 ) ), b2_fx ); Qmin = s_min( Qy1, Qy2 ); y0_fx64 = W_add( W_shr( R1, sub( Qy1, Qmin ) ), W_shr( R2, sub( Qy2, Qmin ) ) ); Qmin = s_min( Qmin, Qx0 ); Qmin = s_min( Qmin, Qx1 ); Qmin = s_min( Qmin, Qx2 ); Qmin = sub( Qmin, 34 ); y0_fx64 = W_add( W_shr( y0_fx64, sub( s_min( Qy1, Qy2 ), Qmin ) ), W_add( W_shr( R3, sub( Qx0, Qmin ) ), W_add( W_shr( R4, sub( Qx1, Qmin ) ), W_shr( R5, sub( Qx2, Qmin ) ) ) ) ); y0_fx64 = W_mac_32_32( W_mult_32_32( W_shl_sat_l( y1_fx64, Qmin ), a1_fx ), W_shl_sat_l( y2_fx64, Qmin ), a2_fx ); // Qmin + Q29 + Q30 + 1 y0_fx64 = W_shr( y0_fx64, 29 ); signal_fx[i] = W_extract_l( W_shr( y0_fx64, Qmin ) ); move32(); IF( signal_fx[i] < 0 ) { signal_fx[i] = L_add( signal_fx[i], 1 ); Word64 temp = W_mac_32_32( W_mac_32_32( W_mult_32_32( x2, b2_fx ), x1, b1_fx ), x0, b2_fx ); // Q30 Word64 y0_fx = W_shr( y0_fx64, add( Qmin, Q30 ) ); // Q30 y0_fx64 = W_add( temp, y0_fx ); // Q30 signal_fx[i] = W_shl_sat_l( y0_fx64, -Q30 ); move32(); } y2_fx64 = y1_fx64; y1_fx64 = y0_fx64; Qprev_y2 = Qprev_y1; Qprev_y1 = Qmin; move64(); y1_fx64 = y0_fx64; move64(); move16(); move16(); } Qy1 = W_norm( y1_fx64 ); test(); IF( y1_fx64 != 0 && LT_16( Qy1, 32 ) ) { y1_fx64 = W_shr( y1_fx64, sub( 32, Qy1 ) ); Qprev_y1 = sub( Qprev_y1, sub( 32, Qy1 ) ); } Qy2 = W_norm( y2_fx64 ); test(); IF( y2_fx64 != 0 && LT_16( Qy2, 32 ) ) { y2_fx64 = W_shr( y2_fx64, sub( 32, Qy2 ) ); Qprev_y2 = sub( Qprev_y2, sub( 32, Qy2 ) ); } mem_fx[0] = W_extract_l( y1_fx64 ); mem_fx[1] = W_extract_l( y2_fx64 ); mem_fx[2] = W_extract_l( x0_fx64 ); mem_fx[3] = W_extract_l( x1_fx64 ); mem_fx[4] = Qprev_y1; mem_fx[5] = Qprev_y2; mem_fx[1] = W_extract_h( y1_fx64 ); mem_fx[2] = W_extract_l( y2_fx64 ); mem_fx[3] = W_extract_h( y2_fx64 ); mem_fx[4] = x0; mem_fx[5] = x1; move32(); move32(); move32(); Loading lib_com/modif_fs.c +29 −29 File changed.Preview size limit exceeded, changes collapsed. Show changes lib_com/mslvq_com_fx.c +34 −26 Original line number Diff line number Diff line Loading @@ -121,51 +121,59 @@ void init_lvq_fx( Word16 no_scales_p[][2] /* o: number of truncations for each LSF subvector at each MSLVQ structure - predictive */ ) { Word16 i, j; Word16 i, j, k; /* safety-net mode */ FOR( i = 0; i < MAX_NO_MODES; i++ ) { j = 0; move16(); test(); WHILE( ( LT_16( j, MAX_NO_SCALES ) ) && ( no_lead_fx[i][j] > 0 ) ) FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; ( j++, k++ ) ) { if ( ( no_lead_fx[i][j] <= 0 ) ) { j++; } no_scales[i][0] = j; move16(); j = MAX_NO_SCALES; } } no_scales[i][0] = k; move16(); test(); WHILE( ( LT_16( j, shl( MAX_NO_SCALES, 1 ) ) ) && ( no_lead_fx[i][j] > 0 ) ) FOR( k = 0; j < MAX_NO_SCALES << 1; ( j++, k++ ) ) { if ( no_lead_fx[i][j] <= 0 ) { j++; j = MAX_NO_SCALES << 1; } no_scales[i][1] = sub( j, MAX_NO_SCALES ); } no_scales[i][1] = k; move16(); } /* predictive mode */ FOR( i = 0; i < MAX_NO_MODES_p; i++ ) { j = 0; move16(); WHILE( ( LT_16( j, MAX_NO_SCALES ) ) && ( no_lead_p_fx[i][j] > 0 ) ) FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; ( j++, k++ ) ) { if ( ( no_lead_p_fx[i][j] <= 0 ) ) { test(); j++; } no_scales_p[i][0] = j; move16(); j = MAX_NO_SCALES; } } no_scales_p[i][0] = k; move16(); WHILE( ( LT_16( j, shl( MAX_NO_SCALES, 1 ) ) ) && ( no_lead_p_fx[i][j] > 0 ) ) FOR( k = 0; j < MAX_NO_SCALES << 1; ( j++, k++ ) ) { test(); j++; if ( ( no_lead_p_fx[i][j] <= 0 ) ) { j = MAX_NO_SCALES << 1; } } no_scales_p[i][1] = sub( j, MAX_NO_SCALES ); no_scales_p[i][1] = k; move16(); } /* index offsets for each truncation */ init_offset_fx( offset_scale1, offset_scale2, offset_scale1_p, offset_scale2_p, no_scales, no_scales_p ); } Loading lib_com/scale_mem_fx.c +9 −0 Original line number Diff line number Diff line Loading @@ -307,8 +307,13 @@ void scale_sig32( /* saturation can occur here */ x[i] = L_shl( x[i], exp0 ); move32(); if ( 0 == exp0 ) { i = lg; } } } void scale_sig32_r( Word32 x[], /* i/o: signal to scale Qx */ const Word16 lg, /* i : size of x[] Q0 */ Loading @@ -322,6 +327,10 @@ void scale_sig32_r( /* saturation can occur here */ x[i] = L_shl_r( x[i], exp0 ); move32(); if ( 0 == exp0 ) { i = lg; } } } Loading Loading
lib_com/fft_fx.c +88 −136 Original line number Diff line number Diff line Loading @@ -4727,13 +4727,13 @@ static void fft_len16( cmplx t[4]; cmplx y[16]; s[0] = CL_shr( x[0], SCALEFACTOR16 ); // Qx s[0] = x[0]; // Qx move64(); s[1] = CL_shr( x[4], SCALEFACTOR16 ); // Qx s[1] = x[4]; // Qx move64(); s[2] = CL_shr( x[8], SCALEFACTOR16 ); // Qx s[2] = x[8]; // Qx move64(); s[3] = CL_shr( x[12], SCALEFACTOR16 ); // Qx s[3] = x[12]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading @@ -4754,13 +4754,13 @@ static void fft_len16( y[3] = CL_add( t[1], t[3] ); move64(); s[0] = CL_shr( x[1], SCALEFACTOR16 ); // Qx s[0] = x[1]; // Qx move64(); s[1] = CL_shr( x[5], SCALEFACTOR16 ); // Qx s[1] = x[5]; // Qx move64(); s[2] = CL_shr( x[9], SCALEFACTOR16 ); // Qx s[2] = x[9]; // Qx move64(); s[3] = CL_shr( x[13], SCALEFACTOR16 ); // Qx s[3] = x[13]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading @@ -4781,13 +4781,13 @@ static void fft_len16( y[7] = CL_add( t[1], t[3] ); move64(); s[0] = CL_shr( x[2], SCALEFACTOR16 ); // Qx s[0] = x[2]; // Qx move64(); s[1] = CL_shr( x[6], SCALEFACTOR16 ); // Qx s[1] = x[6]; // Qx move64(); s[2] = CL_shr( x[10], SCALEFACTOR16 ); // Qx s[2] = x[10]; // Qx move64(); s[3] = CL_shr( x[14], SCALEFACTOR16 ); // Qx s[3] = x[14]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading @@ -4810,13 +4810,13 @@ static void fft_len16( y[11] = CL_add( t[1], t[3] ); move64(); s[0] = CL_shr( x[3], SCALEFACTOR16 ); // Qx s[0] = x[3]; // Qx move64(); s[1] = CL_shr( x[7], SCALEFACTOR16 ); // Qx s[1] = x[7]; // Qx move64(); s[2] = CL_shr( x[11], SCALEFACTOR16 ); // Qx s[2] = x[11]; // Qx move64(); s[3] = CL_shr( x[15], SCALEFACTOR16 ); // Qx s[3] = x[15]; // Qx move64(); t[0] = CL_add( s[0], s[2] ); Loading Loading @@ -4978,15 +4978,15 @@ static void fft_len20_fx( cmplx tt[4]; cmplx y[20]; xx[0] = CL_shr( x[0], SCALEFACTOR20 ); // Qx xx[0] = x[0]; // Qx move64(); xx[1] = CL_shr( x[16], SCALEFACTOR20 ); // Qx xx[1] = x[16]; // Qx move64(); xx[2] = CL_shr( x[12], SCALEFACTOR20 ); // Qx xx[2] = x[12]; // Qx move64(); xx[3] = CL_shr( x[8], SCALEFACTOR20 ); // Qx xx[3] = x[8]; // Qx move64(); xx[4] = CL_shr( x[4], SCALEFACTOR20 ); // Qx xx[4] = x[4]; // Qx move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -5023,15 +5023,15 @@ static void fft_len20_fx( y[12] = CL_msu_j( s[2], s[3] ); move64(); xx[0] = CL_shr( x[5], SCALEFACTOR20 ); xx[0] = x[5]; move64(); xx[1] = CL_shr( x[1], SCALEFACTOR20 ); xx[1] = x[1]; move64(); xx[2] = CL_shr( x[17], SCALEFACTOR20 ); xx[2] = x[17]; move64(); xx[3] = CL_shr( x[13], SCALEFACTOR20 ); xx[3] = x[13]; move64(); xx[4] = CL_shr( x[9], SCALEFACTOR20 ); xx[4] = x[9]; move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -5068,15 +5068,15 @@ static void fft_len20_fx( y[13] = CL_msu_j( s[2], s[3] ); move64(); xx[0] = CL_shr( x[10], SCALEFACTOR20 ); xx[0] = x[10]; move64(); xx[1] = CL_shr( x[6], SCALEFACTOR20 ); xx[1] = x[6]; move64(); xx[2] = CL_shr( x[2], SCALEFACTOR20 ); xx[2] = x[2]; move64(); xx[3] = CL_shr( x[18], SCALEFACTOR20 ); xx[3] = x[18]; move64(); xx[4] = CL_shr( x[14], SCALEFACTOR20 ); xx[4] = x[14]; move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -5113,15 +5113,15 @@ static void fft_len20_fx( y[14] = CL_msu_j( s[2], s[3] ); move64(); xx[0] = CL_shr( x[15], SCALEFACTOR20 ); xx[0] = x[15]; move64(); xx[1] = CL_shr( x[11], SCALEFACTOR20 ); xx[1] = x[11]; move64(); xx[2] = CL_shr( x[7], SCALEFACTOR20 ); xx[2] = x[7]; move64(); xx[3] = CL_shr( x[3], SCALEFACTOR20 ); xx[3] = x[3]; move64(); xx[4] = CL_shr( x[19], SCALEFACTOR20 ); xx[4] = x[19]; move64(); s[0] = CL_add( xx[1], xx[4] ); Loading Loading @@ -6501,84 +6501,66 @@ static void fft_lenN( cmplx s[8]; cmplx y[8]; test(); test(); test(); test(); IF( EQ_16( dim1, 30 ) || EQ_16( dim1, 20 ) || EQ_16( dim1, 15 ) || EQ_16( dim1, 10 ) || EQ_16( dim1, 5 ) ) { FOR( i = 0; i < dim1; i++ ) { { y[0] = xx[i]; // y[0] = xx[i + 0 * dim1] y[1] = xx[1 * dim1]; move64(); }; IF( i == 0 ) { { y[1] = xx[( i + ( 1 * dim1 ) )]; y[2] = xx[2 * dim1]; move64(); }; { y[2] = xx[( i + ( 2 * dim1 ) )]; y[3] = xx[3 * dim1]; move64(); }; { y[3] = xx[( i + ( 3 * dim1 ) )]; y[4] = xx[4 * dim1]; move64(); }; { y[4] = xx[( i + ( 4 * dim1 ) )]; y[5] = xx[5 * dim1]; move64(); }; { y[5] = xx[( i + ( 5 * dim1 ) )]; y[6] = xx[6 * dim1]; move64(); }; { y[6] = xx[( i + ( 6 * dim1 ) )]; y[7] = xx[7 * dim1]; move64(); }; test(); test(); IF( EQ_16( dim1, 8 ) || EQ_16( dim1, 16 ) || EQ_16( dim1, 32 ) ) { y[7] = xx[( i + ( 7 * dim1 ) )]; FOR( i = 0; i < dim1; i++ ) { { y[0] = xx[i]; move64(); }; } ELSE IF( i > 0 ) { { y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; } Loading Loading @@ -6625,7 +6607,7 @@ static void fft_lenN( s[7] = CL_conjugate( s[7] ); move64(); x[i] = CL_add( s[0], s[1] ); /*x[add(i + i_mult(0 , dim1)] = CL_add( s[0], s[1] )*/ x[i] = CL_add( s[0], s[1] ); move64(); x[( i + ( 1 * dim1 ) )] = CL_add( s[5], s[6] ); move64(); Loading @@ -6645,78 +6627,48 @@ static void fft_lenN( } ELSE { FOR( i = 0; i < dim1; i++ ) { { y[0] = xx[i]; /* y[0] = xx[i + 0 * dim1] */ move64(); }; IF( i == 0 ) { { y[1] = xx[( i + ( 1 * dim1 ) )]; move64(); }; { y[2] = xx[( i + ( 2 * dim1 ) )]; move64(); }; { y[3] = xx[( i + ( 3 * dim1 ) )]; y[0] = xx[i]; move64(); }; { y[4] = xx[( i + ( 4 * dim1 ) )]; move64(); }; { y[5] = xx[( i + ( 5 * dim1 ) )]; move64(); }; { y[6] = xx[( i + ( 6 * dim1 ) )]; move64(); }; { y[7] = xx[( i + ( 7 * dim1 ) )]; move64(); }; } ELSE IF( i > 0 ) { { y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 1 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[1] = CL_mac_j( CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 1 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 1 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 2 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[2] = CL_mac_j( CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 2 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 2 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 3 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[3] = CL_mac_j( CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 3 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 3 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 4 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[4] = CL_mac_j( CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 4 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 4 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 5 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[5] = CL_mac_j( CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 5 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 5 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 6 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[6] = CL_mac_j( CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 6 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 6 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; { y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( sc * 7 ) * dim1 ) ) + 1 ) - Woff )] ) ); // Qx y[7] = CL_mac_j( CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) - Woff )] ), CL_scale( xx[( i + ( 7 * dim1 ) )], W[( ( ( ( sc * i ) + ( ( ( sc * 7 ) * dim1 ) << 1 ) ) + 1 ) - Woff )] ) ); // Qx move64(); }; } Loading Loading @@ -6763,7 +6715,7 @@ static void fft_lenN( s[7] = CL_conjugate( s[7] ); move64(); x[i] = CL_add( s[0], s[1] ); /*x[i + 0 * dim1] = CL_add( s[0], s[1] )*/ x[i] = CL_add( s[0], s[1] ); move64(); x[( i + ( 1 * dim1 ) )] = CL_add( s[5], s[6] ); move64(); Loading Loading @@ -7173,7 +7125,7 @@ void rfft_fx( move32(); x[( length - ( i << 1 ) )] = Mpy_32_16_1( L_add( t1, t3 ), 16384 /*0.5.Q15*/ ); move32(); x[( ( length - ( i << 1 ) ) + 1 )] = Mpy_32_16_1( L_negate( L_add( t2, t4 ) ), 16384 /*0.5.Q15*/ ); x[( ( length - ( i << 1 ) ) + 1 )] = Mpy_32_16_1( L_add( t2, t4 ), -16384 /*0.5.Q15*/ ); move32(); } Loading
lib_com/hp50_fx.c +29 −86 Original line number Diff line number Diff line Loading @@ -469,8 +469,9 @@ void hp20_fx_32( { Word16 i; Word32 a1_fx, a2_fx, b1_fx, b2_fx; Word16 Qx0, Qx1, Qx2, Qy1, Qprev_y1, Qy2, Qprev_y2, Qmin; Word64 x0_fx64, x1_fx64, x2_fx64, y0_fx64, y1_fx64, y2_fx64, R1, R2, R3, R4, R5; Word16 Qy1, Qy2, Qmin; Word64 y0_fx64, y1_fx64, y2_fx64; Word32 x0, x1, x2; IF( EQ_32( Fs, 8000 ) ) { Loading Loading @@ -521,20 +522,22 @@ void hp20_fx_32( move32(); move32(); Qprev_y1 = extract_l( mem_fx[4] ); Qprev_y2 = extract_l( mem_fx[5] ); y1_fx64 = W_deposit32_l( mem_fx[0] ); y2_fx64 = W_deposit32_l( mem_fx[1] ); x0_fx64 = W_deposit32_l( mem_fx[2] ); x1_fx64 = W_deposit32_l( mem_fx[3] ); y1_fx64 = W_add( W_deposit32_l( mem_fx[0] ), W_deposit32_h( mem_fx[1] ) ); y2_fx64 = W_add( W_deposit32_l( mem_fx[2] ), W_deposit32_h( mem_fx[3] ) ); x0 = mem_fx[4]; move32(); x1 = mem_fx[5]; move32(); FOR( i = 0; i < lg; i++ ) { x2_fx64 = x1_fx64; move64(); x1_fx64 = x0_fx64; move64(); x0_fx64 = W_deposit32_l( signal_fx[i] ); x2 = x1; move32(); x1 = x0; move32(); x0 = signal_fx[i]; move32(); Qy1 = W_norm( y1_fx64 ); if ( y1_fx64 == 0 ) Loading @@ -542,9 +545,6 @@ void hp20_fx_32( Qy1 = 62; move16(); } Qy1 = sub( Qy1, 34 ); R1 = W_mult0_32_32( W_extract_l( W_shl( y1_fx64, Qy1 ) ), a1_fx ); Qy1 = add( Qy1, Qprev_y1 ); Qy2 = W_norm( y2_fx64 ); if ( y2_fx64 == 0 ) Loading @@ -552,89 +552,32 @@ void hp20_fx_32( Qy2 = 62; move16(); } Qy2 = sub( Qy2, 34 ); R2 = W_mult0_32_32( W_extract_l( W_shl( y2_fx64, Qy2 ) ), a2_fx ); Qy2 = add( Qy2, Qprev_y2 ); Qx0 = W_norm( x0_fx64 ); if ( x0_fx64 == 0 ) { Qx0 = 62; move16(); } Qx0 = sub( Qx0, 34 ); R3 = W_mult0_32_32( W_extract_l( W_shl( x0_fx64, Qx0 ) ), b2_fx ); Qx1 = W_norm( x1_fx64 ); if ( x1_fx64 == 0 ) { Qx1 = 62; move16(); } Qx1 = sub( Qx1, 34 ); R4 = W_mult0_32_32( W_extract_l( W_shl( x1_fx64, Qx1 ) ), b1_fx ); Qx2 = W_norm( x2_fx64 ); if ( x2_fx64 == 0 ) { Qx2 = 62; move16(); } Qx2 = sub( Qx2, 34 ); R5 = W_mult0_32_32( W_extract_l( W_shl( x2_fx64, Qx2 ) ), b2_fx ); Qmin = s_min( Qy1, Qy2 ); y0_fx64 = W_add( W_shr( R1, sub( Qy1, Qmin ) ), W_shr( R2, sub( Qy2, Qmin ) ) ); Qmin = s_min( Qmin, Qx0 ); Qmin = s_min( Qmin, Qx1 ); Qmin = s_min( Qmin, Qx2 ); Qmin = sub( Qmin, 34 ); y0_fx64 = W_add( W_shr( y0_fx64, sub( s_min( Qy1, Qy2 ), Qmin ) ), W_add( W_shr( R3, sub( Qx0, Qmin ) ), W_add( W_shr( R4, sub( Qx1, Qmin ) ), W_shr( R5, sub( Qx2, Qmin ) ) ) ) ); y0_fx64 = W_mac_32_32( W_mult_32_32( W_shl_sat_l( y1_fx64, Qmin ), a1_fx ), W_shl_sat_l( y2_fx64, Qmin ), a2_fx ); // Qmin + Q29 + Q30 + 1 y0_fx64 = W_shr( y0_fx64, 29 ); signal_fx[i] = W_extract_l( W_shr( y0_fx64, Qmin ) ); move32(); IF( signal_fx[i] < 0 ) { signal_fx[i] = L_add( signal_fx[i], 1 ); Word64 temp = W_mac_32_32( W_mac_32_32( W_mult_32_32( x2, b2_fx ), x1, b1_fx ), x0, b2_fx ); // Q30 Word64 y0_fx = W_shr( y0_fx64, add( Qmin, Q30 ) ); // Q30 y0_fx64 = W_add( temp, y0_fx ); // Q30 signal_fx[i] = W_shl_sat_l( y0_fx64, -Q30 ); move32(); } y2_fx64 = y1_fx64; y1_fx64 = y0_fx64; Qprev_y2 = Qprev_y1; Qprev_y1 = Qmin; move64(); y1_fx64 = y0_fx64; move64(); move16(); move16(); } Qy1 = W_norm( y1_fx64 ); test(); IF( y1_fx64 != 0 && LT_16( Qy1, 32 ) ) { y1_fx64 = W_shr( y1_fx64, sub( 32, Qy1 ) ); Qprev_y1 = sub( Qprev_y1, sub( 32, Qy1 ) ); } Qy2 = W_norm( y2_fx64 ); test(); IF( y2_fx64 != 0 && LT_16( Qy2, 32 ) ) { y2_fx64 = W_shr( y2_fx64, sub( 32, Qy2 ) ); Qprev_y2 = sub( Qprev_y2, sub( 32, Qy2 ) ); } mem_fx[0] = W_extract_l( y1_fx64 ); mem_fx[1] = W_extract_l( y2_fx64 ); mem_fx[2] = W_extract_l( x0_fx64 ); mem_fx[3] = W_extract_l( x1_fx64 ); mem_fx[4] = Qprev_y1; mem_fx[5] = Qprev_y2; mem_fx[1] = W_extract_h( y1_fx64 ); mem_fx[2] = W_extract_l( y2_fx64 ); mem_fx[3] = W_extract_h( y2_fx64 ); mem_fx[4] = x0; mem_fx[5] = x1; move32(); move32(); move32(); Loading
lib_com/mslvq_com_fx.c +34 −26 Original line number Diff line number Diff line Loading @@ -121,51 +121,59 @@ void init_lvq_fx( Word16 no_scales_p[][2] /* o: number of truncations for each LSF subvector at each MSLVQ structure - predictive */ ) { Word16 i, j; Word16 i, j, k; /* safety-net mode */ FOR( i = 0; i < MAX_NO_MODES; i++ ) { j = 0; move16(); test(); WHILE( ( LT_16( j, MAX_NO_SCALES ) ) && ( no_lead_fx[i][j] > 0 ) ) FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; ( j++, k++ ) ) { if ( ( no_lead_fx[i][j] <= 0 ) ) { j++; } no_scales[i][0] = j; move16(); j = MAX_NO_SCALES; } } no_scales[i][0] = k; move16(); test(); WHILE( ( LT_16( j, shl( MAX_NO_SCALES, 1 ) ) ) && ( no_lead_fx[i][j] > 0 ) ) FOR( k = 0; j < MAX_NO_SCALES << 1; ( j++, k++ ) ) { if ( no_lead_fx[i][j] <= 0 ) { j++; j = MAX_NO_SCALES << 1; } no_scales[i][1] = sub( j, MAX_NO_SCALES ); } no_scales[i][1] = k; move16(); } /* predictive mode */ FOR( i = 0; i < MAX_NO_MODES_p; i++ ) { j = 0; move16(); WHILE( ( LT_16( j, MAX_NO_SCALES ) ) && ( no_lead_p_fx[i][j] > 0 ) ) FOR( ( j = 0, k = 0 ); j < MAX_NO_SCALES; ( j++, k++ ) ) { if ( ( no_lead_p_fx[i][j] <= 0 ) ) { test(); j++; } no_scales_p[i][0] = j; move16(); j = MAX_NO_SCALES; } } no_scales_p[i][0] = k; move16(); WHILE( ( LT_16( j, shl( MAX_NO_SCALES, 1 ) ) ) && ( no_lead_p_fx[i][j] > 0 ) ) FOR( k = 0; j < MAX_NO_SCALES << 1; ( j++, k++ ) ) { test(); j++; if ( ( no_lead_p_fx[i][j] <= 0 ) ) { j = MAX_NO_SCALES << 1; } } no_scales_p[i][1] = sub( j, MAX_NO_SCALES ); no_scales_p[i][1] = k; move16(); } /* index offsets for each truncation */ init_offset_fx( offset_scale1, offset_scale2, offset_scale1_p, offset_scale2_p, no_scales, no_scales_p ); } Loading
lib_com/scale_mem_fx.c +9 −0 Original line number Diff line number Diff line Loading @@ -307,8 +307,13 @@ void scale_sig32( /* saturation can occur here */ x[i] = L_shl( x[i], exp0 ); move32(); if ( 0 == exp0 ) { i = lg; } } } void scale_sig32_r( Word32 x[], /* i/o: signal to scale Qx */ const Word16 lg, /* i : size of x[] Q0 */ Loading @@ -322,6 +327,10 @@ void scale_sig32_r( /* saturation can occur here */ x[i] = L_shl_r( x[i], exp0 ); move32(); if ( 0 == exp0 ) { i = lg; } } } Loading