3

SSE レジスターに 32 ビット int として表現できない 1 つ以上のパックされた値 (Infまたは など) が含まれており、 /NaNなどの int への変換が呼び出されたとします。_mm_cvtpd_epi32cvtpd2dq

  1. 安全ですか、つまり動作が定義されていますか?
  2. 制御フローを壊しますか、それとも単にフラグを立てますか?
  3. 定義されている場合、変換の結果は何ですか?
4

1 に答える 1

4

これらの質問に対する答えは、主にインテル® 64 および IA-32 アーキテクチャー・ソフトウェア開発者マニュアルに記載されています。

CVTPD2DQ

... 変換結果が最大符号付きダブルワード整数よりも大きい場合、浮動小数点無効例外が発生し、この例外がマスクされている場合、不定整数値 (80000000H) が返されます。

このセクションでは明確に説明していませんが、これは無限大と NaN にも当てはまります。そう:

  1. はい、動作が定義されています。
  2. デフォルトの浮動小数点環境 (つまり、MXCSR で無効な例外がマスクされている) では、制御フローは中断されません。フラグを設定するだけです。
  3. 結果は0x80000000です。
于 2015-07-22T19:53:21.020 に答える