OPTION AVXENCODING

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

Siehe auch

Option (MASM)
Anweisungen – Referenz