次の表に、ストリーミング SIMD 拡張命令 2 (SSE2) の整数算術演算組み込み関数のリストを示します。表の後に、各組み込み関数の説明を示します。SSE2 の浮動小数点パックド算術演算組み込み関数については、「ストリーミング SIMD 拡張命令 2 の浮動小数点算術演算」を参照してください。
次の表の組み込み関数名をクリックすると、その組み込み関数の詳細が表示されます。
各組み込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。R、R0、R1 〜 R15 は、結果が配置されるレジスターを表します。
SSE2 の組み込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
組み込み関数 | 操作 | 命令 |
---|---|---|
_mm_add_epi8 | 加算 | PADDB |
_mm_add_epi16 | 加算 | PADDW |
_mm_add_epi32 | 加算 | PADDD |
_mm_add_si64 | 加算 | PADDQ |
_mm_add_epi64 | 加算 | PADDQ |
_mm_adds_epi8 | 加算 | PADDSB |
_mm_adds_epi16 | 加算 | PADDSW |
_mm_adds_epu8 | 加算 | PADDUSB |
_mm_adds_epu16 | 加算 | PADDUSW |
_mm_avg_epu8 | 平均値の計算 | PAVGB |
_mm_avg_epu16 | 平均値の計算 | PAVGW |
_mm_madd_epi16 | 積和の計算 | PMADDWD |
_mm_max_epi16 | 最大値の計算 | PMAXSW |
_mm_max_epu8 | 最大値の計算 | PMAXUB |
_mm_min_epi16 | 最小値の計算 | PMINSW |
_mm_min_epu8 | 最小値の計算 | PMINUB |
_mm_mulhi_epi16 | 乗算 | PMULHW |
_mm_mulhi_epu16 | 乗算 | PMULHUW |
_mm_mullo_epi16 | 乗算 | PMULLW |
_mm_mul_su32 | 乗算 | PMULUDQ |
_mm_mul_epu32 | 乗算 | PMULUDQ |
_mm_sad_epu8 | 差分絶対値和の計算 | PSADBW |
_mm_sub_epi8 | 減算 | PSUBB |
_mm_sub_epi16 | 減算 | PSUBW |
_mm_sub_epi32 | 減算 | PSUBD |
_mm_sub_si64 | 減算 | PSUBQ |
_mm_sub_epi64 | 減算 | PSUBQ |
_mm_subs_epi8 | 減算 | PSUBSB |
_mm_subs_epi16 | 減算 | PSUBSW |
_mm_subs_epu8 | 減算 | PSUBUSB |
_mm_subs_epu16 | 減算 | PSUBUSW |
__mm128i _mm_add_epi8(__m128i a, __m128i b)
a の 16 の符号付きまたは符号なし 8 ビット整数を、b の 16 の符号付きまたは符号なし 8 ビット整数に加算します。
R0 | R1 | ... | R15 |
---|---|---|---|
a0 + b0 | a1 + b1; | ... | a15 + b15 |
__mm128i _mm_add_epi16(__m128i a, __m128i b)
a の 8 つの符号付きまたは符号なし 16 ビット整数を、b の 8 つの符号付きまたは符号なし 16 ビット整数に加算します。
R0 | R1 | ... | R7 |
---|---|---|---|
a0 + b0 | a1 + b1 | ... | a7 + b7 |
__m128i _mm_add_epi32(__m128i a, __m128i b)
a の 4 つの符号付きまたは符号なし 32 ビット整数を、b の 4 つの符号付きまたは符号なし 32 ビット整数に加算します。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 + b0 | a1 + b1 | a2 + b2 | a3 + b3 |
__m64 _mm_add_si64(__m64 a, __m64 b)
a の符号付きまたは符号なし 64 ビット整数を、b の符号付きまたは符号なし 64 ビット整数に加算します。
R0 |
---|
a + b |
__m128i _mm_add_epi64(__m128i a, __m128i b)
a の 2 つの符号付きまたは符号なし 64 ビット整数を、b の 2 つの符号付きまたは符号なし 64 ビット整数に加算します。
R0 | R1 |
---|---|
a0 + b0 | a1 + b1 |
__m128i _mm_adds_epi8(__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号付き 8 ビット整数を、b の 16 の符号付き 8 ビット整数に加算します。
R0 | R1 | ... | R15 |
---|---|---|---|
SignedSaturate (a0 + b0) | SignedSaturate (a1 + b1) | ... | SignedSaturate (a15 + b15) |
__m128i _mm_adds_epi16(__m128i a, __m128i b)
飽和演算を使用して、a の 8 つの符号付き 16 ビット整数を、b の 8 つの符号付き 16 ビット整数に加算します。
R0 | R1 | ... | R7 |
---|---|---|---|
SignedSaturate (a0 + b0) | SignedSaturate (a1 + b1) | ... | SignedSaturate (a7 + b7) |
__m128i _mm_adds_epu8(__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号なし 8 ビット整数を、b の 16 の符号なし 8 ビット整数に加算します。
R0 | R1 | ... | R15 |
---|---|---|---|
UnsignedSaturate (a0 + b0) | UnsignedSaturate (a1 + b1) | ... | UnsignedSaturate (a15 + b15) |
__m128i _mm_adds_epu16(__m128i a, __m128i b)
飽和演算を使用して、a の 8 つの符号なし 16 ビット整数を、b の 8 つの符号なし 16 ビット整数に加算します。
R0 | R1 | ... | R7 |
---|---|---|---|
UnsignedSaturate (a0 + b0) | UnsignedSaturate (a1 + b1) | ... | UnsignedSaturate (a7 + b7) |
__m128i _mm_avg_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、対応する値の平均値を計算し、その結果を丸めます。
R0 | R1 | ... | R15 |
---|---|---|---|
(a0 + b0) / 2 | (a1 + b1) / 2 | ... | (a15 + b15) / 2 |
__m128i _mm_avg_epu16(__m128i a, __m128i b)
a の 8 つの符号なし 16 ビット整数と b の 8 つの符号なし 16 ビット整数について、対応する値の平均値を計算し、その結果を丸めます。
R0 | R1 | ... | R7 |
---|---|---|---|
(a0 + b0) / 2 | (a1 + b1) / 2 | ... | (a7 + b7) / 2 |
__m128i _mm_madd_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数に、b の 8 つの符号付き 16 ビット整数を掛けます。得られた符号付き 32 ビット整数を 2 つずつ加算して、4 つの符号付き 32 ビット整数としてパックします。
R0 | R1 | R2 | R3 |
---|---|---|---|
(a0 * b0) + (a1 * b1) | (a2 * b2) + (a3 * b3) | (a4 * b4) + (a5 * b5) | (a6 * b6) + (a7 * b7) |
__m128i _mm_max_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数と b の 8 つの符号付き 16 ビット整数について、それぞれの値のペアの最大値を計算します。
R0 | R1 | ... | R7 |
---|---|---|---|
max(a0, b0) | max(a1, b1) | ... | max(a7, b7) |
__m128i _mm_max_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、それぞれの値のペアの最大値を計算します。
R0 | R1 | ... | R15 |
---|---|---|---|
max(a0, b0) | max(a1, b1) | ... | max(a15, b15) |
__m128i _mm_min_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数と b の 8 つの符号付き 16 ビット整数について、それぞれの値のペアの最小値を計算します。
R0 | R1 | ... | R7 |
---|---|---|---|
min(a0, b0) | min(a1, b1) | ... | min(a7, b7) |
__m128i _mm_min_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、それぞれの値のペアの最小値を計算します。
R0 | R1 | ... | R15 |
---|---|---|---|
min(a0, b0) | min(a1, b1) | ... | min(a15, b15) |
__m128i _mm_mulhi_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数に、b の 8 つの符号付き 16 ビット整数を掛けます。得られた 8 つの符号付き 32 ビット整数の上位 16 ビットをパックします。
R0 | R1 | ... | R7 |
---|---|---|---|
(a0 * b0)[31:16] | (a1 * b1)[31:16] | ... | (a7 * b7)[31:16] |
__m128i _mm_mulhi_epu16(__m128i a, __m128i b)
a の 8 つの符号なし 16 ビット整数に、b の 8 つの符号なし 16 ビット整数を掛けます。得られた 8 つの符号なし 32 ビット整数の上位 16 ビットをパックします。
R0 | R1 | ... | R7 |
---|---|---|---|
(a0 * b0)[31:16] | (a1 * b1)[31:16] | ... | (a7 * b7)[31:16] |
__m128i_mm_mullo_epi16(__m128i a, __m128i b)
a の 8 つの符号付きまたは符号なし 16 ビット整数に、b の 8 つの符号付きまたは符号なし 16 ビット整数を掛けます。得られた 8 つの符号付きまたは符号なし 32 ビット整数の下位 16 ビットをパックします。
R0 | R1 | ... | R7 |
---|---|---|---|
(a0 * b0)[15:0] | (a1 * b1)[15:0] | ... | (a7 * b7)[15:0] |
__m64 _mm_mul_su32(__m64 a, __m64 b)
a の下位の 32 ビット整数に、b の下位の 32 ビット整数を掛けて、64 ビット整数の結果を返します。
R0 |
---|
a0 * b0 |
__m128i _mm_mul_epu32(__m128i a, __m128i b)
a の 2 つの符号なし 32 ビット整数に、b の 2 つの符号なし 32 ビット整数を掛けます。得られた 2 つの符号なし 64 ビット整数をパックします。
R0 | R1 |
---|---|
a0 * b0 | a2 * b2 |
__m128i _mm_sad_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、それぞれの差の絶対値を計算します。上位の 8 つの差と下位の 8 つの差をそれぞれに合計して、得られた 2 つの符号なし 16 ビット整数を、結果の上位および下位の 64 ビット要素の中にパックします。
R0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 |
---|---|---|---|---|---|---|---|
abs(a0 - b0) + abs(a1 - b1) +...+ abs(a7 - b7) | 0x0 | 0x0 | 0x0 | abs(a8 - b8) + abs(a9 - b9) +...+ abs(a15 - b15) | 0x0 | 0x0 | 0x0 |
__m128i _mm_sub_epi8(__m128i a, __m128i b)
a の 16 の符号付きまたは符号なし 8 ビット整数から、b の 16 の符号付きまたは符号なし 8 ビット整数を引きます。
R0 | R1 | ... | R15 |
---|---|---|---|
a0 - b0 | a1 - b1 | ... | a15 - b15 |
__m128i_mm_sub_epi16(__m128i a, __m128i b)
a の 8 つの符号付きまたは符号なし 16 ビット整数から、b の 8 つの符号付きまたは符号なし 16 ビット整数を引きます。
R0 | R1 | ... | R7 |
---|---|---|---|
a0 - b0 | a1 - b1 | ... | a7 - b7 |
__m128i _mm_sub_epi32(__m128i a, __m128i b)
a の 4 つの符号付きまたは符号なし 32 ビット整数から、b の 4 つの符号付きまたは符号なし 32 ビット整数を引きます。
R0 | R1 | R2 | R3 |
---|---|---|---|
a0 - b0 | a1 - b1 | a2 - b2 | a3 - b3 |
__m64 _mm_sub_si64 (__m64 a, __m64 b)
a の符号付きまたは符号なし 64 ビット整数から、b の符号付きまたは符号なし 64 ビット整数を引きます。
R |
---|
a - b |
__m128i _mm_sub_epi64(__m128i a, __m128i b)
a の 2 つの符号付きまたは符号なし 64 ビット整数から、b の 2 つの符号付きまたは符号なし 64 ビット整数を引きます。
R0 | R1 |
---|---|
a0 - b0 | a1 - b1 |
__m128i _mm_subs_epi8(__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号付き 8 ビット整数から、b の 16 の符号付き 8 ビット整数を引きます。
R0 | R1 | ... | R15 |
---|---|---|---|
SignedSaturate (a0 - b0) | SignedSaturate (a1 - b1) | ... | SignedSaturate (a15 - b15) |
__m128i _mm_subs_epi16(__m128i a, __m128i b)
飽和演算を使用して、a の 8 つの符号付き 16 ビット整数から、b の 8 つの符号付き 16 ビット整数を引きます。
R0 | R1 | ... | R15 |
---|---|---|---|
SignedSaturate (a0 - b0) | SignedSaturate (a1 - b1) | ... | SignedSaturate (a7 - b7) |
__m128i _mm_subs_epu8 (__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号なし 8 ビット整数から、b の 16 の符号なし 8 ビット整数を引きます。
R0 | R1 | ... | R15 |
---|---|---|---|
UnsignedSaturate (a0 - b0) | UnsignedSaturate (a1 - b1) | ... | UnsignedSaturate (a15 - b15) |
__m128i _mm_subs_epu16 (__m128i a, __m128i b)
飽和演算を使用して、a の 8 つの符号なし 16 ビット整数から、b の 8 つの符号なし 16 ビット整数を引きます。
R0 | R1 | ... | R7 |
---|---|---|---|
UnsignedSaturate (a0 - b0) | UnsignedSaturate (a1 - b1) | ... | UnsignedSaturate (a7 - b7) |