ストリーミングSIMD拡張命令2 の変換操作

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

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

ストリーミングSIMD拡張命令2の組込み関数のプロトタイプは、ヘッダ・ファイル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)

__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