/QIPF_fr32 (上位 96 ビットの浮動小数点レジスタの使用の禁止)
Itanium のコンパイルを実行するときに、下位 32 ビットの浮動小数点レジスタだけを使用し、上位 96 ビットの浮動小数点レジスタを使用しないようにコンパイラに指示します。
/QIPF_fr32
解説
[!メモ]
/QIPF_fr32 は Itanium に対応するコンパイラでのみ使用できます。このコンパイラ オプションは、x64 や x86 に対応するコンパイラでは使用できません。
カーネル モード コンテキストで実行するデバイス ドライバーを作成するときは、/QIPF_fr32 を指定してコンパイルすることを強くお勧めします。アプリケーションがカーネル モード以外のモードに切り替わり、その上位 96 ビット レジスタの 1 つが破棄されていると、割り込みが発生した場合のユーザー モードへの切り替え時にアプリケーションが失敗する場合があります。次に例を示します。
割り込みが発生すると、アプリケーションはユーザー モードで実行します。
制御はカーネルに渡され、上位 96 ビットの浮動小数点レジスタは保存されません。
カーネルは、/QIPF_fr32 を指定せずにコンパイルされたドライバーを呼び出します。
このドライバーは、上位ビットの浮動小数点レジスタの 1 つを破棄します。
ドライバーがカーネル モードに戻ります。
カーネルが割り込みから戻り、アプリケーションの上位ビットの浮動小数点レジスタの 1 つが破棄されています。
/QIPF_fr32 を使用することで、ユーザー モードからカーネル モードに切り替わるアプリケーションが正確に動作するだけでなく、ユーザー モードでのコンテキストの変更のパフォーマンスも向上します。上位 96 ビットの浮動小数点レジスタを保存したり再読み込みしたりする必要はありません。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
- /QIPF_fr32 は、Visual Studio 開発環境では使用できません。
このコンパイラ オプションをコードから設定するには
- AdditionalOptions を参照してください。