Come posso impostare e ripristinare i registri CTRL FPU?
Domanda
Posso ripristinare i registri CTRL di FPU con questo:
http://support.microsoft.com/kb/326219
Ma come posso salvare i registri attuali e ripristinarli in seguito?
Viene dal codice .net ..
Quello che sto facendo, è da Delphi che chiama una DLL .net come modulo COM. Controllando i registri Ctrl in delphi si ottiene un valore, controllando con controlfp nel codice .net si ottiene un altro valore. Ciò di cui ho bisogno è essenziale per fare questo:
_controlfp(_CW_DEFAULT, 0xfffff);
Quindi i miei calcoli in virgola mobile nel codice .net non si arrestano in modo anomalo, ma voglio ripristinare i registri Ctrl al ritorno.
Forse no? Forse Delphi li sta ripristinando quando necessario? Ho scritto un blog su questo problema qui .
Soluzione
uses
SysUtils;
var
SavedCW: Word;
begin
SavedCW := Get8087CW;
try
Set8087CW($027f);
// Call .NET code here
finally
Set8087CW(SavedCW);
end;
end;
Altri suggerimenti
Stessa funzione che usi per cambiarli: _controlfp ()
. Se passi una maschera di 0, il valore corrente non verrà modificato, ma verrà restituito - salvalo e usa una seconda chiamata a _controlfp ()
per ripristinarlo in seguito.