Sdílet prostřednictvím


OPTION AVXENCODING

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

Viz také

Možnost (MASM)
Referenční dokumentace k direktivám