CALCULER UN CRC32 EN ASSEMBLEUR AVEC SSE4
Voici une petite fonction vous permettant de calculer un CRC32 avec les jeux d’instruction SSE4.2. Depuis cette version de SSE il est possible d’utiliser l’instruction « crc32 » nous permettant de calculer facilement et de manière très efficace ce type de hash.
L’avantage ici, est de pouvoir traiter les octets par groupe de 8 et de profiter de l’optimisation hardware.
Signature de la fonction :
DWORD calcCrc32(DWORD crc, BYTE* pSrc, DWORD count);
Code de la fonction :
; ! ATTENTION, SSE4.2 REQUIS !
ALIGN 16
calcCrc32 PROC
mov eax, ecx
cmp r8d, 4
jb short groupBy1
cmp r8d, 8
jb short groupBy4
groupBy8:
crc32 rax, qword ptr[rdx]
add rdx, 8
sub r8d, 8
je short onEXIT
cmp r8d, 8
jae short groupBy8
cmp r8d, 4
jb short groupBy1
groupBy4:
crc32 eax, dword ptr[rdx]
add rdx, 4
sub r8d, 4
je short onEXIT
groupBy1:
crc32 eax, byte ptr[rdx]
add rdx, 1
sub r8d, 1
jne short groupBy1
onEXIT:
ret 0
calcCrc32 ENDP
Voici le lien vers la documentation INTEL : https://software.intel.com/sites/default/files/m/8/b/8/D9156103.pdf