Как я могу установить и восстановить регистры FPU CTRL? - PullRequest
5 голосов
/ 10 октября 2008

Я могу сбросить регистры CTRL FPU следующим образом:

http://support.microsoft.com/kb/326219

Но как мне сохранить текущие регистры и восстановить их позже?

Это из .net кода ..

То, что я делаю, это от Delphi, вызывающего DLL-файл .net в качестве COM-модуля. Проверка регистров Ctrl в delphi дает одно значение, проверка с помощью controlfp в коде .net дает другое значение. Что мне нужно, так это главное:

_controlfp(_CW_DEFAULT, 0xfffff); 

Таким образом, мои вычисления с плавающей точкой в ​​коде .net не дают сбоя, но я хочу восстановить регистры Ctrl при возврате.

Может быть, нет? Может быть, Delphi сбрасывает их при необходимости? Я писал об этой проблеме здесь .

Ответы [ 2 ]

7 голосов
/ 13 октября 2008
uses
   SysUtils;

var
   SavedCW: Word;
begin
   SavedCW := Get8087CW;
   try
     Set8087CW($027f);
     // Call .NET code here
   finally
     Set8087CW(SavedCW);
   end;
end;
5 голосов
/ 10 октября 2008

Та же функция, которую вы используете для их изменения: _controlfp(). Если вы передадите маску 0, текущее значение не будет изменено, но оно будет возвращено - сохраните его и используйте второй вызов _controlfp(), чтобы восстановить его позже.

...