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 - 1.55
+++ bitbuffer.c 25 Jan 2005 02:39:52 -
@@ -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