Intel APX, новый набор инструкций. Вторая часть
Новое назначение данных
В типичной целочисленной инструкции x86 регистр назначения или операнд памяти также является первым операндом-источником. Intel® APX расширяет многие такие инструкции новой формой с дополнительным регистровым операндом. Называется новым пунктом назначения данных (NDD). В таких формах NDD — это новый регистр назначения, получающий результат вычисления, а все остальные операнды (включая исходный операнд назначения) становятся исходные операнды только для чтения. Эта функция проиллюстрирована в таблице с использованием типичной операции с 1 источником (INC) и типичной операции с 2 источниками (SUB). Форма NDD сохраняет тот же порядок исходных операндов и кодировка как существующая форма x86, из которой она получена, но помещается в пространство EVEX с идентификатором регистра V, кодирующим регистр NDD. Обратите внимание, что это использование идентификатора регистра V отличается от использования в инструкциях Intel® AVX и Intel® AVX-512, где V обычно используется для кодирования неразрушающего источника (NDS).
Форма NDD не меняет того, как операция инструкции обновляет флаги состояния, за исключением случаев, когда обновление флагов состояния явно подавляется EVEX.NF = 1.
В отличие от поведения слияния верхнего регистра в регистре назначения типичной целочисленной инструкции x86, когда OSIZE равен 8 или 16 бит, регистр NDD всегда имеет нулевой верхний регистр.
Расширенный префикс EVEX
Расширенный префикс EVEX основан на текущем 4-байтовом префиксе EVEX с переопределением семантики нескольких битов полезной нагрузки. Он используется для обеспечения функций Intel® APX для устаревших инструкций, которые не могут быть обеспечивается префиксом REX2 (например, новым назначением данных) и расширениями Intel® APX инструкций VEX и EVEX. Биты полезной нагрузки, общие для всех случаев использования расширенного префикса EVEX, показаны в таблице. Большинство битов в третьем байте полезной нагрузки (за исключением бита V4) не указаны в таблице, поскольку назначение битов полезной нагрузки зависит от того, используется ли префикс EVEX для предоставления расширения Intel® APX для устаревшей инструкции, инструкции VEX или EVEX. из них будут приведены в подразделах ниже.
Байт, следующий за расширенным префиксом EVEX, всегда интерпретируется как основной байт кода операции. Escape-последовательности 0x0F, 0x0F38 и 0x0F3A не нужны и не разрешены. Идентификатор карты инструкции кодируется тремя битами [M2,M1,M0]. Таким образом, расширенный префикс EVEX может получить доступ к 8 картам опкодов. Подчеркнутые битовые поля (например, R3) инвертируются. (Они также имеют светло-серый фон.) Два бита, выделенные красным полужирным шрифтом, представляют собой зарезервированные биты переназначения, используемые для обеспечения пятых и старших битов идентификаторов регистров B и X. Их полярность выбрана таким образом, чтобы текущие фиксированные значения в этих двух позициях кодировали логический 0 после переназначения. (Другими словами, текущее фиксированное значение на B4 равно 0, а на X4 равно 1.)
Правила префикса для расширенного префикса EVEX такие же, как и для текущего префикса EVEX. Расширенный префикс EVEX должен быть последним префиксом, предшествующим основному байту кода операции. Единственные префиксы, которые могут предшествовать расширенный префикс EVEX — это переопределение ASIZE (0x67) и переопределение сегментов. Наличие любого другого префикса вызывает #UD
Расширенный префикс EVEX обеспечивает расширение Intel® APX для устаревшей инструкции или инструкции VEX, продвигая ее в пространство EVEX, что означает, что одна или несколько новых инструкций с той же или связанной инструкцией формы добавляются в пространство EVEX. Когда инструкция VEX повышается, ни ее идентификатор карты, ни ее код операции, ни ее форма инструкции не изменяются, единственная цель повышения заключается в том, чтобы позволить инструкции получить доступ к расширенным GPR и (для некоторых инструкций) подавить обновление флагов состояния. Для унаследованной инструкции понятие продвижения более сложное. В дополнение к предоставлению доступа к расширенным GPR, устаревшая инструкция может быть продвинута для поддержки формы NDD (новое назначение данных) или ZU (ноль-верхний), для подавления обновления флагов состояния или даже для выражения связанного, но совершенно другого семантика. Все продвигаемые устаревшие инструкции размещены на одной карте EVEX map 4, которая ранее была зарезервирована. Большинство продвигаемых устаревших инструкций сохраняют свои предыдущие коды операций, но не всегда.
Когда продвинутая устаревшая инструкция или инструкция VEX имеет операнд памяти со смещением 8 бит (disp8), ее коэффициент масштабирования N всегда равен 1. Для существующих инструкций EVEX Intel® APX не изменяет существующее поведение масштабирования disp8. (Это понятие объяснено в SDM, том 2, раздел 2.7.5, «Поддержка Compressed Displacement (disp8*N) в EVEX».)
Операции Intel® APX, продвигаемые EVEX, имеют другую семантику исключений по сравнению с существующими классами исключений EVEX. Эти различия аналогичны тому, что инструкции BMI в кодировке VEX имеют другую семантику исключений по сравнению с «обычными» инструкциями VEX. Различия в поведении включают:
1. Устаревшие инструкции Intel® APX EVEX, которые полагаются исключительно на GPR, не будут иметь чувствительности CR0.TS и не будут вызывать исключения #NM.
2. Инструкции Intel® APX EVEX, продвигаемые VEX, которые полагаются исключительно на GPR, не будут иметь чувствительности CR0.TS и не будут вызывать исключения #NM.
EVEX Расширение устаревших инструкций
На рисинке показано назначение битов полезной нагрузки для расширенного префикса EVEX, когда он используется для продвижения устаревшей инструкции в пространство EVEX. Как уже упоминалось, все эти инструкции размещены на карте EVEX 4.
Биты W и pp имеют свои текущие значения в префиксе EVEX, за исключением того, что pp = 0b01 также может интерпретироваться как переопределение OSIZE для расширенных целочисленных инструкций, которые имеют переменную OSIZE. (Но обратите внимание, что
размещение явного префикса переопределения OSIZE 0x66 перед тем, как расширенный префикс EVEX вызовет #UD.) Как и связь между REX.W/REX2.W и префиксом 0x66, EVEX.W = 1 имеет приоритет над EVEX.pp = 0b01 и делает OSIZE = 64b для инструкций, которые имеют переменную OSIZE.
Значения битов ND и NF будут объяснены позже. Если какой-либо из битов, помеченных как 0 в последнем байте полезной нагрузки, установлен в 1, #UD повышается, за исключением инструкций CCMP и CTEST, которые используют два нулевых бита. Существуют дополнительные требования к тому, когда бит ND или NF должен быть установлен в 0, которые будут даны позже.
Для карты EVEX 4, когда OSIZE = 8b, идентификаторы регистров GPR [4,5,6,7] адресных байтовых регистров [SPL,BPL,SIL,DIL] вместо [AH,CH,DH,BH].
Как и в REX2, когда какой-либо из битов в EVEX.{R4,X4,B4,R3,X3,B3} не используется расширенной устаревшей инструкцией, он игнорируется, и генераторы кода должны установить эти биты в свои логические 0. значение (т. е. 1 для инвертированных битовых полей, 0 для обычных битовых полей)
Когда инструкция может быть закодирована с использованием префикса REX2 или EVEX, кодировка REX2, естественно, предпочтительнее, поскольку она на два байта короче.
Обратите внимание, что устаревшая инструкция, закодированная в EVEX, может достигать 15-байтового предела длины инструкции: 4 байта префикса EVEX + 1 байт кода операции + 1 байт ModRM + 1 байт SIB + 4 байта смещения + 4 байта. сразу = 15 байт всего. В таком случае нельзя использовать дополнительный префикс (ASIZE или переопределение сегмента). Поскольку этот предел достигается только при наличии длинного непосредственного, программное обеспечение может сначала загрузить непосредственное в регистр, а затем применить желаемый префикс (ы) к более короткой версии регистра-источника того же класса инструкций.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила