Udostępnij za pośrednictwem


AVXENCODING OPCJI

Wybiera preferowane kodowanie instrukcji AVX.

Składnia

OPTION AVXENCODING:preferencja

Tło

Instrukcje intel AVX i AVX-512 są kodowane inaczej niż inne instrukcje dotyczące architektury Intel. Zamiast polegać na prefiksach instrukcji bajtach i bajtach potencjalnych klientów kodu opcode w celu wybrania instrukcji, używają one pojedynczego prefiksu wielobajtowego. Ten prefiks może kodować dodatkowy operand rejestru. W trybie 64-bitowym ma również bity do wybrania rejestrów od 8 do 15 dla innych operandów, a prefiks REX nie jest potrzebny.

Używane są trzy różne prefiksy wielo bajtowe. Instrukcje AVX można kodować za pomocą prefiksu VEX 3-bajtowego, gdzie druga i trzecia bajty pomagają wybrać określoną operację wykonaną. Jeśli niektóre pola w prefiksie VEX 3-bajtowym mają określone wartości, można użyć 2-bajtowego formularza prefiksu VEX. Na koniec niektóre instrukcje AVX mają również postać AVX-512, która jest kodowana z prefiksem EVEX 4-bajtowym. Prefiks EVEX zawiera dodatkowe pola do wybrania długości wektora 512-bitowego i innych opcji specyficznych dla instrukcji AVX-512.

Ponieważ niektóre instrukcje AVX mogą być kodowane na maksymalnie trzy różne sposoby, istnieją reguły umożliwiające wybranie formularza do użycia. Dyrektywa OPTION AVXENCODING służy do wybierania zestawu reguł do użycia.

Preferencje

Preferencja Priorytet preferencji kodowania
PREFER_FIRST Jeśli to możliwe, użyj pierwszego zdefiniowanego formularza.
PREFER_VEX Użyj VEX kodowania w preferencjach do EVEX kodowania.
PREFER_VEX3 Użyj kodowania 3-bajtowego VEX w preferencjach do EVEX kodowania.
PREFER_EVEX Użyj EVEX kodowania w preferencjach do VEX kodowania.
NO_EVEX Nie koduj przy użyciu polecenia EVEX.

Kolejność AVXENCODING ma zastosowanie tylko wtedy, gdy dla instrukcji nie określono formularza prefiksu instrukcji. Jeśli prefiks instrukcji jest jawnie zakodowany, ma pierwszeństwo przed opcją AVXENCODING . Na przykład evex vpmaddwd użyje EVEXparametru -prefiks, VPMADDWD nawet jeśli OPTION AVXENCODING:no_EVEX zostanie określony.

Jeśli źródło zestawu nie służy OPTION AVXENCODING do wybierania preferencji kodowania, PREFER_FIRST reguły są używane domyślnie. Zgodnie z tymi regułami pierwszeństwo mają najwcześniejsze kodowania instrukcji dodane do programu Microsoft Macro Assembler (MASM), a wśród tych możliwości preferowane jest kodowanie z najkrótszym formularzem prefiksu. Te reguły zapewniają, że kod złożony przez program MASM nadal generuje ten sam kod obiektu, jeśli nowe formularze instrukcji zostaną dodane później.

Reguły PREFER_VEX zawsze próbują zakodować prefiks przed próbą VEX zakodowania za pomocą polecenia EVEX. Jeśli to możliwe, 2-bajtowa forma VEX jest używana zamiast formularza 3-bajtowego.

Preferencja PREFER_VEX3 zawsze próbuje zakodować za pomocą prefiksu 3-bajtowego VEX przed próbą zakodowania za pomocą polecenia EVEX. Nie będzie używana forma 2-bajtowa VEX .

Opcja PREFER_EVEX zawsze próbuje zakodować prefiks EVEX i próbuje użyć VEX tylko wtedy, gdy instrukcja nie ma formularza AVX-512.

Preferencja NO_EVEX próbuje kodować tylko przy użyciu prefiksu VEX . Formularze instrukcji AVX-512 nie są dozwolone. Ta opcja umożliwia zebranie kodu do użycia na platformach, na których w ogóle nie ma obsługi avX-512.

Dyrektywa OPTION AVXENCODING jest dostępna w programie Visual Studio 2019 w wersji 16.7 lub nowszej.

Przykład

W tym przykładzie użyto VPDPBUSD instrukcji i VPMADDWD pokazano, jak AVXENCODING działa opcja. VPDPBUSD po raz pierwszy zdefiniowano kodowanie tylko z elementem EVEX, a później rozszerzono go o formularz zakodowany w formacie VEX dla platform bez obsługi AVX-512, a został VPMADDWD rozszerzony na AVX-512. Wyświetlenie listy danych wyjściowych z zestawu przykładu pokazuje, jak zmiana AVXENCODING trybu wpływa na kod obiektu wygenerowany dla każdej instrukcji. Prefiks dla każdej instrukcji kończy się 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

Zobacz też

Opcja (MASM)
Dokumentacja dyrektyw