Compartilhar via


OPTION AVXENCODING

Seleciona a codificação preferencial de instruções AVX.

Sintaxe

OPTION AVXENCODING:preferência

Tela de fundo

As instruções Intel AVX e AVX-512 são codificadas de modo diferente de outras instruções da Arquitetura Intel. Em vez de depender de bytes de prefixo de instrução e bytes de entrada de opcode para selecionar uma instrução, eles usam um único prefixo de vários bytes. Esse prefixo pode codificar um operando de registro adicional. No modo de 64 bits, ele também tem bits para selecionar os registros de 8 a 15 para os outros operandos, e um prefixo REX não é necessário.

São usados três prefixos de multibyte diferentes. As instruções AVX podem ser codificadas com um prefixo VEX de 3 bytes, em que o segundo e o terceiro bytes ajudam a selecionar a operação específica executada. Se alguns dos campos no prefixo VEX de 3 bytes tiverem valores específicos, um formato de 2 bytes do prefixo VEX poderá ser usado. Por fim, algumas instruções AVX também têm um formato AVX-512, que é codificada com um prefixo EVEX de 4 bytes. O prefixo EVEX tem campos adicionais para selecionar o comprimento do vetor de 512 bits e outras opções específicas das instruções do AVX-512.

Como algumas instruções do AVX podem ser codificadas de até três maneiras diferentes, há regras para selecionar qual formato usar. A diretiva OPTION AVXENCODING é usada para selecionar qual conjunto de regras usar.

Preferências

Preferência Prioridade de preferência de codificação
PREFER_FIRST Use o primeiro formato definido, se possível.
PREFER_VEX Dê preferência para a codificação VEX em vez da EVEX.
PREFER_VEX3 Dê preferência para a codificação VEX de 3 bytes em vez da EVEX.
PREFER_EVEX Dê preferência para a codificação EVEX em vez da VEX.
NO_EVEX Não codifique usando EVEX.

A ordem AVXENCODING só se aplicará se o formato de prefixo da instrução não for especificado para a instrução. Se o prefixo da instrução for codificado explicitamente, ele terá precedência sobre a opção AVXENCODING. Por exemplo, evex vpmaddwd usará VPMADDWD com prefixo EVEX mesmo se OPTION AVXENCODING:no_EVEX for especificado.

Se uma fonte de assembly não usar OPTION AVXENCODING para selecionar preferências de codificação, as regras PREFER_FIRST serão usadas por padrão. Por essas regras, as primeiras codificações de instrução adicionadas ao MASM (Microsoft Macro Assembler) têm precedência e, entre essas possibilidades, a codificação com o formato de prefixo mais curto é preferencial. Essas regras garantem que o código montado pelo MASM ainda gere o mesmo código de objeto se novas formas de instrução forem adicionadas posteriormente.

As regras PREFER_VEX sempre tentam codificar com um prefixo VEX antes de tentar codificar com EVEX. Se possível, o formato de 2 bytes de VEX é usado em vez do formato de 3 bytes.

A preferência PREFER_VEX3 sempre tenta codificar com um prefixo VEX de 3 bytes antes de tentar codificar com EVEX. O formato de 2 bytes de VEX não será usado.

A opção PREFER_EVEX sempre tenta codificar com um prefixo EVEX e só tentará usar VEX se a instrução não tiver um formato AVX-512.

A preferência NO_EVEX só tenta codificar usando um prefixo VEX. Nenhuma forma de instrução AVX-512 é permitida. Essa opção permite que você monte código para uso em plataformas que não dão suporte a AVX-512.

A diretiva OPTION AVXENCODING está disponível no Visual Studio 2019 versão 16.7 e posterior.

Exemplo

Este exemplo usa as instruções VPDPBUSD e VPMADDWD para ilustrar como a opção AVXENCODING funciona. VPDPBUSD foi definido pela primeira vez para ser codificado apenas com EVEX, e mais tarde foi estendido com um formato codificado em VEX para plataformas sem suporte a AVX-512, enquanto VPMADDWD era AVX e estendido para AVX-512. A saída de listagem da montagem do exemplo mostra como a alteração do modo AVXENCODING afeta o código de objeto gerado para cada instrução. O prefixo para cada instrução termina em '/".

 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

Confira também

Opção (MASM)
Referência de diretivas