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