performance: committed wrong version of buf_set_buf optimization

oops...

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
Mathias K 2011-02-08 11:06:56 +01:00 committed by Øyvind Harboe
parent 6684b35346
commit b21be6054a
1 changed files with 18 additions and 4 deletions

View File

@ -133,26 +133,40 @@ void* buf_set_buf(const void *_src, unsigned src_start,
{ {
const uint8_t *src = _src; const uint8_t *src = _src;
uint8_t *dst = _dst; uint8_t *dst = _dst;
unsigned sb,db,sq,dq; unsigned i,sb,db,sq,dq, lb,lq;
sb = src_start / 8; sb = src_start / 8;
db = dst_start / 8; db = dst_start / 8;
sq = src_start % 8; sq = src_start % 8;
dq = dst_start % 8; dq = dst_start % 8;
lb = len / 8;
lq = len % 8;
for (unsigned i = 0; i < len; i++) src += sb;
dst += db;
/* check if both buffers are on byte boundary and
* len is a multiple of 8bit so we can simple copy
* the buffer */
if ( (sq == 0) && (dq == 0) && (lq == 0) )
{
for (i = 0; i < lb; i++)
*dst++ = *src++;
return (uint8_t*)_dst;
}
/* fallback to slow bit copy */
for (i = 0; i < len; i++)
{ {
if (((*src >> (sq&7)) & 1) == 1) if (((*src >> (sq&7)) & 1) == 1)
*dst |= 1 << (dq&7); *dst |= 1 << (dq&7);
else else
*dst &= ~(1 << (dq&7)); *dst &= ~(1 << (dq&7));
if ( sq++ == 7 ) if ( sq++ == 7 )
{ {
sq = 0; sq = 0;
src++; src++;
} }
if ( dq++ == 7 ) if ( dq++ == 7 )
{ {
dq = 0; dq = 0;