4 static inline void memcpy_words(uint32_t *dest, const uint32_t *src, size_t n)
11 static inline void memcpy_bytes(unsigned char *dest, const unsigned char *src, size_t n)
18 void *memcpy(void *dest, const void *src, size_t n)
22 int dalign = (uintptr_t)dest & 3;
23 int salign = (uintptr_t)src & 3;
25 const unsigned char *bsrc;
30 memcpy_bytes(dest, src, n);
34 if(dalign != 0 || salign != 0) {
35 if(dalign != salign) {
36 /* alignment differs, copy bytes */
37 memcpy_bytes(dest, src, n);
41 /* unaligned but on the same alignment, copy bytes first */
45 memcpy_bytes(dest, src, pre);
47 wdest = (uint32_t*)((char*)dest + pre);
48 wsrc = (const uint32_t*)((char*)src + pre);
58 memcpy_words(wdest, wsrc, nwords);
63 bdest = (unsigned char*)(wdest + nwords);
64 bsrc = (const unsigned char*)(wsrc + nwords);
65 memcpy_bytes(bdest, bsrc, n);