Префикс 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]
# байтов | 4 | 1 | 1 | 1 | 4 / 1 | 1 |
---|---|---|---|---|---|---|
[Префиксы] | 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 следующая:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
Байт 0 (62h) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | |
Байт 1 (P0) | р | Икс | B | Р' | 0 | 0 | м1 | м0 | П [7: 0] |
Байт 2 (P1) | W | v3 | v2 | v1 | v0 | 1 | п1 | п0 | П [15: 8] |
Байт 3 (P2) | z | L ’ | L | б | V ’ | а2 | а1 | а0 | П [23:16] |
В следующей таблице перечислены возможные комбинации адресации регистров (бит 4 всегда равен нулю при кодировании 16 регистров общего назначения):
Режим адресации | Бит 4 | Бит 3 | Биты [2: 0] | Тип реестра | Обычное использование |
---|---|---|---|---|---|
REG | EVEX.R ’ | EVEX.R | ModRM.reg | Общего назначения, Вектор | Зарегистрировать операнд |
RM (если ModRM.mod = 11) | EVEX.X | EVEX.B | МодРМ.р / м | Георадар, Вектор | Зарегистрировать операнд |
RM | 0 | EVEX.B | МодРМ.р / м | Георадар | Адрес регистрационной памяти |
ОСНОВАНИЕ | 0 | EVEX.B | SIB.base | Георадар | База + Индекс * Адрес памяти шкалы |
ИНДЕКС | 0 | EVEX.X | SIB.index | Георадар | База + Индекс * Адрес памяти шкалы |
VIDX | EVEX.V ’ | EVEX.X | SIB.index | Вектор | Base + VectorIndex * Масштабировать адрес памяти |
NDS / NDD | EVEX.V ’ | EVEX.v3v2v1v0 | Георадар, Вектор | Зарегистрировать операнд | |
K | 0 | 0 | EVEX.a2а1а0 | Маска | Операнд регистра маски |
Некоторые инструкции смешивания AVX с кодировкой VEX имеют 4 операнда. Для этого в VEX есть режим адресации IS4, который кодирует 4-й операнд (векторный регистр) в битах Imm8 [7: 4] непосредственной константы. Подобные инструкции смешивания с кодировкой EVEX имеют свой 4-й операнд в регистре маски. Никакая инструкция с кодировкой EVEX не использует кодировку режима адресации IS4.
Рекомендации
- ^ Корпорация Intel (июль 2013 г.). «Справочник по программированию расширений набора команд архитектуры Intel».