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

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

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

次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。

各組み込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。R、R0、R1、R2、R3 は、結果が配置されるレジスターを表します。 

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

組み込み関数名 操作 対応する SSE2
命令
_mm_cvtpd_ps 倍精度浮動小数点値から単精度浮動小数点値への変換 CVTPD2PS
_mm_cvtps_pd 単精度浮動小数点値から倍精度浮動小数点値への変換 CVTPS2PD
_mm_cvtepi32_pd 下位の整数値から倍精度浮動小数点値への変換 CVTDQ2PD
_mm_cvtpd_epi32 倍精度浮動小数点値から整数値への変換 CVTPD2DQ
_mm_cvtsd_si32 下位の倍精度浮動小数点値から整数値への変換 CVTSD2SI
_mm_cvtsd_ss 下位の倍精度浮動小数点値から単精度浮動小数点値への変換 CVTSD2SS
_mm_cvtsi32_sd 符号付き整数値から倍精度浮動小数点値への変換 CVTSI2SD
_mm_cvtss_sd 下位の単精度浮動小数点値から倍精度浮動小数点値への変換 CVTSS2SD
_mm_cvttpd_epi32 倍精度浮動小数点値から符号付き整数値への変換 CVTTPD2DQ
_mm_cvttsd_si32 下位の倍精度浮動小数点値から符号付き整数値への変換 CVTTSD2SI
_mm_cvtpd_pi32 2 つの倍精度浮動小数点値から符号付き整数値への変換  CVTPD2PI
_mm_cvttpd_pi32 切り捨てを使用した 2 つの倍精度浮動小数点値から符号付き整数値への変換  CVTTPD2PI
_mm_cvtpi32_pd 2 つの符号付き整数値から倍精度浮動小数点値への変換  CVTPI2PD
_mm_cvtsd_f64 最初のベクトル要素から倍精度浮動小数点値の抽出 なし

 

__m128 _mm_cvtpd_ps(__m128d a)

a の 2 つの倍精度浮動小数点値を単精度浮動小数点値に変換します。

R0 R1 R2 R3
(float) a0 (float) a1 0.0 0.0

 

__m128d _mm_cvtps_pd(__m128 a)

a の下位 2 つの単精度浮動小数点値を倍精度浮動小数点値に変換します。

R0 R1
(double) a0 (double) a1

 

__m128d _mm_cvtepi32_pd(__m128i a)

a の下位 2 つの符号付き 32 ビット整数値を倍精度浮動小数点値に変換します。

R0 R1
(double) a0 (double) a1

 

__m128i _mm_cvtpd_epi32(__m128d a)

a の 2 つの倍精度浮動小数点値を符号付き 32 ビット整数値に変換します。 

R0 R1 R2 R3
(int) a0 (int) a1 0x0 0x0

 

int _mm_cvtsd_si32(__m128d a)

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

R
(int) a0

 

__m128 _mm_cvtsd_ss(__m128 a, __m128d b)

b の下位の倍精度浮動小数点値を単精度浮動小数点値に変換します。a の上位の単精度浮動小数点値はそのまま渡されます。

R0 R1 R2 R3
(float) b0 a1 a2 a3

 

__m128d _mm_cvtsi32_sd(__m128d a, int b)

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

R0 R1
(double) b a1

 

__m128d _mm_cvtss_sd(__m128d a, __m128 b)

b の下位の単精度浮動小数点値を倍精度浮動小数点値に変換します。a の上位の倍精度浮動小数点値はそのまま渡されます。 

R0 R1
(double) b0 a1

 

__m128i _mm_cvttpd_epi32(__m128d a)

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

R0 R1 R2

R3

(int) a0 (int) a1 0x0 0x0

 

int _mm_cvttsd_si32(__m128d a)

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

R
(int) a0

 

__m64 _mm_cvtpd_pi32(__m128d a)

a の 2 つの倍精度浮動小数点値を符号付き 32 ビット整数値に変換します。

R0 R1
(int)a0 (int) a1

 

__m64 _mm_cvttpd_pi32(__m128d a)

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

R0 R1
(int)a0 (int) a1

 

__m128d _mm_cvtpi32_pd(__m64 a)

a の 2 つの符号付き 32 ビット整数値を倍精度浮動小数点値に変換します。  

R0 R1
(double)a0 (double)a1

 

_mm_cvtsd_f64(__m128d a)

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