インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
算術演算用のインテル® ストリーミング SIMD 拡張命令 (インテル® SSE) の組込み関数のプロトタイプは、ヘッダーファイル xmmintrin.h 内にあります。
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.h>
各組込み関数演算の結果はレジスターに配置されます。ここでは、このレジスターを組込み関数ごとに R0 から R3 までを使用して示します。R0、R1、R2、および R3 はそれぞれ、結果レジスターの 4 つの 32 ビット部分を表します。
組込み関数名 |
演算 |
対応するインテル® SSE 命令 |
---|---|---|
_mm_add_ss |
加算 |
ADDSS |
_mm_add_ps |
加算 |
ADDPS |
_mm_sub_ss |
減算 |
SUBSS |
_mm_sub_ps |
減算 |
SUBPS |
_mm_mul_ss |
乗算 |
MULSS |
_mm_mul_ps |
乗算 |
MULPS |
_mm_div_ss |
除算 |
DIVSS |
_mm_div_ps |
除算 |
DIVPS |
_mm_sqrt_ss |
平方根 |
SQRTSS |
_mm_sqrt_ps |
平方根 |
SQRTPS |
_mm_rcp_ss |
逆数 |
RCPSS |
_mm_rcp_ps |
逆数 |
RCPPS |
_mm_rsqrt_ss |
平方根の逆数 |
RSQRTSS |
_mm_rsqrt_ps |
平方根の逆数 |
RSQRTPS |
_mm_min_ss |
最小値の計算 |
MINSS |
_mm_min_ps |
最小値の計算 |
MINPS |
_mm_max_ss |
最大値の計算 |
MAXSS |
_mm_max_ps |
最大値の計算 |
MAXPS |
__m128 _mm_add_ss(__m128 a, __m128 b);
a と b の下位の単精度浮動小数点値を加算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 + b0 |
a1 |
a2 |
a3 |
__m128 _mm_add_ps(__m128 a, __m128 b);
a と b の 4 つの単精度浮動小数点値を加算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 +b0 |
a1 + b1 |
a2 + b2 |
a3 + b3 |
__m128 _mm_sub_ss(__m128 a, __m128 b);
a と b の下位の単精度浮動小数点値を減算します。上位 3 つの単精度浮動小数点値は a からそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 - b0 |
a1 |
a2 |
a3 |
__m128 _mm_sub_ps(__m128 a, __m128 b);
a と b の 4 つの単精度浮動小数点値を減算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 - b0 |
a1 - b1 |
a2 - b2 |
a3 - b3 |
__m128 _mm_mul_ss(__m128 a, __m128 b);
a と b の下位の単精度浮動小数点値を乗算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 * b0 |
a1 |
a2 |
a3 |
__m128 _mm_mul_ps(__m128 a, __m128 b);
a と b の 4 つの単精度浮動小数点値を乗算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 * b0 |
a1 * b1 |
a2 * b2 |
a3 * b3 |
__m128 _mm_div_ss(__m128 a, __m128 b);
a と b の下位の単精度浮動小数点値を除算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 / b0 |
a1 |
a2 |
a3 |
__m128 _mm_div_ps(__m128 a, __m128 b);
a と b の 4 つの単精度浮動小数点値を除算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
a0 / b0 |
a1 / b1 |
a2 / b2 |
a3 / b3 |
__m128 _mm_sqrt_ss(__m128 a);
a の下位の単精度浮動小数点値の平方根を計算します。上位 3 つの単精度浮動小数点値はそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
sqrt(a0) |
a1 |
a2 |
a3 |
__m128 _mm_sqrt_ps(__m128 a);
a の 4 つの単精度浮動小数点値の平方根を計算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
sqrt(a0) |
sqrt(a1) |
sqrt(a2) |
sqrt(a3) |
__m128 _mm_rcp_ss(__m128 a);
a の下位の単精度浮動小数点値の逆数の近似値を計算します。上位 3 つの単精度浮動小数点値はそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
recip(a0) |
a1 |
a2 |
a3 |
__m128 _mm_rcp_ps(__m128 a);
a の 4 つの単精度浮動小数点値の逆数の近似値を計算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
recip(a0) |
recip(a1) |
recip(a2) |
recip(a3) |
__m128 _mm_rsqrt_ss(__m128 a);
a の下位の単精度浮動小数点値の平方根の逆数の近似値を計算します。上位 3 つの単精度浮動小数点値はそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
recip(sqrt(a0)) |
a1 |
a2 |
a3 |
__m128 _mm_rsqrt_ps(__m128 a);
a の 4 つの単精度浮動小数点値の平方根の逆数の近似値を計算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
recip(sqrt(a0)) |
recip(sqrt(a1)) |
recip(sqrt(a2)) |
recip(sqrt(a3)) |
__m128 _mm_min_ss(__m128 a, __m128 b);
a と b の下位の単精度浮動小数点値について、小さい方の値を計算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
min(a0, b0) |
a1 |
a2 |
a3 |
__m128 _mm_min_ps(__m128 a, __m128 b);
a と b の 4 つの単精度浮動小数点値について、それぞれ小さい方の値を計算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
min(a0, b0) |
min(a1, b1) |
min(a2, b2) |
min(a3, b3) |
__m128 _mm_max_ss(__m128 a, __m128 b);
a と b の下位の単精度浮動小数点値について、大きい方の値を計算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
max(a0, b0) |
a1 |
a2 |
a3 |
__m128 _mm_max_ps(__m128 a, __m128 b);
a と b の 4 つの単精度浮動小数点値について、それぞれ大きい方の値を計算します。
R0 |
R1 |
R2 |
R3 |
---|---|---|---|
max(a0, b0) |
max(a1, b1) |
max(a2, b2) |
max(a3, b3) |