Are there any problems with this memcpy() implementation?
There's a number of issues with this code:

int* wordDist = (int*)dst;
int* wordSrc = (int*)src;


Even if this works on a given platform, it is definitely not portable. int* can often have more strict alignment requirements than char* - this is technically undefined behaviour.

Further, (int*)src; is casting away constness - always dangerous if you then modify the value somewhere in the rest of the function.

int numWords = numBytes &gt;&gt; 2; 


This assumes that an int is 32 bit, which is again non-portable, and will of course be wrong on any platform where this isn't the case. This could be fixed by using:

int numWords = numBytes / sizeof(int);


However, the alignment issues mentioned previously still remain.

This code:

int whatisleft = numBytes &gt;&gt; 2 - (numWords);


is completely wrong, as thanks to operator precedence, it is equivalent to numBytes &gt;&gt; (2 - numWords) which is likely to be negative, causing undefined behaviour. Also, one has to be careful regardless, and keep in mind the differences between an arithmetic right shift and a logical right shift. Again, technically, right shifts for signed values are implementation defined, and could potentially be either.