Berechnung mit Floating-point: x87/SSE2

Hallo,

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;

was mache ich falsch?
was habe ich vergessen?

Danke,
Walter

Hallo,

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

Hallo,

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)

Grüße,
Walter