Jeu d'instructions CLMULCarry-less Multiplication (CLMUL) est une extension du jeu d'instructions x86 utilisé par les microprocesseurs d’Intel et d’AMD qui a été proposé par Intel en mars 2008[1] et mis à disposition dans les processeurs Intel Westmere annoncés au début de 2010. Mathématiquement, l’instruction implémente la multiplication des polynômes sur le corps fini GF(2) où la chaîne de bits représente le polynôme . L’instruction CLMUL permet également une implémentation plus efficace de la multiplication étroitement liée sur des corps finis plus grands GF(2k) que le jeu d’instructions traditionnel[2]. L’une des utilisations de ces instructions est d’améliorer la vitesse des applications effectuant le chiffrement par bloc en Galois/Counter Mode, qui dépend de la multiplication sur le corps fini GF(2k). Une autre application est le calcul rapide des valeurs CRC[3], y compris celles utilisées pour implémenter l’algorithme Deflate de la fenêtre glissante (en) LZ77 dans zlib et pngcrush (en)[4]. ARMv8 dispose également d’une version de CLMUL. SPARC appelle sa version XMULX, pour « XOR multiplication ». Nouvelles instructionsL'instruction calcule le produit sans retenue (en) 128 bits de deux valeurs 64 bits. La destination est un registre XMM 128 bits. La source peut être un autre registre XMM ou la mémoire. Un opérande immédiat spécifie quelles moitiés des opérandes 128 bits sont multipliées. Des mnémoniques spécifiant des valeurs spécifiques de l'opérande immédiat sont aussi définis :
Une version vectorisée EVEX (VPCLMULQDQ) existe dans AVX-512. Références
|