Assembleur 80x86 | CRC32 |
---|---|
Nehalem+, SSE4.2 | Accumulate CRC32 Value |
Syntaxe
CRC32 dest,source |
Description
Cette instruction débute avec une valeur initiale dans l'opérande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'opérande source et enregistre le résultat dans l'opérande de destination.
Algorithme
MODULE BIT_REFLECT64 dest(63...0) ← source(0...63) MODULE MODULE BIT_REFLECT32 dest(31...0) ← source(0...31) MODULE BIT_REFLECT16 dest(15...0) ← source(0...15) MODULE BIT_REFLECT8 dest(7...0) ← source(0...7) MODULE CRC32(dest,source) SI taille de l'opérande source = 64 bits ET taille de l'opérande de destination = 64 bits ALORS TEMP1(63...0) ← BIT_REFLECT64 (source(63...0)) TEMP2(31...0) ← BIT_REFLECT32 (dest(31...0)) TEMP3(95...0) ← TEMP1(63...0) << 32 TEMP4(95...0) ← TEMP2(31...0) << 64 TEMP5(95...0) ← TEMP3(95...0) XOR TEMP4(95...0) TEMP6(31...0) ← TEMP5(95...0) MOD2 11EDC6F41h dest(31...0) ← BIT_REFLECT (TEMP6(31...0)) dest(63...32) ← 00000000h SINON SI taille de l'opérande source = 32 bits ET taille de l'opérande de destination = 32 bits ALORS TEMP1(31...0) ← BIT_REFLECT32 (source(31...0)) TEMP2(31...0) ← BIT_REFLECT32 (dest(31...0)) TEMP3(63...0) ← TEMP1(31...0) << 32 TEMP4(63...0) ← TEMP2(31...0) << 32 TEMP5(63...0) ← TEMP3(63...0) XOR TEMP4(63..0) TEMP6(31...0) ← TEMP5(63...0) MOD2 11EDC6F41h dest(31...0) ← BIT_REFLECT (TEMP6(31..0)) SINON SI taille de l'opérande source = 16 bits ET taille de l'opérande de destination = 32 bits ALORS TEMP1(15...0) ← BIT_REFLECT16 (source(15...0)) TEMP2(31...0) ← BIT_REFLECT32 (dest(31...0)) TEMP3(47...0) ← TEMP1(15...0) << 32 TEMP4(47...0) ← TEMP2(31...0) << 16 TEMP5(47...0) ← TEMP3(47...0) XOR TEMP4(47...0) TEMP6(31...0) ← TEMP5(47...0) MOD2 11EDC6F41h dest(31...0) ← BIT_REFLECT (TEMP6(31...0)) SINON SI taille de l'opérande source = 8 bits ET taille de l'opérande de destination = 64 bits ALORS TEMP1(7...0) ← BIT_REFLECT8(source(7...0)) TEMP2(31...0) ← BIT_REFLECT32 (dest(31...0)) TEMP3(39...0) ← TEMP1(7...0) << 32 TEMP4(39...0) ← TEMP2(31...0) << 8 TEMP5(39...0) ← TEMP3(39...0) XOR TEMP4(39...0) TEMP6(31...0) ← TEMP5(39...0) MOD2 11EDC6F41h dest(31...0) ← BIT_REFLECT (TEMP6(31...0)) dest(63...32) ← 00000000h SINON SI taille de l'opérande source = 8 bits ET taille de l'opérande de destination = 32 bits ALORS TEMP1(7...0) ← BIT_REFLECT8(source(7...0)) TEMP2(31...0) ← BIT_REFLECT32 (dest(31...0)) TEMP3(39...0) ← TEMP1(7...0) << 32 TEMP4(39...0) ← TEMP2(31...0) << 8 TEMP5(39...0) ← TEMP3(39...0) XOR TEMP4(39...0) TEMP6(31...0) ← TEMP5(39...0) MOD2 11EDC6F41h dest(31...0) ← BIT_REFLECT (TEMP6(31...0)) FIN SI |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
CRC32 r32, r/m8 | F2h 0Fh 38h F0h /r | Cette instruction débute avec une valeur initiale dans l'opérande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'opérande source et enregistre le résultat dans l'opérande de destination. |
CRC32 r32, r/m8 | F2h REX 0Fh 38h F0h /r | Cette instruction débute avec une valeur initiale dans l'opérande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'opérande source et enregistre le résultat dans l'opérande de destination. |
CRC32 r32, r/m16 | F2h 0Fh 38h F1h /r | Cette instruction débute avec une valeur initiale dans l'opérande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'opérande source et enregistre le résultat dans l'opérande de destination. |
CRC32 r32, r/m32 | F2h 0Fh 38h F1h /r | Cette instruction débute avec une valeur initiale dans l'opérande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'opérande source et enregistre le résultat dans l'opérande de destination. |
CRC32 r64, r/m8 | F2h REX.W 0Fh 38h F0h /r | Cette instruction débute avec une valeur initiale dans l'opérande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'opérande source et enregistre le résultat dans l'opérande de destination. |
CRC32 r64, r/m64 | F2h REX.W 0Fh 38h F1h /r | Cette instruction débute avec une valeur initiale dans l'opérande de destination, accumule une valeur de code CRC-32 (polynomial de 11EDC6F41h) dans l'opérande source et enregistre le résultat dans l'opérande de destination. |
Références
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 280 à 283.
Dernière mise à jour : Samedi, le 2 août 2014