La multiplicación sin acarreo ( CLMUL ) es una extensión del conjunto de instrucciones x86 utilizado por los microprocesadores de Intel y AMD , propuesta por Intel en marzo de 2008 [1] y disponible en los procesadores Intel Westmere anunciados a principios de 2010. Matemáticamente, la instrucción implementa la multiplicación de polinomios sobre el campo finito GF(2) donde la cadena de bits representa el polinomio . La instrucción CLMUL también permite una implementación más eficiente de la multiplicación estrechamente relacionada de campos finitos más grandes GF(2 k ) que el conjunto de instrucciones tradicional. [2]
Un uso de estas instrucciones es mejorar la velocidad de las aplicaciones que realizan cifrado de bloques en modo Galois/Contador , que depende de la multiplicación de un campo finito GF(2 k ). Otra aplicación es el cálculo rápido de valores CRC , [3] incluidos los utilizados para implementar el algoritmo DEFLATE de ventana deslizante LZ77 en zlib y pngcrush . [4]
ARMv8 también tiene una versión de CLMUL. SPARC llama a su versión XMULX, por "multiplicación XOR".
La instrucción calcula el producto de 128 bits sin acarreo de dos valores de 64 bits. El destino es un registro XMM de 128 bits . La fuente puede ser otro registro XMM o la memoria. Un operando inmediato especifica qué mitades de los operandos de 128 bits se multiplican. También se definen mnemotécnicos que especifican valores específicos del operando inmediato:
Una versión vectorizada de EVEX (VPCLMULQDQ) se ve en AVX-512 .
La presencia del conjunto de instrucciones CLMUL se puede comprobar probando uno de los bits de características de la CPU .