#include <lib9.h> #define uintptr_t uintptr#define WT size_t#define WS (sizeof(WT)) #undef memmove#define memmove memcpyvoid *memmove(void *dest, const void *src, size_t n){ char *d = dest; const char *s = src; if (d==s) return d; if (d<s) { if ((uintptr_t)s % WS == (uintptr_t)d % WS) { while ((uintptr_t)d % WS) { if (!n--) return dest; *d++ = *s++; } for (; n>=WS; n-=WS, d+=WS, s+=WS) *(WT *)d = *(WT *)s; } for (; n; n--) *d++ = *s++; } else { if ((uintptr_t)s % WS == (uintptr_t)d % WS) { while ((uintptr_t)(d+n) % WS) { if (!n--) return dest; d[n] = s[n]; } while (n>=WS) n-=WS, *(WT *)(d+n) = *(WT *)(s+n); } while (n) n--, d[n] = s[n]; } return dest;}
#include <lib9.h>
#define uintptr_t uintptr
#define WT size_t
#define WS (sizeof(WT))
#undef memmove
#define memmove memcpy
void *memmove(void *dest, const void *src, size_t n)
{
char *d = dest;
const char *s = src;
if (d==s) return d;
if (d<s) {
if ((uintptr_t)s % WS == (uintptr_t)d % WS) {
while ((uintptr_t)d % WS) {
if (!n--) return dest;
*d++ = *s++;
}
for (; n>=WS; n-=WS, d+=WS, s+=WS) *(WT *)d = *(WT *)s;
}
for (; n; n--) *d++ = *s++;
} else {
if ((uintptr_t)s % WS == (uintptr_t)d % WS) {
while ((uintptr_t)(d+n) % WS) {
if (!n--) return dest;
d[n] = s[n];
}
while (n>=WS) n-=WS, *(WT *)(d+n) = *(WT *)(s+n);
}
while (n) n--, d[n] = s[n];
}
return dest;
}