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

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

組込み関数 命令 操作 R0 R1 R2 R3
_mm_add_ss ADDSS 加算 a0 [op] b0 a1 a2 a3
_mm_add_ps ADDPS 加算 a0 [op] b0 a1 [op] b1 a2 [op] b2 a3 [op] b3
_mm_sub_ss SUBSS 減算 a0 [op] b0 a1 a2 a3
_mm_sub_ps SUBPS 減算 a0 [op] b0 a1 [op] b1 a2 [op] b2 a3 [op] b3
_mm_mul_ss MULSS 乗算 a0 [op] b0 a1 a2 a3
_mm_mul_ps MULPS 乗算 a0 [op] b0 a1 [op] b1 a2 [op] b2 a3 [op] b3
_mm_div_ss DIVSS 除算 a0 [op] b0 a1 a2 a3
_mm_div_ps DIVPS 除算 a0 [op] b0 a1 [op] b1 a2 [op] b2 a3 [op] b3
_mm_sqrt_ss SQRTSS 平方根 [op] a0 a1 a2 a3
_mm_sqrt_ps SQRTPS 平方根 [op] a0 [op] b1 [op] b2 [op] b3
_mm_rcp_ss RCPSS 逆数 [op] a0 a1 a2 a3
_mm_rcp_ps RCPPS 逆数 [op] a0 [op] b1 [op] b2 [op] b3
_mm_rsqrt_ss RSQRTSS 平方根の逆数 [op] a0 a1 a2 a3
_mm_rsqrt_ps RSQRTPS 平方根の逆数 [op] a0 [op] b1 [op] b2 [op] b3
_mm_min_ss MINSS 最小値の計算 [op]( a0,b0) a1 a2 a3
_mm_min_ps MINPS 最小値の計算 [op]( a0,b0) [op] (a1, b1) [op] (a2, b2) [op] (a3, b3)
_mm_max_ss MAXSS 最大値の計算 [op]( a0,b0) a1 a2 a3
_mm_max_ps MAXPS 最大値の計算 [op]( a0,b0) [op] (a1, b1) [op] (a2, b2) [op] (a3, b3)

__m128 _mm_add_ss(__m128 a, __m128 b)

ab の最下位の単精度浮動小数点値を加算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
r0 := a0 + b0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_add_ps(__m128 a, __m128 b)

ab の 4 つの単精度浮動小数点値を加算します。
r0 := a0 + b0
r1 := a1 + b1
r2 := a2 + b2
r3 := a3 + b3

__m128 _mm_sub_ss(__m128 a, __m128 b)

a の最下位の単精度浮動小数点値から、b の最下位の単精度浮動小数点値を引きます。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
r0 := a0 - b0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_sub_ps(__m128 a, __m128 b)

a の 4 つの単精度浮動小数点値から、b の 4 つの単精度浮動小数点値を引きます。
r0 := a0 - b0
r1 := a1 - b1
r2 := a2 - b2
r3 := a3 - b3

__m128 _mm_mul_ss(__m128 a, __m128 b)

ab の最下位の単精度浮動小数点値を乗算します。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
r0 := a0 * b0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_mul_ps(__m128 a, __m128 b)

ab の 4 つの単精度浮動小数点値を乗算します。
r0 := a0 * b0
r1 := a1 * b1
r2 := a2 * b2
r3 := a3 * b3

__m128 _mm_div_ss(__m128 a, __m128 b )

a の最下位の単精度浮動小数点値を、b の最下位の単精度浮動小数点値で割ります。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
r0 := a0 / b0
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_div_ps(__m128 a, __m128 b)

a の 4 つの単精度浮動小数点値を、b の 4 つの単精度浮動小数点値で割ります。
r0 := a0 / b0
r1 := a1 / b1
r2 := a2 / b2
r3 := a3 / b3

__m128 _mm_sqrt_ss(__m128 a)

a の最下位の単精度浮動小数点値の平方根を計算します。上位 3 つの単精度浮動小数点値はそのまま渡されます。
r0 := sqrt(a0)
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_sqrt_ps(__m128 a)

a の 4 つの単精度浮動小数点値の平方根を計算します。
r0 := sqrt(a0)
r1 := sqrt(a1)
r2 := sqrt(a2)
r3 := sqrt(a3)

__m128 _mm_rcp_ss(__m128 a)

a の最下位の単精度浮動小数点値の逆数の近似値を計算します。上位 3 つの単精度浮動小数点値はそのまま渡されます。
r0 := recip(a0)
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_rcp_ps(__m128 a)

a の 4 つの単精度浮動小数点値の逆数の近似値を計算します。
r0 := recip(a0)
r1 := recip(a1)
r2 := recip(a2)
r3 := recip(a3)

__m128 _mm_rsqrt_ss(__m128 a)

a の最下位の単精度浮動小数点値の平方根の逆数の近似値を計算します。上位 3 つの単精度浮動小数点値はそのまま渡されます。
r0 := recip(sqrt(a0))
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_rsqrt_ps(__m128 a)

a の 4 つの単精度浮動小数点値の平方根の逆数の近似値を計算します。
r0 := recip(sqrt(a0))
r1 := recip(sqrt(a1))
r2 := recip(sqrt(a2))
r3 := recip(sqrt(a3))

__m128 _mm_min_ss(__m128 a, __m128 b)

ab の最下位の単精度浮動小数点値について、小さい方の値を計算をします。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
r0 := min(a0, b0)
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_min_ps(__m128 a, __m128 b)

ab の 4 つの単精度浮動小数点値について、それぞれ小さい方の値を計算します。
r0 := min(a0, b0)
r1 := min(a1, b1)
r2 := min(a2, b2)
r3 := min(a3, b3)

__m128 _mm_max_ss(__m128 a, __m128 b)

ab の最下位の単精度浮動小数点値について、大きい方の値を計算をします。上位 3 つの単精度浮動小数点値は、a からそのまま渡されます。
r0 := max(a0, b0)
r1 := a1 ; r2 := a2 ; r3 := a3

__m128 _mm_max_ps(__m128 a, __m128 b)

ab の 4 つの単精度浮動小数点値について、大きい方の値を計算します。
r0 := max(a0, b0)
r1 := max(a1, b1)
r2 := max(a2, b2)
r3 := max(a3, b3)