Zajrzałem do podręcznika programisty x64 i wygląda na to, że wbudowane instrukcje {MIN | MAX} {S | P} {S | D} nie implementują funkcji o nazwach minNum i maxNum w standardzie IEEE 754, mimo że Intel twierdzi w tym samym dokumencie, że jego procesory są w pełni zgodne.Architektura Intel i zgodność z IEEE 754 (minNum i maxNum)?
operacjeIntel zawsze zwróci drugą argument, jeśli którykolwiek z operandów jest QNaN i nie stanowi SNaN, natomiast minNum i MAXNUM zwrócić inne argument, a mianowicie:
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
Czy mam rację, że standardy -potrzebne funkcje minNum/maxNum muszą być emulowane z dodatkowym sprawdzeniem pierwszego operandu i nie mogą być bezpośrednio przetłumaczone na odpowiednie instrukcje?
wszystkich roszczeń * * Aby być zgodny ze standardem IEEE 754 ... –
wyszukiwania dla 'IEEE' w podręczniku instrukcji Intel znajdzie kilka przypadków, gdzie jest to określone dla starsze instrukcje x87: 'FPREM' (reszta) zaokrągla inaczej niż IEEE, ale' FPREM1' "oblicza resztę określoną w IEEE Standard 754". Więc przypuszczam, że w tamtych czasach Intel dodał nową wersję instrukcji do zaokrąglania w sposób określony przez IEEE. Możliwe, że mogliby wprowadzić nowe wersje instrukcji SSE 'min' i' max', ponieważ prawdopodobnie jest trochę miejsca na więcej kodów w przestrzeniach kodowania VEX (AVX) i EVEX (AVX512). –