Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wählt die bevorzugte Codierung von AVX-Anweisungen aus.
Syntax
OPTION AVXENCODING:Vorliebe
Hintergrund
Intel AVX- und AVX-512-Anweisungen werden anders codiert als andere Intel Architecture-Anweisungen. Anstatt sich auf Anweisungspräfixbytes und Opcode-Lead-In-Bytes zu verlassen, um eine Anweisung auszuwählen, verwenden sie ein einzelnes Multibytepräfix. Dieses Präfix kann einen zusätzlichen Registeropernden codieren. Im 64-Bit-Modus verfügt es auch über Bits, um 8 bis 15 für die anderen Operanden auszuwählen, und ein REX-Präfix ist nicht erforderlich.
Es werden drei verschiedene Multibytepräfixe verwendet. AVX-Anweisungen können mit einem 3-Byte-VEX-Präfix codiert werden, wobei die zweite und dritte Byte helfen, den bestimmten Vorgang auszuwählen, der ausgeführt wird. Wenn einige felder im 3-Byte-VEX-Präfix bestimmte Werte aufweisen, kann stattdessen ein 2-Byte-Formular des VEX-Präfixes verwendet werden. Schließlich verfügen einige AVX-Anweisungen auch über ein AVX-512-Formular, das mit einem 4-Byte EVEX-Präfix codiert ist. Das EVEX-Präfix enthält zusätzliche Felder, um die Länge des Vektors 512 Bit und andere optionen auszuwählen, die für AVX-512-Anweisungen spezifisch sind.
Da einige AVX-Anweisungen auf bis zu drei verschiedene Arten codiert werden können, gibt es Regeln zum Auswählen des zu verwendenden Formulars. Die OPTION AVXENCODING Direktive wird verwendet, um auszuwählen, welche Regelsätze verwendet werden sollen.
Einstellungen
| Einstellung | Priorität der Codierungseinstellung |
|---|---|
PREFER_FIRST |
Verwenden Sie nach Möglichkeit das erste definierte Formular. |
PREFER_VEX |
Verwenden Sie VEX die Codierung in der Voreinstellung für die EVEX Codierung. |
PREFER_VEX3 |
Verwenden Sie die 3-Byte-Codierung VEX vor der EVEX Codierung. |
PREFER_EVEX |
Verwenden Sie EVEX die Codierung in der Voreinstellung für die VEX Codierung. |
NO_EVEX |
Codieren Sie nicht mit EVEX. |
Die AVXENCODING-Reihenfolge gilt nur, wenn das Anweisungspräfixformular für die Anweisung nicht angegeben ist. Wenn das Anweisungspräfix explizit codiert ist, hat sie Vorrang vor der AVXENCODING Option. Verwenden Sie EVEXz. B. das Präfix "-präfix"VPMADDWD, evex vpmaddwd auch wenn OPTION AVXENCODING:no_EVEX sie angegeben ist.
Wenn eine Assemblyquelle nicht zum Auswählen von Codierungseinstellungen verwendet OPTION AVXENCODING wird, werden die PREFER_FIRST Regeln standardmäßig verwendet. Durch diese Regeln haben die frühesten Anweisungscodierungen, die Microsoft Macro Assembler (MASM) hinzugefügt haben, Vorrang, und unter diesen Möglichkeiten wird die Codierung mit der kürzesten Präfixform bevorzugt. Diese Regeln stellen sicher, dass code, der von MASM zusammengestellt wurde, weiterhin denselben Objektcode generiert, wenn später neue Anweisungsformulare hinzugefügt werden.
Die PREFER_VEX Regeln versuchen immer, mit einem VEX Präfix zu codieren, bevor versucht wird, mit EVEX. Wenn möglich, wird das 2-Byte-Formular VEX anstelle des 3-Byte-Formulars verwendet.
Die PREFER_VEX3 Einstellung versucht immer, mit einem 3-Byte-Präfix VEX zu codieren, bevor versucht wird, mit EVEX. Die 2-Byte-Form VEX wird nicht verwendet.
Die PREFER_EVEX Option versucht immer, ein EVEX Präfix zu codieren und nur zu verwenden VEX , wenn die Anweisung kein AVX-512-Formular aufweist.
Die NO_EVEX Einstellung versucht nur, mithilfe eines Präfixes VEX zu codieren. Es sind keine AVX-512-Anweisungsformulare zulässig. Mit dieser Option können Sie Code für die Verwendung auf Plattformen zusammenstellen, die über keine AVX-512-Unterstützung verfügen.
Die OPTION AVXENCODING Direktive ist in Visual Studio 2019, Version 16.7 und höher, verfügbar.
Beispiel
In diesem Beispiel wird VPDPBUSD VPMADDWD gezeigt, wie die AVXENCODING Option funktioniert. VPDPBUSD wurde zuerst so definiert, dass sie nur mit EVEX, und später mit einer VEX-codierten Form für Plattformen ohne AVX-512-Unterstützung erweitert wurde, während VPMADDWD AVX und auf AVX-512 erweitert wurde. Die Auflistungsausgabe aus der Zusammenstellung des Beispiels zeigt, wie sich das Ändern des Modus auf den AVXENCODING für jede Anweisung generierten Objektcode auswirkt. Das Präfix für jede Anweisung endet am "/".
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