CALCULER UN CRC32 EN ASSEMBLEUR AVEC SSE4

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.