Набор инструкций CLMUL

редактировать

Умножение без переноса (CLMUL ) - это расширение набора команд x86, используемого микропроцессорами из Intel и AMD, которые были предложены Intel в марте 2008 года и стали доступны в процессорах Intel Westmere, анонсированных в начале 2010 года. Математически инструкция реализует умножение полиномов над конечным полем GF (2), где битовая строка a 0 a 1… a 63 {\ displaystyle a_ {0} a_ {1} \ ldots a_ {63}}{\ displaystyle a_ {0} a_ {1} \ ldots a_ {63}} представляет собой многочлен a 0 + a 1 X + a 2 X 2 + ⋯ + a 63 X 63 {\ displaystyle a_ {0} + a_ {1} X + a_ {2} X ^ {2} + \ cdots + a_ {63} X ^ {63}}{\ displaystyle a_ {0} + a_ {1} X + a_ {2} X ^ {2} + \ cdots + a_ {63} X ^ {63}} . Инструкция CLMUL также позволяет более эффективно реализовать тесно связанное умножение больших конечных полей GF (2), чем традиционный набор инструкций.

Одним из способов использования этих инструкций является повышение скорости приложений, выполняющих блочное шифрование. в Режим Галуа / Счетчика, который зависит от умножения конечного поля GF (2). Другое приложение - быстрое вычисление значений CRC, включая те, которые используются для реализации алгоритма LZ77 скользящего окна DEFLATE в zlib. и pngcrush.

ARMv8 также имеет версию CLMUL. SPARC называет свою версию XMULX для «умножения XOR».

Содержание

  • 1 Новые инструкции
  • 2 ЦП с набором инструкций CLMUL
  • 3 См. Также
  • 4 Ссылки

Новые инструкции

Инструкция вычисляет 128-битное произведение без переноса двух 64-битных значений. Назначением является 128-битный регистр XMM. Источником может быть другой регистр XMM или память. Непосредственный операнд указывает, какие половины 128-битных операндов умножаются. Также определены мнемоники, определяющие конкретные значения непосредственного операнда:

ИнструкцияКод операцииОписание
PCLMULQDQ xmmreg, xmmrm, imm[rmi: 66 0f 3a 44 / r ib]Произвести умножение без переноса двух 64-битных полиномов над конечным полем GF (2).
PCLMULLQLQDQ xmmreg, xmmrm[rm: 66 0f 3a 44 / r 00]Умножить младшие половины двух регистров.
PCLMULHQLQDQ xmmreg, xmmrm[rm: 66 0f 3a 44 / r 01]Умножить старшую половину регистра назначения на младшую половину регистра источника.
PCLMULLQHQDQ xmmreg, xmmrm[rm: 66 0f 3a 44 / r 10]Умножьте младшую половину регистра назначения на старшую половину регистра источника.
PCLMULHQHQDQ xmmreg, xmmrm[rm: 66 0f 3a 44 / r 11]Умножить старшие половины двух регистров.

Векторизованная версия EVEX (VPCLMULQDQ) встречается в процессорах AVX-512.

с набором инструкций CLMUL

Наличие набора команд CLMUL можно проверить, протестировав один из битов функций ЦП.

См. Также

Ссылки

Последняя правка сделана 2021-05-13 11:20:18
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте