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 EVEX
ed è 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