Intel Beschreibung in ihren "future extensions" instruction set reference manual hat den üblichen Operation
Abschnitt, der vollständig spezifiziert, welche Bits gehen, wo.
Die Intrinsics Guide reproduziert auch die Operation
Abschnitt, die eine nette Abwechslung von einigen anderen schlecht dokumentierten Einträge im Intrinsics Guide ist. Oder vielleicht ist es eine neue Ergänzung. Es lässt immer noch die Tabellen und Diagramme weg. Normalerweise finde ich das Insn-Ref-Handbuch nützlicher, außer manchmal, wenn ich nach Anweisungen suche, an die ich vielleicht nicht gedacht oder von denen ich nichts weiß.
Der Abschnitt Betrieb für diesen Befehl ist lang und schwer zu grok, und die Textbeschreibung Englisch ist nur eine grobe Zusammenfassung:
Perform Fix-up in doppelter Genauigkeit codiert Quadwortelemente floating -Punktformat im ersten Quelloperanden (zweiter Operand) unter Verwendung einer 32-Bit-Zwei-Ebenen-Nachschlagetabelle, die im entsprechenden Vierfachwort-Element des zweiten Quelloperanden (dritter Operand) mit Ausnahmeberichtsspezifizierer imm8 angegeben ist
...
Die zweistufige Nachschlagetabelle führt eine Korrektur jeder DP-FP-Eingangsdaten im ersten Quelloperanden durch, indem die Eingangsdaten in 8 Tokentypen dekodiert werden. Für jeden Tokentyp wird eine Antworttabelle definiert, die die Eingabecodierung im ersten Quelloperanden mit einer von 16 Antwortaktionen konvertiert.
Der beabsichtigte Anwendungsfall ist:
- DEST = Ergebnis
rcppd
(oder ähnlich) + Newton- Raphson-Iteration
- src = Eingabe in die Approximation + Verfeinerungs
- table = Fixup Tabelle. Kann ein Broadcast-Speicheroperand sein, so dass nur 64 oder 32 Bit Speicher in dem allgemeinen Fall benötigt werden, in dem die gleiche Tabelle für jedes Element eines Vektors gewünscht wird. (Die Tabelle ist nur 32b für die einfache und die doppelte Genauigkeit, aber die Broadcast-Option der DP-Version ist m64bcst. Es ist in Ordnung, wenn die oberen 32 Bit unbrauchbar sind, aber nicht, um eine Seitengrenze in eine nicht zugeordnete Seite zu kreuzen Fehler wahrscheinlich)
Vielleicht ein ausführlichere englische wäre nützlich, um die Lücke zwischen dieser sehr groben Zusammenfassung zu überbrücken und der vollen Pseudo-Code.
Für jedes src Element:
tsrc
= Leuchtet die Denormalität auf Null, wenn MXCSR.DAZ
eingestellt ist. Der ursprüngliche src wird danach überhaupt nicht mehr verwendet: es gibt keine dest=src
Aktion, nur dest=tsrc
.
Kategorisieren tsrc
als einer von acht "Token" -Typen (QNAN, SNAN, Null, +1, -Inf, + Inf, negativer Wert, positiver Wert). Wenn das imm8 nicht Null ist, werden Ausnahmen ausgelöst, wenn ein Token des passenden Typs gefunden wird.
Verwenden Sie dieses Kategorie-Token zum Suchen einer Aktion im entsprechenden Element des dritten Operanden (eine Tabelle mit acht 4-Bit-Codes, einer für jedes Token).
Die Aktion kann eine der folgenden sein: dest = dest, dest = tsrc, dest = NaN, dest = +/- Inf, dest = Inf mit dem Vorzeichen von tsrc, dest = +/- 0, dest = +/-1, dest = 1/2, dest = 90,0, dest = pi/2 oder dest = MAX/MIN_FLOAT. Informationen dazu, welcher Code welcher Aktion zugeordnet ist, finden Sie in der Dokumentation von Intel.
Dieser Vorgang wird für jedes Vektorelement separat durchgeführt.
Eine typische Verwendung würde den Code dest=dest
für alle Fälle setzen, in denen die Ergebnisse, die wir beheben, bereits korrekt sind. Beachten Sie, dass dest
aufgrund der Aktion dest=dest
auch ein Eingabeoperand ist, auch ohne Schreibmaske.
Das ist viel detaillierter als ihre Online-Dokumentation, danke für die Referenz! –
Es ist immer noch ein ziemlich mieses Handbuch, wenn Sie mich fragen. Nicht die normale Qualität des Schreibens. Wenn ich eine CPU-Unterstützung AVX-512 hätte, würde ich es ausprobieren und sehen, was tatsächlich passiert;) – JCx
@JCx: Ich denke, die Pseudo-Code-Beschreibung dessen, was es tut, ist detailliert genug (die 'Operation'-Sektion). Der Absatz, den Sie angeben, gibt Ihnen nur den Anwendungsfall, nicht die operativen Details. Zusammenfassung: kategorisieren Sie es für jedes src-Element als einen von acht "Token" -Typen. Verwenden Sie dieses Token, um eine Aktion im entsprechenden Element des dritten Operanden (eine Tabelle mit acht 4-Bit-Codes) nachzuschlagen. Die Aktion kann dest = dest, dest = src, dest = NaN, dest = +/- Inf, dest = +/- 0, dest = pi/2 oder einige andere Dinge. Beachten Sie, dass dest auch ein Eingabeoperand ist, auch wenn keine Schreibmaske vorhanden ist. –