префикс EVEX
Префикс EVEX (расширенное векторное расширение) и соответствующая схема кодирования являются расширением 32-битного x86 (IA-32) и 64-битного x86-64 (AMD64) архитектуры набора команд . EVEX основан на префиксе MVEX, но не следует путать с ним. [ 1 ] используется процессором Knights Corner .
Схема EVEX представляет собой 4-байтовое расширение схемы VEX , которое поддерживает набор инструкций AVX-512 и позволяет адресовать новые 512-битные регистры ZMM и новые 64-битные регистры маски операндов.
В расширенных расширениях производительности префикс Extended EVEX переопределяет семантику нескольких битов полезной нагрузки. [ 2 ]
Функции
[ редактировать ]Кодирование EVEX может адресовать 8 регистров маски операндов, 16 регистров общего назначения и 32 векторных регистра в 64-битном режиме (в противном случае 8 регистров общего назначения и 8 векторных) и может поддерживать до 4 операндов.
Как и схема кодирования VEX, префикс EVEX объединяет существующие префиксы кодов операций и управляющие коды, модификаторы адресации памяти и длины операндов набора команд x86.
Следующие функции перенесены из схемы VEX:
- Прямое кодирование трех регистров SIMD (XMM, YMM или ZMM) в качестве исходных операндов (регистры MMX или x87 не поддерживаются);
- Уплотненный префикс REX для 64-битного режима;
- Сжатый префикс SIMD (66h, F2h, F3h), escape-код операции (0Fh) и двухбайтовый escape-код (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} рядом с операндом-адресатом кодирует использование регистра маски k1 для условной обработки и обновления адресата, а модификатор {z} (закодированный EVEX.z) обеспечивает два типа маскировки (слияние и обнуление), с слияние по умолчанию, когда модификатор не прикреплен.
Техническое описание
[ редактировать ]Схема кодирования EVEX использует префикс кода, состоящий из 4 байтов ; первый байт всегда равен 62h и является производным от неиспользуемого кода операции 32-битной инструкции BOUND, который не поддерживается в 64-битном режиме. [ 3 ]
количество байтов | 4 | 1 | 1 | 1 | 4 / 1 | 1 |
---|---|---|---|---|---|---|
[Префиксы] | ЭВЕКС | Код операции | МодР/М | [СИБ] | [Дисп32] / [Дисп8 × Н] | [Немедленный] |
Байт ModR/M определяет один операнд (всегда регистр) с полем reg , а второй операнд кодируется полями mod и r/m , определяя либо регистр, либо местоположение в памяти. Для адресации «база-плюс-индекс» и «масштаб-плюс-индекс» требуется байт SIB, который кодирует 2-битный коэффициент масштабирования , а также 3-битные индексные и 3-битные базовые регистры. В зависимости от режима адресации, за полем Disp8/Disp16/Disp32 может следовать смещение, которое необходимо добавить к адресу.
Префикс EVEX сохраняет поля, представленные в префиксе VEX :
- Четыре бита R̅, X̅, B̅ и W из префикса VEX, хранящиеся в инвертированной форме. W расширяет размер операнда до 64 бит или служит дополнительным кодом операции, R расширяет reg , B расширяет r/m или reg , а X и B расширяют индекс и базу в байте SIB.
- Четыре бита с именем v, хранящиеся в инвертированной форме. vvvv задает второй неразрушающий операнд исходного регистра.
- Бит L, задающий 256-битную длину вектора.
- Два бита с именем p для замены префиксов размера операнда и префиксов типа операнда (66h, F2h, F3h).
- Два из m битов для замены существующих escape-кодов (0Fh, 0F 38h и 0F 3Ah).
Новые функции существующих полей:
- Бит X теперь расширяет r/m вместе с битом B, когда байт SIB отсутствует, что позволяет использовать 32 регистра SIMD.
Появилось несколько новых битовых полей:
- Бит R̅' в инвертированной форме; R' расширяет рег .
- Bit V̅’ in inverted form; V’ expands vvvv .
- Три бита с именем 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) | Р̅ | Х̅ | Б̅ | Р̅' | 0 | 0 | м 1 | м 0 | П[7:0] |
Байт 2 (P1) | В | v̅ 3 | v̅ 2 | v̅ 1 | v̅ 0 | 1 | п 1 | п 0 | П[15:8] |
Обмен 3 (P2) | С | Л' | л | б | Ва' | aа2 | 1 | из 0 | П[23:16] |
В следующей таблице перечислены возможные комбинации адресации регистров (бит 4 всегда равен нулю при кодировании 16 регистров общего назначения):
Режим адресации | Бит 4 | Бит 3 | Биты [2:0] | Тип регистрации | Общее использование |
---|---|---|---|---|---|
РЕГ | ЭВЕКС.Р' | ЭВЕКС.Р | ModRM.reg | Общего назначения, векторный | Зарегистрировать операнд |
РМ (если ModRM.mod=11) | ЭВЕКС.Х | ЭВЕКС.Б | МодРМ.р/м | Георадар, вектор | Зарегистрировать операнд |
РМ | 0 | ЭВЕКС.Б | МодРМ.р/м | георадар | Зарегистрировать адрес памяти |
БАЗА | 0 | ЭВЕКС.Б | СИБ.база | георадар | База + индекс × масштаб адреса памяти |
ИНДЕКС | 0 | ЭВЕКС.Х | СИБ.индекс | георадар | База + индекс × масштаб адреса памяти |
ВИДКС | ЭВЕКС.В' | ЭВЕКС.Х | СИБ.индекс | Вектор | База + векторный индекс × масштаб адреса памяти |
НСР/НДД | ЭВЕКС.В' | EVEX.v 3 v 2 v 1 v 0 | Георадар, вектор | Зарегистрировать операнд | |
К | 0 | 0 | EVEX.a 2 а 1 а 0 | Маска | Операнд регистра маски |
Некоторые инструкции смешивания AVX, закодированные в VEX, имеют 4 операнда. Чтобы обеспечить это, VEX имеет режим адресации IS4, который кодирует 4-й операнд (векторный регистр) в битах Imm8[7:4] непосредственной константы. Аналогичные инструкции смешивания, закодированные в EVEX, имеют четвертый операнд в регистре маски. Ни одна инструкция в кодировке EVEX не использует кодировку режима адресации IS4.
Расширенный префикс EVEX
[ редактировать ]Расширения Intel Advanced Performance Extensions представляют несколько новых вариантов 3-байтовой полезной нагрузки в префиксе EVEX, которые используются для кодирования расширенных регистров GPR R16-R31 и новых условных инструкций.
Расширение EVEX инструкций EVEX:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
Байт 0 (62h) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | |
Байт 1 (P0) | Р 3 | Х̅ 3 | Б 3 | Р 4 | Б 4 | mм2 | м 1 | м 0 | П[7:0] |
Байт 2 (P1) | В | v̅ 3 | v̅ 2 | v̅ 1 | v̅ 0 | Х̅ 4 | п 1 | п 0 | П[15:8] |
Обмен 3 (P2) | С | Л' | л | б | v̅ 4 | aа2 | 1 | из 0 | П[23:16] |
- Биты R̅ 3 , X̅ 3 и B̅ 3 префикса REX2 являются инверсиями битов R 3 , X 3 и B 3 . Это то же самое, что биты R̅, X̅ и B из префиксов VEX и EVEX.
- Биты R̅ 4 , X̅ 4 , B 4 используются для кодирования 32 регистров EGPR. Хранится в перевернутом виде, кроме В4.
- Пять битов с именем v, хранящихся в инвертированной форме. vvvvv указывает дополнительный индекс исходного регистра, который может кодировать 32 регистра EGPR.
- Биты z, m, b, L, p, a такие же, как и в устаревшем префиксе EVEX.
Расширение EVEX инструкций VEX:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
Байт 0 (62h) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | |
Байт 1 (P0) | Р 3 | Х̅ 3 | Б 3 | Р 4 | Б 4 | mм2 | м 1 | м 0 | П[7:0] |
Байт 2 (P1) | В | v̅ 3 | v̅ 2 | v̅ 1 | v̅ 0 | Х̅ 4 | п 1 | п 0 | П[15:8] |
Обмен 3 (P2) | 0 | 0 | л | 0 | v̅ 4 | НФ | 0 | 0 | П[23:16] |
Расширение EVEX для устаревших инструкций:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
Байт 0 (62h) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | |
Байт 1 (P0) | Р 3 | Х̅ 3 | Б 3 | Р 4 | Б 4 | 1 | 0 | 0 | П[7:0] |
Байт 2 (P1) | В | v̅ 3 | v̅ 2 | v̅ 1 | v̅ 0 | Х̅ 4 | п 1 | п 0 | П[15:8] |
Обмен 3 (P2) | 0 | 0 | 0 | без даты | v̅ 4 | НФ | 0 | 0 | П[23:16] |
- NF — подавление обновления флагов состояния («нет флагов») для нескольких инструкций BMI (ANDN, BEXTR, BLSI, BLSMSK, BLSR, BZHI).
- ND — флаг нового пункта назначения данных (NDD). Когда ND = 1, индекс регистра EGPR кодируется битами v̅.
Префикс EVEX для условного CMP и TEST:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
---|---|---|---|---|---|---|---|---|---|
Байт 0 (62h) | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | |
Байт 1 (P0) | Р 3 | Х̅ 3 | Б 3 | Р 4 | Б 4 | 1 | 0 | 0 | П[7:0] |
Байт 2 (P1) | В | ИЗ | Сан-Франциско | ЗФ | CF | Х̅ 4 | п 1 | п 0 | П[15:8] |
Обмен 3 (P2) | 0 | 0 | 0 | НД=0 | ПК 3 | ПК 2 | ПК 1 | СК 0 | П[23:16] |
- Биты SC представляют собой код состояния источника (SCC).
- OF, SF, ZF, CF — это флаги переполнения, знака, нуля и переноса для проверки (для флага четности нет кодировки).
Когда новые регистры EGPR и адресаты операндов могут быть закодированы как расширенными префиксами EVEX, так и REX2, последний является предпочтительным.
Ссылки
[ редактировать ]- ^ Справочное руководство по архитектуре набора команд сопроцессора Intel® Xeon Phi™ (PDF) . 7 сентября 2012 г. с. 42. 327364-001. Архивировано (PDF) из оригинала 4 августа 2021 г.
- ^ Спецификация архитектуры Intel® Advanced Performance Extensions (Intel® APX) (PDF) (2-е изд.). Август 2023. с. 21. 355828-002США. Архивировано (PDF) из оригинала 10 сентября 2023 г.
- ^ Корпорация Intel (июль 2013 г.). «Справочник по программированию расширений набора команд архитектуры Intel» .