インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

変換組込み関数

ここでは、浮動小数点変換操作用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数について説明します。インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。

変換組込み関数は、データ型を他のデータ型に変換します。_mm_cvtpd_ps 組込み関数などによって実行される一部の変換を行うと、データの精度が低下します。このような場合に使用する丸めモードは、MXCSR レジスターの値によって決まります。デフォルトの丸めモードは、最近値への丸めです。

C および C++ 言語は、型変換の実行時に切り捨てモードを使用します。_mm_cvttpd_epi32 および _mm_cvttsd_si32 組込み関数は、MXCSR レジスターで指定した丸めモードに関係なく、切り捨てモードを使用します。

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

組込み関数名

演算

対応するインテル® 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

最初のベクトル要素から倍精度浮動小数点値の抽出

なし

_mm_cvtpd_ps

__m128 _mm_cvtpd_ps(__m128d a);

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

R0

R1

R2

R3

(float) a0

(float) a1

0.0

0.0

_mm_cvtps_pd

__m128d _mm_cvtps_pd(__m128 a);

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

R0

R1

(double) a0

(double) a1

_mm_cvtepi32_pd

__m128d _mm_cvtepi32_pd(__m128i a);

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

R0

R1

(double) a0

(double) a1

_mm_cvtpd_epi32

__m128i _mm_cvtpd_epi32(__m128d a);

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

R0

R1

R2

R3

(int) a0

(int) a1

0x0

0x0

_mm_cvtsd_si32

int _mm_cvtsd_si32(__m128d a);

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

R

(int) a0

_mm_cvtsd_ss

__m128 _mm_cvtsd_ss(__m128 a, __m128d b);

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

R0

R1

R2

R3

(float) b0

a1

a2

a3

_mm_cvtsi32_sd

__m128d _mm_cvtsi32_sd(__m128d a, int b);

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

R0

R1

(double) b

a1

_mm_cvtss_sd

__m128d _mm_cvtss_sd(__m128d a, __m128 b);

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

R0

R1

(double) b0

a1

_mm_cvttpd_epi32

__m128i _mm_cvttpd_epi32(__m128d a);

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

R0

R1

R2

R3

(int) a0

(int) a1

0x0

0x0

_mm_cvttsd_si32

int _mm_cvttsd_si32(__m128d a);

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

R

(int) a0

_mm_cvtpd_pi32

__m64 _mm_cvtpd_pi32(__m128d a);

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

R0

R1

(int)a0

(int) a1

_mm_cvttpd_pi32

__m64 _mm_cvttpd_pi32(__m128d a);

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

R0

R1

(int)a0

(int) a1

_mm_cvtpi32_pd

__m128d _mm_cvtpi32_pd(__m64 a);

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

R0

R1

(double)a0

(double)a1

_mm_cvtsd_f64

double _mm_cvtsd_f64(__m128d a);

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

この組込み関数は特定のインテル® SSE2 命令には対応付けられません。