
Chris Moore wrote:
I agree wholeheartedly with the idea but shouldn't it be more like this (untested) code :
void * memcpy(void *dest, const void *src, size_t count)
{ char *d8, *s8; unsigned long *dl = dest, *sl = src;
In here, would it be overkill to add byte copying until data is aligned, and then fall into the aligned copy code.
In that case, you'd still gain a speed increase if you're starting at an unaligned address ?
/* while all data is aligned (common case), copy multiple bytes at a time */ if ( (((int)(long)dest | (int)(long)src) & (sizeof(*dl) - 1)) == 0) { while (count >= sizeof(*dl)) { *dl++ = *sl++; count -= sizeof(*dl); } }
d8 = (char *)dl; s8 = (char *)sl;
/* copy any remaining data byte by byte */ while (count--) *d8++ = *s8++;
return dest; }
Regards Mark