/**
* Optimized memset type operation for zeroing memory locations
*/
inline void appZeroMemory(sdVoid *destPtr, int count)
{
__asm
{
mov ecx, [count] // store the repetition count for rep stosd
mov edi, [destPtr]
xor eax, eax // fill eax with zero, the contents of eax will go where the edi points to
// we need two counters:
mov edx, ecx
shr ecx, 2 // divide [count] by 4
and edx, 3 // store the rest of the counts to edx
// zero on every 4 bytes, that's why we need two counters
rep stosd // store dword from eax where the edi points to
// if the [count] variable can't be divided by 4, then zero the rest of the bytes:
mov ecx, edx
rep stosb // store the lower 8bit of eax to es:di, ecx times
}
}
Comments