Как я могу установить и восстановить регистры FPU CTRL?
Я могу сбросить регистры CTRL FPU с помощью этого:
http://support.microsoft.com/kb/326219
Но как я могу сохранить текущие регистры и восстановить их позже?
Это из.net кода..
То, что я делаю, это от Delphi, вызывающего.net dll в качестве COM-модуля. Проверка регистров Ctrl в delphi дает одно значение, проверка с помощью controlfp в коде.net дает другое значение. Что мне нужно, так это главное:
_controlfp(_CW_DEFAULT, 0xfffff);
Таким образом, мои вычисления с плавающей точкой в коде.net не дают сбоя, но я хочу восстановить регистры Ctrl при возврате.
Может я не? Может быть, Delphi сбрасывает их при необходимости? Я писал об этой проблеме здесь.
2 ответа
uses
SysUtils;
var
SavedCW: Word;
begin
SavedCW := Get8087CW;
try
Set8087CW($027f);
// Call .NET code here
finally
Set8087CW(SavedCW);
end;
end;
Та же функция, которую вы используете для их изменения: _controlfp()
, Если вы передадите маску 0, текущее значение не будет изменено, но оно будет возвращено - сохраните его и используйте второй вызов _controlfp()
чтобы восстановить это позже.