Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vybere upřednostňované kódování pokynů AVX.
Syntaxe
OPTION AVXENCODING:preference
Pozadí
Instrukce Intel AVX a AVX-512 jsou kódovány jinak než jiné instrukce architektury Intel. Místo toho, aby se spoléhaly na bajty předpony instrukce a opcode lead-in bajty k výběru instrukce, používají jednu předponu s více bajty. Tato předpona může kódovat další operand registru. V 64bitovém režimu má také bity pro výběr registrů 8 až 15 pro ostatní operandy a předpona REX není nutná.
Používají se tři různé předpony s více bajty. Instrukce AVX lze zakódovat pomocí předpony VEX s 3 bajty, kde druhý a třetí bajt pomáhá vybrat konkrétní spuštěnou operaci. Pokud některá pole v předponě VEX s 3 bajty mají určité hodnoty, můžete místo toho použít 2 bajtovou formu předpony VEX. Některé instrukce AVX mají také formulář AVX-512, který je kódován se 4 bajtovou předponou EVEX. Předpona EVEX obsahuje další pole pro výběr délky vektoru 512 bitů a dalších možností specifických pro pokyny AVX-512.
Vzhledem k tomu, že některé instrukce AVX mohou být kódovány až třemi různými způsoby, existují pravidla, která formulář použít. Direktiva OPTION AVXENCODING slouží k výběru sady pravidel, která se mají použít.
Předvolby
| Preference | Priorita předvoleb kódování |
|---|---|
PREFER_FIRST |
Pokud je to možné, použijte první definovaný formulář. |
PREFER_VEX |
K kódování použijte VEX kódování.EVEX |
PREFER_VEX3 |
K kódování EVEX použijte kódování 3 bajtůVEX. |
PREFER_EVEX |
K kódování použijte EVEX kódování.VEX |
NO_EVEX |
Nepoužívejte kódování pomocí EVEX. |
Pořadí AVXENCODING platí pouze v případě, že pro instrukce není zadaný formulář předpony instrukce. Pokud je předpona instrukce explicitně zakódovaná, má přednost před AVXENCODING možností. Například evex vpmaddwd použije EVEXparametr -prefixed VPMADDWD , i když OPTION AVXENCODING:no_EVEX je zadaný.
Pokud zdroj sestavení nepoužívá OPTION AVXENCODING k výběru předvoleb kódování, PREFER_FIRST pravidla se ve výchozím nastavení používají. Podle těchto pravidel mají přednost nejstarší kódování instrukcí přidané do microsoft Macro Assembleru (MASM) a mezi těmito možnostmi je upřednostňované kódování s nejkratším formulářem předpony. Tato pravidla zajišťují, aby kód sestavený masm stále vygeneroval stejný objektový kód, pokud se později přidají nové instrukční formuláře.
Pravidla PREFER_VEX se vždy pokusí kódovat pomocí VEX předpony před tím, než se pokusíte kódovat pomocí EVEX. Pokud je to možné, použije se 2 bajtová VEX forma namísto 3bajtů.
Předvolba PREFER_VEX3 se vždy pokusí kódovat pomocí předpony 3 bajtů VEX před pokusem o kódování pomocí EVEX. 2 bajtová VEX forma se nepoužije.
Možnost PREFER_EVEX se vždy pokusí zakódovat s předponou EVEX a pokusí se použít VEX pouze v případě, že instrukce nemá žádný formulář AVX-512.
Předvolba NO_EVEX se pokusí kódovat pouze pomocí předpony VEX . Nejsou povoleny žádné instrukční formuláře AVX-512. Tato možnost umožňuje sestavit kód pro použití na platformách, které nemají podporu AVX-512 vůbec.
Direktiva OPTION AVXENCODING je k dispozici v sadě Visual Studio 2019 verze 16.7 a novější.
Příklad
Tento příklad používá VPDPBUSD a VPMADDWD pokyny k ilustraci toho, jak AVXENCODING tato možnost funguje. VPDPBUSD byla nejprve definována tak, aby byla kódována pouze pomocí EVEX, a později byla rozšířena s veX kódovaným formulářem pro platformy bez podpory AVX-512, zatímco VPMADDWD AVX a rozšířena na AVX-512. Výpis výstupu ze sestavení příkladu ukazuje, jak změna AVXENCODING režimu ovlivňuje kód objektu vygenerovaný pro každou instrukci. Předpona pro každou instrukci končí na /.
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