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 EVEX
parametr -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