FPU CTRLレジスタを設定および復元するにはどうすればよいですか?

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

  •  08-07-2019
  •  | 
  •  

質問

これでFPUのCTRLレジスタをリセットできます:

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

しかし、現在のレジスタを保存して後で復元するにはどうすればよいですか

.netコードからのものです。

私がやっているのは、Delphiが.net dllをCOMモジュールとして呼び出すことです。 delphiの Ctrl レジスタをチェックすると1つの値が得られ、.netコードのcontrolfpでチェックすると別の値が得られます。 必要なのは、これを行うことです。

_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()の2回目の呼び出しを使用します後で復元します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top