From 40d383bb1ed20bcc638e738c8d0fb7a79008b126 Mon Sep 17 00:00:00 2001 From: Brad Midgley Date: Tue, 8 Jan 2008 20:56:17 +0000 Subject: optimizations: use memmove instead of a loop, unroll short loop --- sbc/sbc.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'sbc') diff --git a/sbc/sbc.c b/sbc/sbc.c index cf27b38e..991a5e1a 100644 --- a/sbc/sbc.c +++ b/sbc/sbc.c @@ -776,12 +776,16 @@ static inline void _sbc_analyze_four(const int32_t *in, int32_t *out) static inline void sbc_analyze_four(struct sbc_encoder_state *state, struct sbc_frame *frame, int ch, int blk) { - int i; - /* Input 4 New Audio Samples */ - for (i = 39; i >= 4; i--) - state->X[ch][i] = state->X[ch][i - 4]; - for (i = 3; i >= 0; i--) - state->X[ch][i] = frame->pcm_sample[ch][blk * 4 + (3 - i)]; + int32_t *x = state->X[ch]; + int16_t *pcm = &frame->pcm_sample[ch][blk * 8]; + + /* Input 4 Audio Samples */ + memmove(x + 4, x, 36 * sizeof(*x)); + x[3] = pcm[0]; + x[2] = pcm[1]; + x[1] = pcm[2]; + x[0] = pcm[3]; + _sbc_analyze_four(state->X[ch], frame->sb_sample_f[blk][ch]); } @@ -912,13 +916,20 @@ static inline void sbc_analyze_eight(struct sbc_encoder_state *state, struct sbc_frame *frame, int ch, int blk) { - int i; + int32_t *x = state->X[ch]; + int16_t *pcm = &frame->pcm_sample[ch][blk * 8]; /* Input 8 Audio Samples */ - for (i = 79; i >= 8; i--) - state->X[ch][i] = state->X[ch][i - 8]; - for (i = 7; i >= 0; i--) - state->X[ch][i] = frame->pcm_sample[ch][blk * 8 + (7 - i)]; + memmove(x + 8, x, 72 * sizeof(*x)); + x[7] = pcm[0]; + x[6] = pcm[1]; + x[5] = pcm[2]; + x[4] = pcm[3]; + x[3] = pcm[4]; + x[2] = pcm[5]; + x[1] = pcm[6]; + x[0] = pcm[7]; + _sbc_analyze_eight(state->X[ch], frame->sb_sample_f[blk][ch]); } -- cgit