ストリーミング SIMD 拡張命令の算術演算

ストリーミング SIMD 拡張命令 (SSE) の組み込み関数のプロトタイプは、ヘッダーファイル xmmintrin.h 内にあります。

各組み込み関数演算の結果はレジスターに配置されます。ここでは、このレジスターを組み込み関数ごとに R0 から R3 までを使用して示します。結果レジスターの 4 つの 32 ビット部分を、R0、R1、R2、および R3 とそれぞれ表します。

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

組み込み関数 操作 対応する 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)

ab の最下位の単精度浮動小数点値 (SP FP) を加算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。

R0

R1 R2 R3
a0 + b0 a1 a2 a3

 

__m128 _mm_add_ps(__m128 a, __m128 b)

ab の 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 の 4 つの単精度浮動小数点値から、b の 4 つの単精度浮動小数点値を引きます。

R0 R1 R2 R3
a0 - b0 a1 - b1 a2 - b2 a3 - b3

 

__m128 _mm_mul_ss(__m128 a, __m128 b)

ab の最下位の単精度浮動小数点値を乗算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。

R0 R1 R2 R3
a0 * b0 a1 a2 a3

 

__m128 _mm_mul_ps(__m128 a, __m128 b)

ab の 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 の 4 つの単精度浮動小数点値を、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)

ab の最下位の単精度浮動小数点値について、小さい方の値を計算をします。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。

R0 R1 R2 R3
min(a0, b0) a1 a2 a3

 

__m128 _mm_min_ps(__m128 a, __m128 b)

ab の 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)

ab の最下位の単精度浮動小数点値について、大きい方の値を計算をします。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。

R0 R1 R2 R3
max(a0, b0) a1 a2 a3

 

__m128 _mm_max_ps(__m128 a, __m128 b)

ab の 4 つの単精度浮動小数点値について、大きい方の値を計算します。

R0 R1 R2 R3
max(a0, b0) max(a1, b1) max(a2, b2) max(a3, b3)