OPTION AVXENCODING

Sélectionne l’encodage préféré des instructions AVX.

Syntaxe

OPTION AVXENCODING:préférence

Background

Les instructions Intel AVX et AVX-512 sont encodées différemment des autres instructions de l’architecture Intel. Au lieu de compter sur des octets de préfixe d’instruction et des octets de prospects pour sélectionner une instruction, ils utilisent un préfixe multioctet unique. Ce préfixe peut encoder un opérande de registre supplémentaire. En mode 64 bits, il a également des bits pour sélectionner les registres 8 à 15 pour les autres opérandes, et un préfixe REX n’est pas nécessaire.

Trois préfixes multioctets différents sont utilisés. Les instructions AVX peuvent être encodées avec un préfixe VEX de 3 octets, où les deuxième et troisième octets permettent de sélectionner l’opération spécifique exécutée. Si certains des champs du préfixe VEX de 3 octets ont des valeurs spécifiques, une forme de 2 octets du préfixe VEX peut être utilisée à la place. Enfin, certaines instructions AVX ont également un formulaire AVX-512, qui est encodé avec un préfixe EVEX de 4 octets. Le préfixe EVEX comporte des champs supplémentaires pour sélectionner la longueur du vecteur 512 bits et d’autres options spécifiques aux instructions AVX-512.

Étant donné que certaines instructions AVX peuvent être encodées de trois façons différentes, il existe des règles pour sélectionner le formulaire à utiliser. La OPTION AVXENCODING directive est utilisée pour sélectionner l’ensemble de règles à utiliser.

Préférences

Préférence Priorité de préférence d’encodage
PREFER_FIRST Utilisez le formulaire défini en premier si possible.
PREFER_VEX Utilisez l’encodage VEX en préférence pour l’encodage EVEX .
PREFER_VEX3 Utilisez l’encodage de 3 octets VEX en préférence pour l’encodage EVEX .
PREFER_EVEX Utilisez l’encodage EVEX en préférence pour l’encodage VEX .
NO_EVEX N’encodez pas à l’aide EVEXde .

L’ordre AVXENCODING s’applique uniquement si le formulaire de préfixe d’instruction n’est pas spécifié pour l’instruction. Si le préfixe d’instruction est explicitement codé, il est prioritaire sur l’option AVXENCODING . Par exemple, evex vpmaddwd utilise EVEX-prefixed VPMADDWD même si OPTION AVXENCODING:no_EVEX elle est spécifiée.

Si une source d’assembly n’est pas utilisée OPTION AVXENCODING pour sélectionner les préférences d’encodage, les PREFER_FIRST règles sont utilisées par défaut. Par ces règles, les encodages d’instructions les plus anciens ajoutés à Microsoft Macro Assembleur (MASM) sont prioritaires et, parmi ces possibilités, l’encodage avec le formulaire de préfixe le plus court est préféré. Ces règles garantissent que le code assemblé par MASM génère toujours le même code objet si de nouveaux formulaires d’instruction sont ajoutés ultérieurement.

Les PREFER_VEX règles essaient toujours d’encoder avec un VEX préfixe avant d’essayer d’encoder avec EVEX. Si possible, la forme de 2 octets est VEX utilisée au lieu du formulaire de 3 octets.

La PREFER_VEX3 préférence tente toujours d’encoder avec un préfixe de 3 octets VEX avant d’essayer d’encoder avec EVEX. La forme de 2 octets de VEX ne sera pas utilisée.

L’option PREFER_EVEX tente toujours d’encoder avec un EVEX préfixe et tente uniquement d’utiliser VEX si l’instruction n’a pas de formulaire AVX-512.

La NO_EVEX préférence tente uniquement d’encoder à l’aide d’un VEX préfixe. Aucun formulaire d’instruction AVX-512 n’est autorisé. Cette option vous permet d’assembler du code à utiliser sur des plateformes qui n’ont pas de prise en charge AVX-512 du tout.

La OPTION AVXENCODING directive est disponible dans Visual Studio 2019 version 16.7 et ultérieures.

Exemple

Cet exemple utilise VPDPBUSD et VPMADDWD des instructions pour illustrer le fonctionnement de l’option AVXENCODING . VPDPBUSD a d’abord été défini pour être encodé uniquement avec EVEX, et a été étendu ultérieurement avec un formulaire encodé VEX pour les plateformes sans prise en charge AVX-512, tandis que VPMADDWD AVX et étendu à AVX-512. La sortie de liste de l’assemblage de l’exemple montre comment modifier le AVXENCODING mode affecte le code d’objet généré pour chaque instruction. Le préfixe de chaque instruction se termine à « / ».

 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

Voir aussi

Option (MASM)
Informations de référence sur les directives