Умножение без переноса ( CLMUL ) — это расширение набора инструкций x86 , используемого микропроцессорами Intel и AMD , которое было предложено Intel в марте 2008 года [1] и стало доступным в процессорах Intel Westmere, анонсированных в начале 2010 года. Математически инструкция реализует умножение полиномов над конечным полем GF(2), где битовая строка представляет полином . Инструкция CLMUL также позволяет более эффективно реализовать тесно связанное умножение больших конечных полей GF(2 k ), чем традиционный набор инструкций. [2]
Одно из применений этих инструкций — повышение скорости приложений, выполняющих блочное шифрование в режиме Галуа/счетчика , которое зависит от конечного поля GF(2 k ) умножения. Другое применение — быстрый расчет значений CRC , [3] включая те, которые используются для реализации алгоритма DEFLATE скользящего окна LZ77 в zlib и pngcrush . [4]
ARMv8 также имеет версию CLMUL. SPARC называет свою версию XMULX, что означает «умножение XOR».
Инструкция вычисляет 128-битное произведение без переноса двух 64-битных значений. Место назначения — 128-битный регистр XMM . Источником может быть другой регистр XMM или память. Непосредственный операнд указывает, какие половины 128-битных операндов умножаются. Также определены мнемоники, указывающие конкретные значения непосредственного операнда:
Векторная версия EVEX (VPCLMULQDQ) присутствует в AVX-512 .
Наличие набора инструкций CLMUL можно проверить, проверив один из битов функций ЦП .