Jump to content

Префикс VEX

(Перенаправлено с префикса REX )

Префикс VEX (от «векторных расширений») и схема кодирования VEX расширением IA-32 и x86-64 архитектуры набора команд для микропроцессоров Intel являются , AMD и других.

Схема кодирования VEX позволяет определять новые инструкции, а также расширять или модифицировать ранее существующие коды инструкций . Это служит следующим целям:

  • Карта кодов операций расширяется, чтобы освободить место для будущих инструкций.
  • Это позволяет кодам инструкций иметь до четырех операндов (плюс непосредственный), тогда как исходная схема допускает только два операнда (плюс непосредственный).
  • размер SIMD векторных регистров Это позволяет расширить со 128- битных регистров XMM до 256-битных регистров YMM. Существует возможность дальнейшего увеличения размера реестра.
  • Он позволяет модифицировать существующие инструкции с двумя операндами в неразрушающие формы с тремя операндами, где регистр назначения отличается от обоих исходных регистров. Например, c a + b вместо a a + b (где регистр a изменяется инструкцией).

Префикс VEX заменяет наиболее часто используемые байты префикса инструкций и escape-байты. Во многих случаях количество заменяемых байтов префикса и escape-байтов такое же, как количество байтов в префиксе VEX, так что общая длина инструкции, закодированной VEX, равна длине кода устаревшей инструкции. . В других случаях версия в кодировке VEX длиннее или короче устаревшего кода. В 32-битном режиме инструкции, закодированные VEX, могут получить доступ только к первым 8 регистрам YMM/XMM; кодировки других регистров будут интерпретироваться как устаревшие инструкции LDS и LES, которые не поддерживаются в 64-битном режиме.

Кодирование инструкций

[ редактировать ]
Формат инструкций Intel 64 с использованием префикса VEX
количество байтов 0, 2, 3 1 1 0, 1 0, 1, 2, 4 0, 1
Часть [Префиксы] [ВЕКС] КОД ОПЕРАЦИИ МодР/М [СИБ] [ДИСП] [ИММ]

Схема кодирования VEX использует префикс кода, состоящий из двух или трех байтов , который может быть добавлен к существующим или новым кодам инструкций. [1]

В архитектуре x86 инструкции с операндом памяти могут использовать байт ModR/M , который определяет режим адресации. Этот байт имеет три битовых поля:

  • mod , биты [7:6] — в сочетании с полем r/m кодирует либо 8 регистров, либо 24 режима адресации. Также кодирует информацию о коде операции для некоторых инструкций.
  • reg/opcode , биты [5:3] — в зависимости от основного байта кода операции, указывает либо регистр, либо еще три бита информации о коде операции.
  • r/m , биты [2:0] — можно указать регистр в качестве операнда или объединить с полем mod для кодирования режима адресации.

Формы 32-битной адресации «база плюс индекс» и «масштаб плюс индекс» (закодированные с помощью r/m = 100 и mod ≠ 11) требуют еще одного байта адресации, байта SIB. Он имеет следующие поля:

  • масштабный коэффициент, закодированный битами [7:6]
  • индексный регистр, биты [5:3]
  • базовый регистр, биты [2:0].
Кодирование REX и VEX
Байт Кусочек
РЕКС
7 6 5 4 3 2 1 0
0 (0x4_) 0 1 0 0 В Р Х Б
VEX3 (3-байтовый VEX)
7 6 5 4 3 2 1 0
0 (0xC4) 1 1 0 0 0 1 0 0
1 Р̅ Х̅ Б̅ м 4 m 3 mм2 м 1 м 0
2 В 3 2 1 0 л п 1 п 0
VEX2 (2-байтовый VEX)
7 6 5 4 3 2 1 0
0 (0xC5) 1 1 0 0 0 1 0 1
1 Р̅ 3 2 1 0 л п 1 п 0
REX2 (2-байтовый REX)
7 6 5 4 3 2 1 0
0 (0xD5) 1 1 0 1 0 1 0 1
1 MМ0 Р 4 х 4 Б 4 В Р 3 х 3 BБ3

Префикс REX предоставляет дополнительное пространство для кодирования 64-битных режимов адресации и дополнительных регистров, присутствующих в архитектуре x86-64. Битовое поле W изменяет размер операнда на 64 бита, R расширяет reg до 4 битов, B расширяет r/m (или opreg в тех немногих кодах операций, которые кодируют регистр в 3 младших битах кода операции, например «POP reg»), а X и B расширяют индекс и базу в байте SIB.

Префикс VEX3 содержит все битовые поля префикса REX, а также различные другие префиксы, расширяющие режим адресации, перечисление регистров, размер и ширину операнда:

  • Биты R̅, X̅ и B̅ представляют собой инверсии битов R, X и B префикса REX; они предоставляют четвертый (старший) бит для полей индекса регистра (ModRM reg, индекс SIB и ModRM r/m; база SIB или поля reg кода операции соответственно), обеспечивая доступ к 16 вместо 8 регистров.
  • Один бит W, эквивалентный биту W префикса REX, определяет 64-битный операнд; для нецелочисленных инструкций это бит расширения общего кода операции.
  • Четыре бита v представляют собой инверсию дополнительного индекса исходного регистра.
  • Один бит L указывает длину вектора; 0 для 128-битных регистров SSE (XMM) и 1 для 256-битных регистров AVX (YMM).
  • Два бита p кодируют дополнительные байты префикса. Значения 0, 1, 2 и 3 соответствуют подразумеваемым префиксам no, 0x66, 0xF3 и 0xF2. Они кодируют тип операнда для инструкций SSE с плавающей запятой: упакованный одинарный, упакованный двойной, скалярный одинарный и скалярный двойной соответственно.
  • Пять m битов используются для указания карты кода операции используемой . Из 32 возможных карт кодов операций, которые могут быть закодированы с помощью m 4 m 3 m 2 m 1 m 0 , карты кодов операций 1, 2 и 3 используются для обеспечения компактной замены устаревших 2-байтовых и 3-байтовых кодов операций — эти три карты кодов операций эквивалентны ведущим последовательностям escape-байтов 0x0F, 0x0F 0x38 и 0x0F 0x3A, соответственно. Другие карты кодов операций VEX мало использовались - по состоянию на декабрь 2023 года единственным известным использованием других карт является карта 0 для Xeon Phi . Xeon Phi, специфичная для JKZD/ JKNZD инструкции [2] и карта 7 для запланированного URDMSR/ UWRMSR инструкции. [3] Карты 4/5/6 используются с префиксом EVEX , но ни одна из инструкций в этих картах не кодируется VEX.

Префикс VEX2 представляет собой 2-байтовый вариант префикса VEX3, отличающийся от последнего следующими моментами:

  • Биты X̅, B̅ и W отсутствуют.
  • m битов отсутствуют в префиксе VEX2; подразумевается escape 0x0F.

Инструкции, для которых требуется любое из этих битовых полей, должны быть закодированы с помощью префикса VEX3.

Префикс REX2 представляет собой 2-байтовый вариант префикса REX, представленный расширениями Intel APX, которые добавляют 16 расширенных регистров GPR.

  • Биты R3 . , X3 и B3 аналогичны битам R, X и B в префиксе REX
  • Биты R4 это дополнительные биты , , X4 и B4 используемые для кодирования 32 регистров EGPR.
  • Бит W такой же, как и в префиксе REX.
  • Бит M 0 выбирает между устаревшей картой 0 (1-байтовые коды операций, без перехода) и устаревшей картой 1 (2-байтовые коды операций, escape 0x0F).
Зарегистрируйте адресацию в 64-битном режиме с использованием префикса VEX.
Режим адресации Бит 3 Биты [2:0] Тип регистрации Общее использование
РЕГ ВЕКС.Р ModRM.reg Общего назначения, маска, вектор Зарегистрировать операнд
RM (если ModRM.mod = 11) ВЕКС.Б МодРМ.р/м Георадар, маска, вектор Зарегистрировать операнд
РМ ВЕКС.Б МодРМ.р/м георадар Зарегистрировать адрес памяти
БАЗА ВЕКС.Б СИБ.база георадар База + индекс × масштаб адреса памяти
ИНДЕКС ВЕКС.Х СИБ.индекс георадар База + индекс × масштаб адреса памяти
ВИДКС ВЕКС.Х СИБ.индекс Вектор База + векторный индекс × масштаб адреса памяти
НСР/НДД VEX.v 3 v 2 v 1 v 0 Георадар, маска, вектор Зарегистрировать операнд
ИС4 Имм8[7:4] Вектор Зарегистрировать операнд

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

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

Инструкции, закодированные с префиксом VEX, могут иметь до четырех переменных операндов (в регистрах или памяти) и один постоянный операнд (непосредственное значение). Инструкции, которым требуется более трех переменных операндов, используют непосредственные биты операнда для указания операнда 4-го регистра (IS4 выше). Максимум один из операндов может быть операндом памяти; и не более одного из операндов может быть непосредственной константой длиной 4 или 8 бит. Остальные операнды являются регистрами.

Набор инструкций AVX — это первое расширение набора команд, использующее схему кодирования VEX. Набор инструкций AVX использует префикс VEX только для инструкций, использующих регистры SIMD XMM .

Однако схема кодирования VEX использовалась и для других типов команд, а также в последующих расширениях набора команд. Например:

  • BMI представила арифметические и битовые инструкции в кодировке VEX, которые работают с регистрами общего назначения.
  • AVX-512 представил 8 регистров масок и добавил инструкции в коде VEX для управления ими. (VEX.B̅ игнорируется, когда поле используется для кодирования регистра маски, а VEX.R̅ и VEX.v̅ 3 – нет, и им должно быть присвоено значение 1 в 64-битном режиме. [4] )
  • AMX представила 8 регистров плиток и добавила инструкции в коде VEX для управления ими.

Значения начальных байтов префикса VEX, 0xC4 и 0xC5, такие же, как коды операций инструкций LDS и LES. Не поддерживается в 64-битном режиме, неоднозначность разрешается в 32-битном режиме за счет использования того факта, что допустимый байт ModR/M LDS или LES не может указывать операнд-источник регистра; т. е. иметь форму 11xxxxxx . Различные битовые поля во втором байте префикса VEX инвертируются, чтобы гарантировать, что байт всегда имеет эту форму. Аналогичным образом, в однобайтовой форме префикса REX четыре старших бита установлены в четыре, что заменяет шестнадцать кодов операций с номерами 0x40–0x4F. Раньше этими кодами операций были отдельные инструкции INC и DEC для восьми стандартных регистров процессора; Код x86-64 должен использовать инструкции ModR/M INC и DEC. [5]

Устаревшие инструкции SIMD с добавленным префиксом VEX эквивалентны тем же инструкциям без префикса VEX со следующими отличиями:

  • Инструкция, закодированная в VEX, может иметь еще один операнд, что делает ее неразрушающей.
  • 128-битная инструкция XMM без префикса VEX оставляет старшую половину полного 256-битного регистра YMM неизмененной, тогда как версия с кодировкой VEX устанавливает старшую половину в ноль.
  • 128-битные инструкции XMM без префикса VEX обычно требуют, чтобы любые аргументы памяти были выровнены по 16 байтам - версии с кодировкой VEX допускают несовпадение операндов памяти.

Инструкции, использующие весь 256-битный регистр YMM, не следует смешивать с инструкциями, отличными от VEX, которые оставляют неизменной верхнюю половину регистра, по соображениям эффективности. [6] [7]

Префикс VEX не поддерживается в реальном режиме и режиме виртуального-8086 (все инструкции с префиксом VEX будут вызывать #UD в этих режимах).

  • В августе 2007 года AMD предложила расширение набора команд SSE5 , которое включает новую схему кодирования инструкций с тремя операндами с использованием дополнительного байта с именем DREX и предназначено для ядра процессора Bulldozer в 2011 году. [8] [9] Однако в 2009 году SSE5 был отменен и так и не реализован.
  • В марте 2008 года Intel предложила набор инструкций AVX , используя новую схему кодирования VEX. [10]
  • В августе 2008 года комментаторы выразили сожаление по поводу ожидаемой несовместимости между наборами инструкций AMD и Intel и предложили AMD пересмотреть свои планы и заменить схему DREX более гибкой и расширяемой схемой VEX. [11]
  • В мае 2009 года AMD объявила о пересмотре предлагаемого набора инструкций SSE5, чтобы сделать его совместимым с набором инструкций AVX и схемой кодирования VEX. Пересмотренный SSE5 называется XOP . [12]
  • Январь 2011 г. Набор инструкций AVX поддерживается микропроцессорной архитектурой Intel Sandy Bridge .
  • 2011. Наборы инструкций AVX , XOP и FMA4 поддерживаются процессором AMD Bulldozer . [13]
  • 2013. Набор инструкций FMA3 поддерживается в процессорах Intel Haswell.
  • В июле 2023 года Intel анонсировала расширения Advanced Performance Extensions (APX), которые используют префикс REX2 и обновленный префикс EVEX.
  1. ^ Корпорация Intel (январь 2009 г.). «Справочник по программированию расширенных векторных расширений Intel» .
  2. ^ Справочное руководство по архитектуре набора команд сопроцессора Intel® Xeon Phi™ (PDF) . 7 сентября 2012 г. с. 73. 327364-001. Архивировано (PDF) из оригинала 4 августа 2021 г.
  3. ^ Расширения набора команд архитектуры Intel® и будущие функции (PDF) . Сентябрь 2023 г. с. 103. 314933-050. Архивировано (PDF) из оригинала 12 декабря 2023 г.
  4. ^ Intel, Руководство разработчика программного обеспечения , номер заказа. 325462-081, сен 2023, том 2, раздел 2.7.11.3, с. 588. Архивировано 6 декабря 2023 г.
  5. ^ Корпорация Intel (01 сентября 2016 г.). «Руководство разработчика архитектур Intel® 64 и IA-32: Том 2A» . п. 2-8 . Проверено 13 сентября 2021 г.
  6. ^ Intel, Как избежать штрафов за переход AVX-SSE , 2011. Архивировано 26 октября 2023 г.
  7. ^ Переполнение стека. Почему этот код SSE в 6 раз медленнее без VZEROUPPER на Skylake? , декабрь 2016 г. Архивировано 6 июля 2023 г.
  8. ^ «Набор 128-битных инструкций SSE5» . Центр разработчиков AMD . Проверено 2 июня 2009 г.
  9. ^ Грушка, Джоэл (14 ноября 2008 г.). «AMD Fusion теперь перенесен на 2011 год» . Арс Техника .
  10. ^ «Сеть программного обеспечения Intel» . Интел . Архивировано из оригинала 7 апреля 2008 г. Проверено 5 апреля 2008 г.
  11. ^ «AMD и Intel несовместимы. Что делать?» . Форумы разработчиков AMD . Проверено 10 августа 2012 г.
  12. ^ «Руководство программиста по архитектуре AMD64, том 4: инструкции для 128-битных и 256-битных носителей» (PDF) . АМД . 22 декабря 2010 г.
  13. ^ «Достижение баланса» . Дэйв Кристи, блоги разработчиков AMD. Архивировано из оригинала 09.11.2013 . Проверено 10 августа 2012 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2e69e0d1ef3fd64faa29cdeb2fa9e2df__1716390720
URL1:https://arc.ask3.ru/arc/aa/2e/df/2e69e0d1ef3fd64faa29cdeb2fa9e2df.html
Заголовок, (Title) документа по адресу, URL1:
VEX prefix - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)