Ich habe mir das x64-Softwareentwickler-Handbuch angesehen und es sieht so aus, als ob die eingebauten {MIN | MAX} {S | P} {S | D} -Anweisungen die Funktionen minNum und maxNum nicht implementieren im IEEE 754-Standard, obwohl Intel im selben Dokument behauptet, dass ihre CPUs vollständig kompatibel sind.Intel-Architektur und IEEE 754-Konformität (minNum und maxNum)?
Intel Operationen zurückkehren immer die Sekunden Operanden, wenn einer der Operanden ein QNaN ist und weder eine SNaN, während minNum und MAXNUM die anderen Operand zurückzukehren, das heißt:
IEE 754:
minNum(1.0, QNaN) -> 1.0
minNum(QNaN, 1.0) -> 1.0
Intel x64:
MIN(1.0, QNaN) -> QNaN
MIN(QNaN, 1.0) -> 1.0
Bin ich diesen Standard korrigieren -konforme minNum/maxNum-Funktionen müssen mit einer zusätzlichen Prüfung des ersten Operanden emuliert werden und können nicht direkt in die entsprechenden Anweisungen übersetzt werden?
jeden benutzen * Ansprüche * IEEE 754-kompatibel zu sein ... –
Suche nach 'IEEE' in dem Befehlsreferenzhandbuch Intel findet ein paar Fälle, in denen es bezeichnet ist für Legacy x87-Anweisungen: 'FPREM' (Rest) wird anders als IEEE gerundet, aber' FPREM1' berechnet den Rest, der in IEEE Standard 754 spezifiziert ist. Also ich denke, damals hat Intel eine neue Version einer Anweisung hinzugefügt, um den IEEE-spezifizierten Weg zu runden. Es ist möglich, dass sie neue Versionen der SSE- "min" - und "max" -Instruktionen einführen können, da wahrscheinlich mehr Platz für weitere Opcodes in den VX (AVX) - und EVEX (AVX512) -Codierungsräumen vorhanden ist. –