[FIX] _controlfp() で Flush-to-Zero モードを設定できない

Windows XP のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Windows XP のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

この記事は、以前は次の ID で公開されていました: JP307611
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
_controlfp( _DN_FLUSH, _MCW_DN) を呼び出しても、IA64 アプリケーションに対して flush-to-zero モードが有効になりません。
原因
この問題は、IA64 C Run-Time ライブラリの不具合が原因で発生しています。
解決方法
この問題を解決するには、Windows XP の最新の Service Pack を入手します。関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
322389 最新の Windows XP Service Pack を入手する方法
修正プログラム (英語版) の属性は次のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。

日付時刻バージョンサイズ名前プラットフォーム
24-Sep-200110:587.0.2600.14 (xpclnt_qfe.010827-1804)941,056Msvcrt.dllIA64



この問題は、2001 年 8 月以降にリリースされた Platform Software Development Kit (SDK) (ビルド 9234) の Win64 ツールで IA64 アプリケーションが作成されている場合に発生します。この修正プログラムは、CRT .dll ファイルに対してのみ有効です。CRT スタティック ライブラリの修正プログラムは、今後の Platform SDK に組み込まれて提供される予定です。
状況
マイクロソフトでは、この問題をこの資料の冒頭に記載したマイクロソフト製品の問題として認識しています。この問題は、Windows XP Service Pack 1 で修正済みです。
詳細
この問題を再現するには、以下のサンプル コードと 64 ビット C/C++ コンパイラおよびリンカ (これは Windows Platform SDK の 64 ビット ツールで使用できます) を使用して、64 ビット バイナリを作成します。_controlfp 関数の位置にブレークポイントを挿入し、(64 ビット用の) WinDbg デバッガでこのサンプル コードを実行します。_controlfp 関数が実行される前後で "fpsr" レジスタの値を調べます。_controlfp が呼び出された後、6 番目の最下位ビット (0 ベース) が設定されていないことを確認してください。この修正プログラムをインストールすると、このビットが設定されるようになります。
#include <stdio.h>#include <float.h>int main( int argc, char ** argv){  printf( "Before calling _controlfp()\n");  _controlfp( _DN_FLUSH, _MCW_DN);  printf( "After calling _controlfp()\n");}
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 307611 (最終更新日 2002-09-05) をもとに作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

"Denormals as Zeroes" ftz sf0
プロパティ

文書番号:307611 - 最終更新日: 02/24/2014 15:36:27 - リビジョン: 4.3

  • Microsoft Windows XP Professional x64 Edition
  • The C Run-Time (CRT)
  • kbnosurvey kbarchive kbbug kbfix kbgrpdsvc kboswin2000fix kbwinxpsp1fix kbhotfixserver KB307611
フィードバック