Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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