¿Cómo puedo configurar y restaurar los registros FPU CTRL?
Pregunta
Puedo restablecer los registros CTRL de FPU con esto:
http://support.microsoft.com/kb/326219
Pero, ¿cómo puedo guardar los registros actuales y restaurarlos más tarde?
Es del código .net ..
Lo que estoy haciendo es de Delphi llamando a un .net dll como módulo COM. Verificar los registros Ctrl en delphi produce un valor, verificar con controlfp en el código .net proporciona otro valor. Lo que necesito es esencial para hacer esto:
_controlfp(_CW_DEFAULT, 0xfffff);
Por lo tanto, mis cálculos de coma flotante en el código .net no se bloquean, pero quiero restaurar los registros Ctrl al regresar.
¿Quizás no? ¿Quizás Delphi los está reiniciando cuando sea necesario? Publiqué un blog sobre este problema aquí .
Solución
uses
SysUtils;
var
SavedCW: Word;
begin
SavedCW := Get8087CW;
try
Set8087CW($027f);
// Call .NET code here
finally
Set8087CW(SavedCW);
end;
end;
Otros consejos
La misma función que usa para cambiarlos: _controlfp ()
. Si pasa una máscara de 0, el valor actual no se alterará, pero se devolverá : guárdelo y use una segunda llamada a _controlfp ()
para restaurarlo más tarde.