Как я могу установить и восстановить регистры FPU CTRL?

StackOverflow https://stackoverflow.com/questions/191368

  •  08-07-2019
  •  | 
  •  

Вопрос

Я могу сбросить регистры CTRL FPU с помощью этого:

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

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

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

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

_controlfp(_CW_DEFAULT, 0xfffff); 

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

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

Это было полезно?

Решение

uses
   SysUtils;

var
   SavedCW: Word;
begin
   SavedCW := Get8087CW;
   try
     Set8087CW($027f);
     // Call .NET code here
   finally
     Set8087CW(SavedCW);
   end;
end;

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top