From 3f4e0cf25b525f8acec950547ff7570db5c134a5 Mon Sep 17 00:00:00 2001 From: Andree Buschmann Date: Fri, 12 Nov 2010 07:04:07 +0000 Subject: Set alignment for major data arrays in the mpc codec. This avoids performance regressions on S5L870x CPUs when changing code and allows further improvements. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28561 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/libmusepack/decoder.h | 4 ++-- apps/codecs/libmusepack/mpc_decoder.c | 12 +++++++++--- apps/codecs/libmusepack/synth_filter.c | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) (limited to 'apps/codecs/libmusepack') diff --git a/apps/codecs/libmusepack/decoder.h b/apps/codecs/libmusepack/decoder.h index b3d24cf4ea..7e985407c5 100644 --- a/apps/codecs/libmusepack/decoder.h +++ b/apps/codecs/libmusepack/decoder.h @@ -87,8 +87,8 @@ struct mpc_decoder_t { mpc_uint8_t SCF_shift[256]; #endif - MPC_SAMPLE_FORMAT V_L[MPC_V_MEM + 960]; - MPC_SAMPLE_FORMAT V_R[MPC_V_MEM + 960]; + MPC_SAMPLE_FORMAT *V_L; + MPC_SAMPLE_FORMAT *V_R; MPC_SAMPLE_FORMAT *Y_L; MPC_SAMPLE_FORMAT *Y_R; MPC_SAMPLE_FORMAT SCF[256]; ///< holds adapted scalefactors (for clipping prevention) diff --git a/apps/codecs/libmusepack/mpc_decoder.c b/apps/codecs/libmusepack/mpc_decoder.c index 2ac855b946..c1e1d0e0d2 100644 --- a/apps/codecs/libmusepack/mpc_decoder.c +++ b/apps/codecs/libmusepack/mpc_decoder.c @@ -62,8 +62,10 @@ extern const mpc_can_data mpc_can_Q9up; //Decoder globals (g_Y_L and g_Y_R do not fit into iram for all targets) static mpc_decoder g_mpc_decoder IBSS_ATTR; -static MPC_SAMPLE_FORMAT g_Y_L[MPC_FRAME_LENGTH] IBSS_ATTR_MPC_LARGE_IRAM; -static MPC_SAMPLE_FORMAT g_Y_R[MPC_FRAME_LENGTH] IBSS_ATTR_MPC_LARGE_IRAM; +static MPC_SAMPLE_FORMAT g_V_L[MPC_V_MEM + 960 ] IBSS_ATTR __attribute__((aligned(16))); +static MPC_SAMPLE_FORMAT g_Y_L[MPC_FRAME_LENGTH] IBSS_ATTR_MPC_LARGE_IRAM __attribute__((aligned(16))); +static MPC_SAMPLE_FORMAT g_V_R[MPC_V_MEM + 960 ] IBSS_ATTR __attribute__((aligned(16))); +static MPC_SAMPLE_FORMAT g_Y_R[MPC_FRAME_LENGTH] IBSS_ATTR_MPC_LARGE_IRAM __attribute__((aligned(16))); //SV7 globals (decoding results for bundled quantizers (3- and 5-step)) static const mpc_int32_t g_sv7_idx30[] ICONST_ATTR = @@ -236,9 +238,13 @@ static void mpc_decoder_setup(mpc_decoder *d) d->__r1 = 1; d->__r2 = 1; + d->V_L = g_V_L; + d->V_R = g_V_R; d->Y_L = g_Y_L; d->Y_R = g_Y_R; - + + memset(d->V_L, 0, sizeof(g_V_L)); + memset(d->V_R, 0, sizeof(g_V_R)); memset(d->Y_L, 0, sizeof(g_Y_L)); memset(d->Y_R, 0, sizeof(g_Y_R)); diff --git a/apps/codecs/libmusepack/synth_filter.c b/apps/codecs/libmusepack/synth_filter.c index 94c57eb213..e173702a77 100644 --- a/apps/codecs/libmusepack/synth_filter.c +++ b/apps/codecs/libmusepack/synth_filter.c @@ -66,9 +66,9 @@ // by the correct amount to have proper scaled output #define D(value) MAKE_MPC_SAMPLE((double)value*(double)(0x1000)) #endif - + // Di_opt coefficients are +/- 2^17 (pre-shifted by <<16) -static const MPC_SAMPLE_FORMAT Di_opt [512] ICONST_ATTR = { +static const MPC_SAMPLE_FORMAT Di_opt [512] ICONST_ATTR __attribute__((aligned(16))) = { /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ /* 0 */ D( 0), -D( 29), D(213), -D( 459), D(2037), -D(5153), D( 6574), -D(37489), D(75038), D(37489), D(6574), D(5153), D(2037), D(459), D(213), D(29), /* 1 */ -D( 1), -D( 31), D(218), -D( 519), D(2000), -D(5517), D( 5959), -D(39336), D(74992), D(35640), D(7134), D(4788), D(2063), D(401), D(208), D(26), -- cgit v1.2.3