Moje pytanie dotyczy EVEX zakodowane spakowane instrukcją reg-reg bez zaokrąglania semantycznej który umożliwi kontrolę SAE (Usunięcie wszystkich wyjątków), takich jak Vmin *, VCVTT * VGETEXT * VREDUCE *, VRANGE * itd. Intel deklaruje SAE-aware tylko z pełną długością wektora 512-bitowego, np.AVX512 długość wektora i kontrola SAE
VMINPD xmm1 {k1}{z}, xmm2, xmm3
VMINPD ymm1 {k1}{z}, ymm2, ymm3
VMINPD zmm1 {k1}{z}, zmm2, zmm3{sae}
, ale nie widzę powodu, dla którego nie można zastosować SAE do instrukcji, w których używane są rejestry xmm lub ymm.
W rozdziale 4.6.4 z Intel Instruction Set Extensions Programming Reference Tabela 4-7 mówi, że w instrukcji bez zaokrąglania semantycznej bitowy EVEX.b SAE określa, że jest stosowana, a bity EVEX.L'L określić wyraźny długość wektora:
00b: 128bit (XMM)
01b: 256bit (YMM)
10b: 512bit (ZMM)
11b: reserved
, więc ich połączenie powinno być legalne.
Jednakże NASM montuje vminpd zmm1,zmm2,zmm3,{sae}
jako 62F1ED185DCB tj EVEX.L'L = 00b, EVEX.b = 1, która jest zdemontowana z powrotem przez NDISASM 2.12 vminpd xmm1,xmm2,xmm3
NASM odmawia montażu vminpd ymm1,ymm2,ymm3,{sae}
i NDISASM demontuje (62F1ED385DCB EVEX.L'L = 01b, EVEX.b = 1) vminpd xmm1,xmm2,xmm3
zastanawiam się w jaki sposób procesor Knights Landing wykonać VMINPD ymm1, ymm2, ymm3{sae}
(montowane jako 62F1ED385DCB, EVEX.L'L = 01b, EVEX.b = 1):
- Procesor generuje wyjątek. Intel doc Tabela 4-7 wprowadza w błąd.
- SAE działa, procesor działa z tylko xmm, tak samo jak w przypadku operacji skalarnych . NASM i NDISASM robią to dobrze, dokumentacja Intela jest błędna.
- SAE jest ignorowane, procesor pracuje z 256 bitami zgodnie ze specyfikacją VMINPD w dokumencie Intel. NASM & NDISASM są nieprawidłowe.
- SAE działa, procesor działa z 256 bitów zgodnie z kodem instrukcji . NASM i NDISASM są w błędzie, dokumentacja Intela musi być z dodatkowymi ozdobami instrukcji xmm/ymm z {sae}.
- SAE działa, procesor działa z dorozumianymi pełnymi rozmiarami wektorowymi 512 bitów, niezależnie od EVEX.L'L, tak samo, jakby dozwolone były statyczne zaokrąglenia {er} . NDISASM i Intel doc Tabela 4-7 są błędne.
Dobrze, że doktorzy mówią, że nie można tego zrobić, bez względu na szczegóły kodowania. Jednak odpowiedź Mysticial wskazuje, że EVEX.L'L pokrywa się z EVEX.RC, a EVEX.b wybiera, który z nich jest interpretowany. –
@PeterCordes Z wyjątkiem, jak wyjaśniono w pytaniu, Tabela 4-7 przeczy tej interpretacji. Mówi się, że dla "Instrukcji FP bez zaokrąglania semantycznego, może powodować #XF", że EVEX.b wybiera "Kontrolę SAE", podczas gdy EVEX.L'L określa długość wektora, a EVEX.RC nie ma zastosowania. Zgodnie z tabelą to typ instrukcji określa interpretację 'P2 [6: 5]'. Na przykład 'VMINPD ymm1, ymm2, [rax] {1to8}' ma ustawiony EVEX.b, a EVEX.L'L jest 01b, a EVEX.RC jest nie dotyczy. Problem z OP polega na tym, że to nie działa dla '{sae}'. Kodowanie, które chce, istnieje, ale jest po prostu niedozwolone. –
Początkowo zdecydowanie nie zgadzałem się z twoją odpowiedzią. Ale po szczegółowym zapoznaniu się z tabelą 4-7 ustaliłem, że plik PDF jest niekompletny lub sam w sobie zaprzecza. Instrukcje FP mają pojęcie "zaokrąglania semantyki". Ale w dokumencie nie ma listy, która określa, które instrukcje jej nie mają. Tabela 4-7 stwierdza, że 'P2 [6: 5]' jest zawsze interpretowane jako 'EVEX.L'L' dla instrukcji FP, którym brakuje" semantyki zaokrąglania ". – Mysticial