Como posso definir e restaurar registradores FPU CTRL?
Pergunta
Eu posso redefinir registros CTRL da FPU com este:
http://support.microsoft.com/kb/326219
Mas como posso salvar registros atuais, e restaurá-los mais tarde?
É a partir do código .net ..
O que eu estou fazendo, é de Delphi chamar um .net dll como um módulo COM. Verificar o Ctrl registros em delphi deu um valor, verificando com controlfp no código .net dá outro valor. O que eu preciso, é no essencial é fazer isso:
_controlfp(_CW_DEFAULT, 0xfffff);
Então meus cálculos de ponto flutuante no código .net não falhar, mas eu quero restaurar o Ctrl registros quando retornar.
Talvez eu não? Talvez Delphi está redefinindo-los quando necessário? Eu escrevi sobre este problema aqui .
Solução
uses
SysUtils;
var
SavedCW: Word;
begin
SavedCW := Get8087CW;
try
Set8087CW($027f);
// Call .NET code here
finally
Set8087CW(SavedCW);
end;
end;
Outras dicas
A mesma função que você usa para alterá-los: _controlfp()
. Se você passar em uma máscara de 0, o valor atual não será alterado, mas irá ser devolvido -. Salvá-lo, e usar uma segunda chamada para _controlfp()
para restaurá-lo mais tarde