ストリーミング SIMD 拡張命令 2 の浮動小数点変換操作

変換組込み関数は、データ型を他のデータ型に変換します。_mm_cvtpd_ps などの変換を実行すると、データの精度が低下します。このような場合に使用する丸めモードは、MXCSR レジスタの値によって決まります。デフォルトの丸めモードは、最近値への丸めです。ただし、C および C++ 言語は、型変換の実行時に切り捨てモードを使用します。_mm_cvttpd_epi32 および _mm_cvttsd_si32 組込み関数は、MXCSR レジスタで指定した丸めモードに関係なく、切り捨てモードを使用します。

次の表に、ストリーミング SIMD 拡張命令 2 (SSE2) の変換操作組込み関数のリストを示します。表の後に、各組込み関数の説明を示します。

SSE2 組込み関数のプロトタイプは、ヘッダファイル emmintrin.h 内にあります。

組込み関数
対応する
命令
戻り値
の種類
パラメータ
_mm_cvtpd_ps CVTPD2PS __m128 (__m128d a)
_mm_cvtps_pd CVTPS2PD __m128d (__m128 a)
_mm_cvtepi32_pd CVTDQ2PD __m128d (__m128i a)
_mm_cvtpd_epi32 CVTPD2DQ __m128i (__m128d a)
_mm_cvtsd_si32 CVTSD2SI int (__m128d a)
_mm_cvtsd_ss CVTSD2SS __m128 (__m128 a, __m128d b)
_mm_cvtsi32_sd CVTSI2SD __m128d (__m128d a, int b)
_mm_cvtss_sd CVTSS2SD __m128d (__m128d a, __m128 b)
_mm_cvttpd_epi32 CVTTPD2DQ __m128i (__m128d a)
_mm_cvttsd_si32 CVTTSD2SI int (__m128d a)
_mm_cvtpd_pi32 CVTPD2PI __m64 (__m128d a)
_mm_cvttpd_pi32 CVTTPD2PI __m64 (__m128d a)
_mm_cvtpi32_pd CVTPI2PD __m128d (__m64 a)
_mm_cvtsd_f64 なし double (__m128d a)

__m128 _mm_cvtpd_ps(__m128d a)

a の 2 つの倍精度浮動小数点値を単精度浮動小数点値に変換します。
r0 := (float) a0
r1 := (float) a1
r2 := 0.0 ; r3 := 0.0

__m128d _mm_cvtps_pd(__m128 a)

a の下位 2 つの単精度浮動小数点値を倍精度浮動小数点値に変換します。
r0 := (double) a0
r1 := (double) a1

__m128d _mm_cvtepi32_pd(__m128i a)

a の下位 2 つの符号付き 32 ビット整数値を倍精度浮動小数点値に変換します。
r0 := (double) a0
r1 := (double) a1

__m128i _mm_cvtpd_epi32(__m128d a)

a の 2 つの倍精度浮動小数点値を符号付き 32 ビット整数値に変換します。
r0 := (int) a0
r1 := (int) a1
r2 := 0x0 ; r3 := 0x0

int _mm_cvtsd_si32(__m128d a)

a の下位の倍精度浮動小数点値を符号付き 32 ビット整数値に変換します。
r := (int) a0

__m128 _mm_cvtsd_ss(__m128 a, __m128d b)

b の下位の倍精度浮動小数点値を単精度浮動小数点値に変換します。a の上位の単精度浮動小数点値はそのまま渡されます。
r0 := (float) b0
r1 := a1; r2 := a2 ; r3 := a3

__m128d _mm_cvtsi32_sd(__m128d a, int b)

b の符号付き整数値を倍精度浮動小数点値に変換します。a の上位の倍精度浮動小数点値はそのまま渡されます。
r0 := (double) b
r1 := a1

__m128d _mm_cvtss_sd(__m128d a, __m128 b)

b の最下位の単精度浮動小数点値を倍精度浮動小数点値に変換します。a の上位の倍精度浮動小数点値はそのまま渡されます。
r0 := (double) b0
r1 := a1

__m128i _mm_cvttpd_epi32(__m128d a)

切り捨てを使用して、a の 2 つの倍精度浮動小数点値を符号付き 32 ビット整数値に変換します。
r0 := (int) a0
r1 := (int) a1
r2 := 0x0 ; r3 := 0x0

int _mm_cvttsd_si32(__m128d a)

切り捨てを使用して、a の下位の倍精度浮動小数点値を符号付き 32 ビット整数に変換します。
r := (int) a0

__m64 _mm_cvtpd_pi32(__m128d a)

a の 2 つの倍精度浮動小数点値を符号付き 32 ビット整数値に変換します。
r0 := (int) a0
r1 := (int) a1

__m64 _mm_cvttpd_pi32(__m128d a)

切り捨てを使用して、a の 2 つの倍精度浮動小数点値を符号付き 32 ビット整数値に変換します。
r0 := (int) a0
r1 := (int) a1

__m128d _mm_cvtpi32_pd(__m64 a)

a の 2 つの符号付き 32 ビット整数値を倍精度浮動小数点値に変換します。
r0 := (double) a0
r1 := (double) a1

_mm_cvtsd_f64(__m128d a)

この組込み関数は __m128d の最初のベクトル要素から倍精度浮動小数点値を抽出します。使用されるコンテキストで可能な最も効率的な方法で行われます。この組込み関数は特定の SSE2 命令には対応付けられません。