インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
ここでは、浮動小数点算術演算用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数について説明します。インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.h>
各組込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。各組込み関数の結果レジスターは R0 と R1 で示します。R0 および R1 はそれぞれ、結果レジスターの 1 つの部分を表します。
組込み関数名 |
演算 |
対応するインテル® SSE2 命令 |
---|---|---|
_mm_add_sd |
加算 |
ADDSD |
_mm_add_pd |
加算 |
ADDPD |
_mm_sub_sd |
減算 |
SUBSD |
_mm_sub_pd |
減算 |
SUBPD |
_mm_mul_sd |
乗算 |
MULSD |
_mm_mul_pd |
乗算 |
MULPD |
_mm_div_sd |
除算 |
DIVSD |
_mm_div_pd |
除算 |
DIVPD |
_mm_sqrt_sd |
平方根の計算 |
SQRTSD |
_mm_sqrt_pd |
平方根の計算 |
SQRTPD |
_mm_min_sd |
最小値の計算 |
MINSD |
_mm_min_pd |
最小値の計算 |
MINPD |
_mm_max_sd |
最大値の計算 |
MAXSD |
_mm_max_pd |
最大値の計算 |
MAXPD |
__m128d _mm_add_sd(__m128d a, __m128d b);
a と b の下位の倍精度浮動小数点値を加算します。上位の倍精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
---|---|
a0 + b0 |
a1 |
__m128d _mm_add_pd(__m128d a, __m128d b);
a と b の 2 つの倍精度浮動小数点値を加算します。
R0 |
R1 |
---|---|
a0 + b0 |
a1 + b1 |
__m128d _mm_sub_sd(__m128d a, __m128d b);
a の下位の倍精度浮動小数点値から、b の下位の倍精度浮動小数点値を引きます。上位の倍精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
---|---|
a0 - b0 |
a1 |
__m128d _mm_sub_pd(__m128d a, __m128d b);
a の 2 つの倍精度浮動小数点値から、b の 2 つの倍精度浮動小数点値を引きます。
R0 |
R1 |
---|---|
a0 - b0 |
a1 - b1 |
__m128d _mm_mul_sd(__m128d a, __m128d b);
a と b の下位の倍精度浮動小数点値を乗算します。上位の倍精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
---|---|
a0 * b0 |
a1 |
__m128d _mm_mul_pd(__m128d a, __m128d b);
a と b の 2 つの倍精度浮動小数点値を乗算します。
R0 |
R1 |
---|---|
a0 * b0 |
a1 * b1 |
__m128d _mm_div_sd(__m128d a, __m128d b);
a の下位の倍精度浮動小数点値を、b の下位の倍精度浮動小数点値で割ります。上位の倍精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
---|---|
a0 / b0 |
a1 |
__m128d _mm_div_pd(__m128d a, __m128d b);
a の 2 つの倍精度浮動小数点値を、b の 2 つの倍精度浮動小数点値で割ります。
R0 |
R1 |
---|---|
a0 / b0 |
a1 / b1 |
__m128d _mm_sqrt_sd(__m128d a, __m128d b);
b の下位の倍精度浮動小数点値の平方根を計算します。上位の倍精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
---|---|
sqrt(b0) |
a1 |
__m128d _mm_sqrt_pd(__m128d a);
a の 2 つの倍精度浮動小数点値の平方根を計算します。
R0 |
R1 |
---|---|
sqrt(a0) |
sqrt(a1) |
__m128d _mm_min_sd(__m128d a, __m128d b);
a と b の下位の倍精度浮動小数点値について、小さい方の値を計算します。上位の倍精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
---|---|
min (a0, b0) |
a1 |
__m128d _mm_min_pd(__m128d a, __m128d b);
a と b の 2 つの倍精度浮動小数点値について、それぞれ小さい方の値を計算します。
R0 |
R1 |
---|---|
min (a0, b0) |
min(a1, b1) |
__m128d _mm_max_sd(__m128d a, __m128d b);
a と b の下位の倍精度浮動小数点値について、大きい方の値を計算します。上位の倍精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
---|---|
max (a0, b0) |
a1 |
__m128d _mm_max_pd(__m128d a, __m128d b);
a と b の 2 つの倍精度浮動小数点値について、それぞれ大きい方の値を計算します。
R0 |
R1 |
---|---|
max (a0, b0) |
max (a1, b1) |