Mercurial > libavcodec.hg
comparison mpegaudiodec.c @ 11709:6f9b4c452130 libavcodec
Optimize decoding high freqs.
this is 10-20cpu cycles faster on duron (whole is about 50-60 cpu cylses)
I wonder why gcc isnt doing this on its own ...
author | michael |
---|---|
date | Tue, 11 May 2010 21:10:55 +0000 |
parents | 8d2e66ba12cf |
children | 8e3a3bc4fb24 |
comparison
equal
deleted
inserted
replaced
11708:8d2e66ba12cf | 11709:6f9b4c452130 |
---|---|
1533 g->sb_hybrid[s_index+1]= | 1533 g->sb_hybrid[s_index+1]= |
1534 g->sb_hybrid[s_index+2]= | 1534 g->sb_hybrid[s_index+2]= |
1535 g->sb_hybrid[s_index+3]= 0; | 1535 g->sb_hybrid[s_index+3]= 0; |
1536 while(code){ | 1536 while(code){ |
1537 static const int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0}; | 1537 static const int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0}; |
1538 INTFLOAT v; | 1538 int v; |
1539 int pos= s_index+idxtab[code]; | 1539 int pos= s_index+idxtab[code]; |
1540 code ^= 8>>idxtab[code]; | 1540 code ^= 8>>idxtab[code]; |
1541 v = RENAME(exp_table)[ exponents[pos] ]; | 1541 /* Following is a optimized code for |
1542 // v = RENAME(exp_table)[ (exponents[pos]&3) ] >> FFMIN(0 - (exponents[pos]>>2), 31); | 1542 INTFLOAT v = RENAME(exp_table)[ exponents[pos] ]; |
1543 if(get_bits1(&s->gb)) //FIXME try to flip the sign bit in int32_t, same above | 1543 if(get_bits1(&s->gb)) |
1544 v = -v; | 1544 v = -v; |
1545 g->sb_hybrid[pos] = v; | 1545 g->sb_hybrid[pos] = v; |
1546 */ | |
1547 #if CONFIG_FLOAT | |
1548 v = AV_RN32A(RENAME(exp_table)+exponents[pos]) ^ (get_bits1(&s->gb)<<31); | |
1549 AV_WN32A(g->sb_hybrid+pos, v); | |
1550 #else | |
1551 v= -get_bits1(&s->gb); | |
1552 g->sb_hybrid[pos] = (RENAME(exp_table)[ exponents[pos] ] ^ v) - v; | |
1553 #endif | |
1546 } | 1554 } |
1547 s_index+=4; | 1555 s_index+=4; |
1548 } | 1556 } |
1549 /* skip extension bits */ | 1557 /* skip extension bits */ |
1550 bits_left = end_pos2 - get_bits_count(&s->gb); | 1558 bits_left = end_pos2 - get_bits_count(&s->gb); |