summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2009-12-13 15:00:20 +0000
committerNils Wallménius <nils@rockbox.org>2009-12-13 15:00:20 +0000
commitb2a27b42803ae4ba64f35d95bb289c773dbcfbef (patch)
tree9d990e294f9ce3b29e67098eea4ec39d3bd96a53
parent66776bc47922e039f43e2dd5dee15d05745e99c6 (diff)
downloadrockbox-b2a27b42803ae4ba64f35d95bb289c773dbcfbef.tar.gz
rockbox-b2a27b42803ae4ba64f35d95bb289c773dbcfbef.zip
Improved bitrev12, using a larger LUT to save one lookup, speeds up vorbis about 2% on beast, about 0.5% on h300
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23973 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/lib/mdct2.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/apps/codecs/lib/mdct2.c b/apps/codecs/lib/mdct2.c
index 5382a5b5e0..ba8b5ca6be 100644
--- a/apps/codecs/lib/mdct2.c
+++ b/apps/codecs/lib/mdct2.c
@@ -243,12 +243,16 @@ static inline void mdct_butterflies(int32_t *x,int points,int shift) {
243 mdct_butterfly_32(x+j); 243 mdct_butterfly_32(x+j);
244} 244}
245 245
246 246static const unsigned char bitrev[] ICONST_ATTR =
247static const unsigned char bitrev[16] ICONST_ATTR = 247{
248 {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15}; 248 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60,
249 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62,
250 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61,
251 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63
252};
249 253
250static inline int bitrev12(int x){ 254static inline int bitrev12(int x){
251 return bitrev[x>>8]|(bitrev[(x&0x0f0)>>4]<<4)|(((int)bitrev[x&0x00f])<<8); 255 return bitrev[x>>6]|((bitrev[x&0x03f])<<6);
252} 256}
253 257
254static inline void mdct_bitreverse(int32_t *x,int n,int step,int shift) { 258static inline void mdct_bitreverse(int32_t *x,int n,int step,int shift) {