Eric, I finally got around to your patches after Miroslav's. the first one (the memcpy/memset replacement) I had problems with, one because the buffers can overlap so I had to use memmove (is this usually assembly in libc too?) and also the endpoints looked wrong, for my full patch see below. speedup for me was around 3%
the second patch got another 2%. a question though, why do you have: + *(++vals); in two places instead of just ++vals; ? Josh Index: bitbuffer.c =================================================================== RCS file: /cvsroot/flac/flac/src/libFLAC/bitbuffer.c,v retrieving revision 1.55 diff -u -r1.55 bitbuffer.c --- bitbuffer.c 25 Jan 2005 02:37:08 -0000 1.55 +++ bitbuffer.c 25 Jan 2005 02:39:52 -0000 @@ -228,11 +228,27 @@ /* first shift the unconsumed buffer data toward the front as much as possible */ if(bb->total_consumed_bits >= FLAC__BITS_PER_BLURB) { - unsigned l = 0, r = bb->consumed_blurbs, r_end = bb->blurbs + (bb->bits? 1:0); +#if FLAC__BITS_PER_BLURB == 8 + /* + * memset and memcpy are usually implemented in assembly language + * by the system libc, and they can be much faster + */ + const unsigned r_end = bb->blurbs + (bb->bits? 1:0); + const unsigned r = bb->consumed_blurbs, l = r_end - r; + memmove(&bb->buffer[0], &bb->buffer[r], l); + memset(&bb->buffer[l], 0, r); +#elif FLAC__BITS_PER_BLURB == 32 + /* still needs optimization */ + const unsigned r_end = bb->blurbs + (bb->bits? 1:0); + unsigned l = 0, r = bb->consumed_blurbs; for( ; r < r_end; l++, r++) bb->buffer[l] = bb->buffer[r]; for( ; l < r_end; l++) bb->buffer[l] = 0; +#else + FLAC__ASSERT(false); /* ERROR, only sizes of 8 and 32 are supported */ +#endif /* FLAC__BITS_PER_BLURB == 32 or 8 */ + bb->blurbs -= bb->consumed_blurbs; bb->total_bits -= FLAC__BLURBS_TO_BITS(bb->consumed_blurbs); bb->consumed_blurbs = 0; __________________________________ Do you Yahoo!? Yahoo! Mail - Easier than ever with enhanced search. Learn more. http://info.mail.yahoo.com/mail_250 _______________________________________________ Flac-dev mailing list Flac-dev@xiph.org http://lists.xiph.org/mailman/listinfo/flac-dev