Put two hot silk arrays on real stack (iram)

Speeds up decoding of 16kbps test file by 16.7MHz on H300.

Change-Id: I39c90e3b423ae8e2ee5c2b88c5dcec8d48807f77
This commit is contained in:
Nils Wallménius 2013-08-30 23:27:12 +02:00
parent a602ea3d3d
commit b592a7a8a5
2 changed files with 10 additions and 6 deletions

View file

@ -49,7 +49,7 @@ void silk_decode_core(
opus_int32 LTP_pred_Q13, LPC_pred_Q10, Gain_Q10, inv_gain_Q31, gain_adj_Q16, rand_seed, offset_Q10;
opus_int32 *pred_lag_ptr, *pexc_Q14, *pres_Q14;
VARDECL( opus_int32, res_Q14 );
VARDECL( opus_int32, sLPC_Q14 );
/* VARDECL( opus_int32, sLPC_Q14 ); */
SAVE_STACK;
silk_assert( psDec->prev_gain_Q16 != 0 );
@ -57,7 +57,8 @@ void silk_decode_core(
ALLOC( sLTP, psDec->ltp_mem_length, opus_int16 );
ALLOC( sLTP_Q15, psDec->ltp_mem_length + psDec->frame_length, opus_int32 );
ALLOC( res_Q14, psDec->subfr_length, opus_int32 );
ALLOC( sLPC_Q14, psDec->subfr_length + MAX_LPC_ORDER, opus_int32 );
/* ALLOC( sLPC_Q14, psDec->subfr_length + MAX_LPC_ORDER, opus_int32 ); */
opus_int32 sLPC_Q14[psDec->subfr_length + MAX_LPC_ORDER]; /* worst case is 80 + 16 */
offset_Q10 = silk_Quantization_Offsets_Q10[ psDec->indices.signalType >> 1 ][ psDec->indices.quantOffsetType ];

View file

@ -72,10 +72,13 @@ void silk_resampler_private_IIR_FIR(
silk_resampler_state_struct *S = (silk_resampler_state_struct *)SS;
opus_int32 nSamplesIn;
opus_int32 max_index_Q16, index_increment_Q16;
VARDECL( opus_int16, buf );
SAVE_STACK;
/* VARDECL( opus_int16, buf );
SAVE_STACK; */
ALLOC( buf, 2 * S->batchSize + RESAMPLER_ORDER_FIR_12, opus_int16 );
/* ALLOC( buf, 2 * S->batchSize + RESAMPLER_ORDER_FIR_12, opus_int16 ); */
/* worst case = 2*16*10+8 = 328 * 2 = 656bytes */
opus_int16 buf[2 * S->batchSize + RESAMPLER_ORDER_FIR_12];
/* Copy buffered samples to start of buffer */
silk_memcpy( buf, S->sFIR.i16, RESAMPLER_ORDER_FIR_12 * sizeof( opus_int16 ) );
@ -103,5 +106,5 @@ void silk_resampler_private_IIR_FIR(
/* Copy last part of filtered signal to the state for the next call */
silk_memcpy( S->sFIR.i16, &buf[ nSamplesIn << 1 ], RESAMPLER_ORDER_FIR_12 * sizeof( opus_int16 ) );
RESTORE_STACK;
/* RESTORE_STACK; */
}