Condividi tramite


OPZIONE AVXENCODING

Seleziona la codifica preferita delle istruzioni AVX.

Sintassi

OPTION AVXENCODING:preferenza

Background

Le istruzioni Intel AVX e AVX-512 sono codificate in modo diverso da altre istruzioni sull'architettura Intel. Anziché basarsi su byte di prefisso di istruzioni e byte di leadcode opcode per selezionare un'istruzione, usano un singolo prefisso multibyte. Questo prefisso può codificare un operando di registro aggiuntivo. In modalità a 64 bit, include anche bit per selezionare i registri da 8 a 15 per gli altri operandi e non è necessario un prefisso REX.

Vengono usati tre prefissi multi byte diversi. Le istruzioni AVX possono essere codificate con un prefisso VEX a 3 byte, in cui il secondo e il terzo byte consentono di selezionare l'operazione specifica eseguita. Se alcuni campi nel prefisso VEX a 3 byte hanno valori specifici, è possibile usare invece un formato a 2 byte del prefisso VEX. Infine, alcune istruzioni AVX hanno anche un modulo AVX-512, codificato con un prefisso EVEX a 4 byte. Il prefisso EVEX include campi aggiuntivi per selezionare la lunghezza del vettore a 512 bit e altre opzioni specifiche per le istruzioni AVX-512.

Poiché alcune istruzioni AVX potrebbero essere codificate in un massimo di tre modi diversi, esistono regole per selezionare il modulo da usare. La OPTION AVXENCODING direttiva viene usata per selezionare il set di regole da usare.

Preferenze

Preferenza Priorità delle preferenze di codifica
PREFER_FIRST Utilizzare il primo modulo definito, se possibile.
PREFER_VEX Usare VEX la codifica in preferenza per la EVEX codifica.
PREFER_VEX3 Usare la codifica a 3 byte VEX in preferenza per la EVEX codifica.
PREFER_EVEX Usare EVEX la codifica in preferenza per la VEX codifica.
NO_EVEX Non codificare con EVEX.

L'ordine AVXENCODING si applica solo se il formato del prefisso dell'istruzione non è specificato per l'istruzione. Se il prefisso dell'istruzione viene codificato in modo esplicito, ha la precedenza sull'opzione AVXENCODING . Ad esempio, evex vpmaddwd userà EVEX-prefixed VPMADDWD anche se OPTION AVXENCODING:no_EVEX è specificato.

Se un'origine assembly non usa OPTION AVXENCODING per selezionare le preferenze di codifica, le PREFER_FIRST regole vengono usate per impostazione predefinita. In base a queste regole, le prime codifiche di istruzioni aggiunte a Microsoft Macro Assembler (MASM) hanno la precedenza e tra queste possibilità la codifica con il formato di prefisso più breve è preferibile. Queste regole assicurano che il codice assemblato da MASM generi comunque lo stesso codice oggetto se vengono aggiunti nuovi moduli di istruzione in un secondo momento.

Le PREFER_VEX regole tentano sempre di codificare con un VEX prefisso prima di provare a codificare con EVEX. Se possibile, viene utilizzata la forma a 2 byte di VEX anziché il formato a 3 byte.

La PREFER_VEX3 preferenza tenta sempre di codificare con un prefisso a 3 byte VEX prima di provare a codificare con EVEX. La forma a 2 byte di VEX non verrà usata.

L'opzione PREFER_EVEX tenta sempre di codificare con un EVEX prefisso e tenta di usare VEX solo se l'istruzione non ha un modulo AVX-512.

La NO_EVEX preferenza tenta solo di codificare usando un VEX prefisso. Non sono consentiti moduli di istruzioni AVX-512. Questa opzione consente di assemblare il codice per l'uso su piattaforme che non dispongono di alcun supporto AVX-512.

La OPTION AVXENCODING direttiva è disponibile in Visual Studio 2019 versione 16.7 e successive.

Esempio

Questo esempio usa e VPMADDWD istruzioni per illustrare VPDPBUSD il funzionamento dell'opzioneAVXENCODING. VPDPBUSD è stato definito per la prima volta in modo da essere codificato solo con EVEXed è stato successivamente esteso con un modulo con codifica VEX per le piattaforme senza supporto AVX-512, mentre VPMADDWD AVX-512 è stato esteso ad AVX-512. L'output dell'elenco dall'assemblaggio dell'esempio mostra come la modifica della AVXENCODING modalità influisce sul codice oggetto generato per ogni istruzione. Il prefisso per ogni istruzione termina in corrispondenza di "/".

 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

Vedi anche

Opzione (MASM)
Riferimento a direttive