#include "memcpy.h"
/**
* @brief copy memory
* @param[in] dest pointer to destination buffer
* @param[in] src pointer to source data
* @param[in] sz size of data to copy
*/
void memcpy(void *dest, const void *src, unsigned int sz)
{
unsigned int *dest4;
const unsigned int *src4;
unsigned int sz4;
unsigned char *dest1;
const unsigned char *src1;
// word aligned memory addresses -> fast copy
if (((unsigned int)dest & 3) == 0 && ((unsigned int)src & 3) == 0) {
dest4 = dest;
src4 = src;
sz4 = sz >> 2;
for ( ; sz4 > 0; --sz4)
*dest4++ = *src4++;
// there might still be a few bytes to copy now
dest = dest4;
src = src4;
sz &= 3;
}
// safe and slow fallback: copy byte-wise
dest1 = dest;
src1 = src;
for ( ; sz > 0; --sz)
*dest1++ = *src1++;
}