Meine Frage betrifft EVEX-kodierte verpackt reg-reg Anweisungen ohne semantische Rundung, die SAE Kontrolle ermöglichen (Unterdrückt alle Ausnahmen), wie VMIN *, VCVTT *, VGETEXT *, VREDUCE *, VRANGE * etc. Intel deklariert SAE-Awareness nur mit voller 512bit Vektorlänge, zAVX512 Vektorlänge und SAE Steuer
aber ich sehe keinen Grund, warum SAE nicht auf Anweisungen angewendet werden konnte, bei denen Xmm- oder Ymm-Register verwendet werden.
In Kapitel 4.6.4 von Intel Instruction Set Extensions Programming Reference Tabelle 4-7 sagt, dass in Anweisungen ohne semantischen Bit EVEX.b Rundungs gibt an, dass SAE angelegt wird, und die Bits EVEX.L'L explizite Vektorlänge angeben:
00b: 128bit (XMM)
01b: 256bit (YMM)
10b: 512bit (ZMM)
11b: reserved
so sollte ihre Kombination legal sein.
jedoch assembliert NASM vminpd zmm1,zmm2,zmm3,{sae}
als 62F1ED185DCB, dh EVEX.L'L = 00b, EVEX.b = 1 ist, die durch Rück NDISASM 2.12 vminpd xmm1,xmm2,xmm3
zerlegt
NASM weigert zu montieren vminpd ymm1,ymm2,ymm3,{sae}
und NDISASM disassembliert 62F1ED385DCB (EVEX.L'L = 01b, EVEX.b = 1) als vminpd xmm1,xmm2,xmm3
ich frage mich, wie funktioniert Ritter Landing CPU ausführen VMINPD ymm1, ymm2, ymm3{sae}
(als 62F1ED385DCB montiert, EVEX.L'L = 01b, EVEX.b = 1):
- CPU löst eine Ausnahme aus. Intel doc Tabelle 4-7 ist irreführend.
- SAE ist in Wirklichkeit, CPU arbeitet mit xmm nur, wie in Skalar Operationen. NASM und NDISASM machen es richtig, Intel Dokumentation ist falsch.
- SAE wird ignoriert, CPU arbeitet mit 256 Bit gemäß VMINPD Spezifikation in Intel Doc. NASM & NDISASM sind falsch.
- SAE ist tatsächlich, CPU arbeitet mit 256 Bits, wie in Befehlscode angegeben. NASM und NDISASM sind falsch, Intel Doc muss zusätzliche dekorieren xmm/ymm Anweisungen mit {sae}.
- SAE ist tatsächlich, CPU arbeitet mit implizierten voller Vektorgröße 512 Bits, unabhängig von EVEX.L'L, als ob statische Rundungen {er} zulässig wären. NDISASM und Intel doc Tabelle 4-7 sind falsch.
Gut, dass die Dokumentation sagt, Sie können es nicht tun, unabhängig von der Codierung Details. Die Antwort von Mysticial weist jedoch darauf hin, dass sich EVEX.L'L mit EVEX.RC überschneidet, und EVEX.b wählt aus, mit welcher Version sie interpretiert werden. –
@PeterCordes Außer, wie in der Frage erläutert, widerspricht Tabelle 4-7 dieser Interpretation. Es besagt, dass bei "FP-Anweisungen ohne Rundungssemantik #XF verursachen kann", dass EVEX.b "SAE Control" auswählt, während EVEX.L'L die Vektorlänge bestimmt und EVEX.RC nicht anwendbar ist. Nach der Tabelle bestimmt der Befehlstyp die Interpretation von 'P2 [6: 5]'. So hat zum Beispiel 'VMINPD ymm1, ymm2, [rax] {1to8}' EVEX.b gesetzt, während EVEX.L'L 01b ist und EVEX.RC ist N/A. Das OP-Problem ist, dass dies nicht für '{sae}' funktioniert. Die Kodierung, die er will, existiert, aber es ist einfach nicht erlaubt. –
Zunächst stimmte ich Ihrer Antwort nicht zu. Aber nachdem ich Tabelle 4-7 ausführlich durchgegangen bin, habe ich festgestellt, dass das PDF entweder unvollständig ist oder sich selbst widerspricht. FP-Befehle haben das Konzept der "Rundungssemantik". Aber es gibt keine Liste im Dokument, die angibt, welche Anweisungen fehlen. Tabelle 4-7 besagt, dass 'P2 [6: 5]' immer als 'EVEX.L'L' für FP-Anweisungen interpretiert wird, denen" Rundungssemantik "fehlt. – Mysticial