Префикс EVEX - EVEX prefix

В Префикс EVEX (Расширенное векторное расширение) и соответствующая схема кодирования является расширением 32-битной x86 (IA-32) и 64-разрядная x86-64 (AMD64) архитектура набора команд. EVEX основан, но не следует путать с префиксом MVEX, используемым Knights Corner процессор.

Схема EVEX представляет собой 4-байтовое расширение VEX схема, которая поддерживает AVX-512 набор команд и позволяет адресовать новые 512-битные регистры ZMM и новые 64-битные регистры маски операндов.

Функции

Кодирование EVEX может адресовать 8 регистров маски операндов, 16 регистров общего назначения и 32 векторных регистра в 64-битном режиме (в противном случае 8 универсальных и 8 векторных) и может поддерживать до 4 операндов.

Как и схема кодирования VEX, префикс EVEX объединяет существующие префиксы опкодов и escape-коды, адресацию памяти и модификаторы длины операндов набора команд x86.

Следующие функции перенесены из схемы VEX:

  • Прямое кодирование трех регистров SIMD (XMM, YMM или ZMM) в качестве исходных операндов (регистры MMX или x87 не поддерживаются);
  • Сжатый префикс REX для 64-битного режима;
  • Сжатый префикс SIMD (66H, F2H, F3H), код операции перехода (0FH) и двухбайтовый переход (0F38H, 0F3AH);
  • Менее строгие требования к выравниванию памяти для операнда памяти

EVEX также расширяет VEX дополнительными возможностями:

  • Расширенное кодирование регистров SIMD: всего 32 новых 512-битных SIMD регистрирует ZMM0-ZMM31 в 64-битном режиме;
  • Кодирование маски операнда: 8 новых 64-битных регистров opmask k0-k7 для условного выполнения и объединения операндов назначения;
  • Широковещательная передача от источника к адресату для инструкций, которые принимают вектор памяти в качестве исходного операнда: второй операнд передается в широковещательном режиме перед использованием в фактической операции;
  • Прямое встроенное управление округлением для инструкций, которые работают с регистрами SIMD с плавающей запятой с семантикой округления;
  • Встроенный контроль исключений для команд с плавающей запятой без семантики округления;
  • Сжатое смещение (DISP8 * N), новый режим адресации памяти для повышения плотности кодирования потока байтов команд; масштабный коэффициент N зависит от длины вектора и режима вещания.

Например, схема кодирования EVEX допускает условное добавление векторов в виде

VADDPS zmm1 {k1} {z}, zmm2, zmm3

где модификатор {k1} рядом с операндом назначения кодирует использование регистра opmask k1 для условной обработки и обновления места назначения, а модификатор {z} (закодированный в EVEX.z) обеспечивает два типа маскирования (слияние и обнуление) с слияние по умолчанию, когда модификатор не добавлен.

Техническое описание

В схеме кодирования EVEX используется префикс кода, состоящий из 4 байты; первый байт всегда 62h и является производным от неиспользуемого кода операции 32-битной инструкции BOUND, которая не поддерживается в 64-битном режиме. [1]

Префикс EVEX в формате инструкции AVX-512
# байтов41114 / 11
[Префиксы]EVEXКод операцииModR / M[SIB][Disp32] / [Disp8 * N][Немедленный]

Байт ModR / M определяет один операнд (всегда регистр) с рег поле, а второй операнд закодирован с мод и г / м поля, определяющие регистр или расположение в памяти. Для адресации по принципу "базовый плюс индекс" и "масштаб плюс индекс" требуется байт SIB, который кодирует 2-битные шкала фактор, а также 3-битный индекс и 3-битный основание регистры. В зависимости от режима адресации поле Disp8 / Disp16 / Disp32 может сопровождаться смещением, которое необходимо добавить к адресу.

Префикс EVEX сохраняет поля, введенные в Префикс VEX:

  • Четыре бита R, X, B и W из префикса REX. W расширяет размер операнда до 64 бит или служит дополнительным кодом операции, R расширяется рег, B расширяется г / м или же рег, а X и B расширяются индекс и основание в байте SIB. Как и в префиксе VEX, RXB предоставляется в инвертированном виде.
  • Четыре бита с именем v, определяющие второй неразрушающий операнд исходного регистра. Как и в префиксе VEX, vvvv предоставляется в перевернутом виде.
  • Бит L, определяющий длину вектора 256 бит.
  • Два бита с именем p для замены префиксов размера операнда и префиксов типа операнда (66, F2, F3).
  • Два из m битов для замены существующих escape-кодов (0F, 0F 38 и 0F 3A).

Новые функции существующих полей:

  • Бит X теперь расширяется г / м вместе с битом B, когда байт SIB отсутствует, что позволяет использовать 32 регистра SIMD.

Появилось несколько новых битовых полей:

  • Bit R ’расширяется рег. Как и бит R, R 'предоставляется в инвертированной форме.
  • Бит V 'расширяется vvvv. Как и биты vvvv, V 'предоставляется в инвертированной форме.
  • Три бита с именем a, определяющие регистр маски операнда (k0-k7) для векторных инструкций.
  • Бит z для указания режима слияния (слияние или ноль).
  • Бит b для исходной трансляции, управления округлением (в сочетании с L’L) или подавления исключений.
  • Бит L ’для указания длины вектора в 512 бит или режима управления округлением в сочетании с L.

Кодировка префикса EVEX следующая:

76543210
Байт 0 (62h)01100010
Байт 1 (P0)рИксBР'00м1м0П [7: 0]
Байт 2 (P1)Wv3v2v1v01п1п0П [15: 8]
Байт 3 (P2)zL ’LбV ’а2а1а0П [23:16]

В следующей таблице перечислены возможные комбинации адресации регистров (бит 4 всегда равен нулю при кодировании 16 регистров общего назначения):

Регистрация адресации в 64-битном режиме с использованием префикса EVEX
Режим адресацииБит 4Бит 3Биты [2: 0]Тип реестраОбычное использование
REGEVEX.R ’EVEX.RModRM.regОбщего назначения, ВекторЗарегистрировать операнд
RM (если ModRM.mod = 11)EVEX.XEVEX.BМодРМ.р / мГеорадар, ВекторЗарегистрировать операнд
RM0EVEX.BМодРМ.р / мГеорадарАдрес регистрационной памяти
ОСНОВАНИЕ0EVEX.BSIB.baseГеорадарБаза + Индекс * Адрес памяти шкалы
ИНДЕКС0EVEX.XSIB.indexГеорадарБаза + Индекс * Адрес памяти шкалы
VIDXEVEX.V ’EVEX.XSIB.indexВекторBase + VectorIndex * Масштабировать адрес памяти
NDS / NDDEVEX.V ’EVEX.v3v2v1v0Георадар, ВекторЗарегистрировать операнд
K00EVEX.a2а1а0МаскаОперанд регистра маски

Некоторые инструкции смешивания AVX с кодировкой VEX имеют 4 операнда. Для этого в VEX есть режим адресации IS4, который кодирует 4-й операнд (векторный регистр) в битах Imm8 [7: 4] непосредственной константы. Подобные инструкции смешивания с кодировкой EVEX имеют свой 4-й операнд в регистре маски. Никакая инструкция с кодировкой EVEX не использует кодировку режима адресации IS4.

Рекомендации

  1. ^ Корпорация Intel (июль 2013 г.). «Справочник по программированию расширений набора команд архитектуры Intel».