Как я могу установить и восстановить регистры 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() чтобы восстановить это позже.

Другие вопросы по тегам