Browse Source

speed up memcpy for aligned bases but misaligned length

pull/22/head
Andrew Waterman 10 years ago
parent
commit
f70ee5576a
  1. 23
      util/string.c

23
util/string.c

@ -4,17 +4,20 @@
void* memcpy(void* dest, const void* src, size_t len) void* memcpy(void* dest, const void* src, size_t len)
{ {
if ((((uintptr_t)dest | (uintptr_t)src | len) & (sizeof(uintptr_t)-1)) == 0) { const char* s = src;
const uintptr_t* s = src; char *d = dest;
uintptr_t *d = dest;
while (d < (uintptr_t*)(dest + len)) if ((((uintptr_t)dest | (uintptr_t)src) & (sizeof(uintptr_t)-1)) == 0) {
*d++ = *s++; while ((void*)d < (dest + len - (sizeof(uintptr_t)-1))) {
} else { *(uintptr_t*)d = *(const uintptr_t*)s;
const char* s = src; d += sizeof(uintptr_t);
char *d = dest; s += sizeof(uintptr_t);
while (d < (char*)(dest + len)) }
*d++ = *s++;
} }
while (d < (char*)(dest + len))
*d++ = *s++;
return dest; return dest;
} }

Loading…
Cancel
Save