in Source/Tx.Windows/EtwNative/TypeUtil.cs [58:105]
internal static unsafe void MemCopy(byte* srcPtr, byte* destPtr, int bytesToCopy)
{
// AMD64 implementation uses longs instead of ints where possible
if (bytesToCopy >= 16)
{
do
{
((int*) destPtr)[0] = ((int*) srcPtr)[0];
((int*) destPtr)[1] = ((int*) srcPtr)[1];
((int*) destPtr)[2] = ((int*) srcPtr)[2];
((int*) destPtr)[3] = ((int*) srcPtr)[3];
destPtr += 16;
srcPtr += 16;
} while ((bytesToCopy -= 16) >= 16);
}
if (bytesToCopy > 0) // protection against negative len and optimization for len==16*N
{
if ((bytesToCopy & 8) != 0)
{
((int*) destPtr)[0] = ((int*) srcPtr)[0];
((int*) destPtr)[1] = ((int*) srcPtr)[1];
destPtr += 8;
srcPtr += 8;
}
if ((bytesToCopy & 4) != 0)
{
((int*) destPtr)[0] = ((int*) srcPtr)[0];
destPtr += 4;
srcPtr += 4;
}
if ((bytesToCopy & 2) != 0)
{
((short*) destPtr)[0] = ((short*) srcPtr)[0];
destPtr += 2;
srcPtr += 2;
}
if ((bytesToCopy & 1) != 0)
{
*destPtr = *srcPtr;
}
}
}