habe ein 32-bit Programm, welches unter Verwendung der x87-Befehle als auch der SSE2-Befehle eine Berechnung durchführt;
worin besteht jetzt der Unterschied, ob dieses Programm - der selbe Binärfile - unter einem 32-bit Windows (NT/2k/XP/Vista/7), auch der XP-mode von Win7 oder unter einem 64-bit Windows (XP/Vista/7) ausgeführt wird?
läuft es unter einem 64-bit Windows funktioniert es nicht - kein Fehler, nur falsche/ungültige Berechnung;
wegen der Genauigkeit werden die ersten Rechenschritte mit x87-Befehlen durchgeführt, und später im Verlauf die SSE2-Befehle zusätzlich verwendet;
verwendet es nur x87-Befehle oder nur SSE2-Befehle, so funktioniert es ohne Probleme, egal ob 32-bit od. 64-bit Windows;
ich nehme 'mal an, es handelt sich um eine Kombination von Hochsprache und liebevoll handpoliertem Assembler. Ich vermute weiter: Kann es sein, dass der Code, der den CPU-Typ feststellt, im Assemblercode ein paar Register rettet und dabei einfach fest eine Wortbreite von 32 bit annimmt und sich daran hinterher im 64-bit-Modus verschluckt?
Es ist sicher nur noch eine Winzigkeit…
Grüße, guidot
ja es ist eine Kombination aus Hochsprache (einzig die C/C++ Runtime MSVCRT.LIB wird gelinkt) und Assembler;
das Programm erkennt gar keinen CPU-Typ, es läuft auch nicht im 64-bit-Modus; im 64-bit Windows scheint der Prozess richtigerweise mit *32 im Taskmanager auf …
(der 64-bit MASM unterstützt kein Floating-Point mit x87-Befehlen)