Поделиться через


OPTION AVXENCODING

Выбирает предпочтительную кодировку инструкций AVX.

Синтаксис

OPTION AVXENCODING:предпочтение

Общие сведения

Инструкции Intel AVX и AVX-512 кодируются по-разному от других инструкций по архитектуре Intel. Вместо того чтобы полагаться на префикс инструкций и байты свинца в opcode для выбора инструкции, они используют один многобайтовый префикс. Этот префикс может закодировать дополнительный операнд регистра. В 64-разрядном режиме он также имеет биты для выбора регистров от 8 до 15 для других операндов, а префикс REX не нужен.

Используются три разных многобайтовых префикса. Инструкции AVX можно закодировать с префиксом VEX 3-байтов, где второй и третий байт помогают выбрать определенную операцию, выполненную. Если некоторые поля в префиксе VEX 3-байтов имеют определенные значения, вместо этого можно использовать 2-байтовую форму префикса VEX. Наконец, некоторые инструкции AVX также имеют форму AVX-512, которая закодирована префиксом 4-байтового ЕВАX. Префикс EVEX содержит дополнительные поля, чтобы выбрать 512-разрядную длину вектора и другие параметры, относящиеся к инструкциям AVX-512.

Так как некоторые инструкции AVX могут быть закодированы до трех разных способов, существуют правила выбора используемой формы. Директива OPTION AVXENCODING используется для выбора набора используемых правил.

Параметры

Предпочтение Приоритет предпочтения кодирования
PREFER_FIRST Если это возможно, используйте первую определяемую форму.
PREFER_VEX Используйте VEX кодировку в предпочтениях для EVEX кодирования.
PREFER_VEX3 Используйте 3-байтовую VEX кодировку в предпочтении EVEX кодирования.
PREFER_EVEX Используйте EVEX кодировку в предпочтениях для VEX кодирования.
NO_EVEX Не кодируйте использование EVEX.

Порядок AVXENCODING применяется только в том случае, если для инструкции не указана форма префикса инструкции. Если префикс инструкции явно закодирован, он имеет приоритет над параметром AVXENCODING . Например, evex vpmaddwd будет использоваться EVEXпрефикс VPMADDWD -, даже если OPTION AVXENCODING:no_EVEX задано значение.

Если источник сборки не используется OPTION AVXENCODING для выбора параметров кодирования, PREFER_FIRST правила используются по умолчанию. По этим правилам самые ранние кодировки инструкций, добавленные в сборщик макросов Майкрософт (MASM), имеют приоритет, и среди этих возможностей кодировка с самой короткой формой префикса является предпочтительной. Эти правила гарантируют, что код, собранный MASM, по-прежнему создает тот же код объекта, если новые формы инструкций добавляются позже.

Правила PREFER_VEX всегда пытаются кодировать с VEX префиксом, прежде чем пытаться кодировать с помощью EVEX. По возможности, 2-байтовая форма VEX используется вместо 3-байтовой формы.

PREFER_VEX3 Предпочтение всегда пытается закодировать с помощью префикса 3-байтовVEX, прежде чем пытаться кодировать с EVEXпомощью. 2-байтовая VEX форма не будет использоваться.

Параметр PREFER_EVEX всегда пытается кодировать с EVEX префиксом и пытается использовать VEX только в том случае, если инструкция не имеет формы AVX-512.

NO_EVEX Предпочтение пытается закодировать только с помощью VEX префикса. Формы инструкций AVX-512 не допускаются. Этот параметр позволяет собирать код для использования на платформах без поддержки AVX-512.

Директива OPTION AVXENCODING доступна в Visual Studio 2019 версии 16.7 и более поздних версий.

Пример

В этом примере используются VPDPBUSD и VPMADDWD инструкции для иллюстрации AVXENCODING работы параметра. VPDPBUSD сначала был определен для кодирования только с EVEXпомощью , и позже был расширен с помощью формы, закодированной VEX для платформ без поддержки AVX-512, в то время как VPMADDWD avX и расширен до AVX-512. Вывод списка из сборки примера показывает, как изменение AVXENCODING режима влияет на код объекта, созданный для каждой инструкции. Префикс для каждой инструкции заканчивается на "/".

 00000000  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 00000006  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:no_EVEX
 0000000A  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 0000000F  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_VEX
 00000013  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 00000018  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_VEX3
 0000001C  C4 E2 69/ 50 CB        vpdpbusd xmm1, xmm2, xmm3
 00000021  C4 E1 69/ F5 CB        vpmaddwd xmm1, xmm2, xmm3

                                  option avxencoding:prefer_EVEX
 00000026  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 0000002C  62 F1 6D 08/ F5        vpmaddwd xmm1, xmm2, xmm3
           CB

                                  option avxencoding:prefer_first
 00000032  62 F2 6D 08/ 50        vpdpbusd xmm1, xmm2, xmm3
           CB
 00000038  C5 E9/ F5 CB           vpmaddwd xmm1, xmm2, xmm3

См. также

Параметр (MASM)
Справочник по директивам