インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
ここでは、整数演算用のインテル® ストリーミング SIMD 拡張命令 2 (インテル® SSE2) の組込み関数について説明します。インテル® SSE2 の組込み関数のプロトタイプは、ヘッダーファイル emmintrin.h 内にあります。
各組込み関数演算の結果はレジスターに配置されます。各レジスターに配置される値については、次の表の関数名の詳細で示します。R、R0、R1 ~ R15 は、結果が配置されるレジスターを表します。
組込み関数名 |
演算子 |
対応するインテル® SSE2 命令 |
---|---|---|
_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 |
__m128i _mm_add_epi8(__m128i a, __m128i b)
a の 16 の符号付きまたは符号なし 8 ビット整数を、b の 16 の符号付きまたは符号なし 8 ビット整数に加算します。
__m128i _mm_add_epi16(__m128i a, __m128i b)
a の 8 つの符号付きまたは符号なし 16 ビット整数を、b の 8 つの符号付きまたは符号なし 16 ビット整数に加算します。
__m128i _mm_add_epi32(__m128i a, __m128i b)
a の 4 つの符号付きまたは符号なし 32 ビット整数を、b の 4 つの符号付きまたは符号なし 32 ビット整数に加算します。
__m128i _mm_add_epi64(__m128i a, __m128i b)
a の 2 つの符号付きまたは符号なし 64 ビット整数を、b の 2 つの符号付きまたは符号なし 64 ビット整数に加算します。
__m128i _mm_adds_epi8(__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号付き 8 ビット整数を、b の 16 の符号付き 8 ビット整数に加算します。
__m128i _mm_adds_epi16(__m128i a, __m128i b)
飽和演算を使用して、a の 8 つの符号付き 16 ビット整数を、b の 8 つの符号付き 16 ビット整数に加算します。
__m128i _mm_adds_epu8(__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号なし 8 ビット整数を、b の 16 の符号なし 8 ビット整数に加算します。
__m128i _mm_adds_epu16(__m128i a, __m128i b)
飽和演算を使用して、a の 8 つの符号なし 16 ビット整数を、b の 8 つの符号なし 16 ビット整数に加算します。
__m128i _mm_avg_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、対応する値の平均値を計算し、その結果を丸めます。
__m128i _mm_avg_epu16(__m128i a, __m128i b)
a の 8 つの符号なし 16 ビット整数と b の 8 つの符号なし 16 ビット整数について、対応する値の平均値を計算し、その結果を丸めます。
__m128i _mm_madd_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数に、b の 8 つの符号付き 16 ビット整数を掛けます。 得られた符号付き 32 ビット整数を 2 つずつ加算して、4 つの符号付き 32 ビット整数としてパックします。
__m128i _mm_max_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数と b の 8 つの符号付き 16 ビット整数について、それぞれの値のペアの最大値を計算します。
__m128i _mm_max_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、それぞれの値のペアの最大値を計算します。
__m128i _mm_min_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数と b の 8 つの符号付き 16 ビット整数について、それぞれの値のペアの最小値を計算します。
__m128i _mm_min_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、それぞれの値のペアの最小値を計算します。
__m128i _mm_mulhi_epi16(__m128i a, __m128i b)
a の 8 つの符号付き 16 ビット整数に、b の 8 つの符号付き 16 ビット整数を掛けます。 得られた 8 つの符号付き 32 ビット整数の上位 16 ビットをパックします。
__m128i _mm_mulhi_epu16(__m128i a, __m128i b)
a の 8 つの符号なし 16 ビット整数に、b の 8 つの符号なし 16 ビット整数を掛けます。 得られた 8 つの符号なし 32 ビット整数の上位 16 ビットをパックします。
__m128i _mm_mullo_epi16(__m128i a, __m128i b)
a の 8 つの符号付きまたは符号なし 16 ビット整数に、b の 8 つの符号付きまたは符号なし 16 ビット整数を掛けます。 得られた 8 つの符号付きまたは符号なし 32 ビット整数の下位 16 ビットをパックします。
__m128i _mm_mul_epu32(__m128i a, __m128i b)
a の 2 つの符号なし 32 ビット整数に、b の 2 つの符号なし 32 ビット整数を掛けます。 得られた 2 つの符号なし 64 ビット整数をパックします。
__m128i _mm_sad_epu8(__m128i a, __m128i b)
a の 16 の符号なし 8 ビット整数と b の 16 の符号なし 8 ビット整数について、それぞれの差の絶対値を計算します。 上位の 8 つの差と下位の 8 つの差をそれぞれに合計して、得られた 2 つの符号なし 16 ビット整数を、結果の上位および下位の 64 ビット要素の中にパックします。
__m128i _mm_sub_epi8(__m128i a, __m128i b)
a の 16 の符号付きまたは符号なし 8 ビット整数から、b の 16 の符号付きまたは符号なし 8 ビット整数を引きます。
__m128i _mm_sub_epi16(__m128i a, __m128i b)
a の 8 つの符号付きまたは符号なし 16 ビット整数から、b の 8 つの符号付きまたは符号なし 16 ビット整数を引きます。
__m128i _mm_sub_epi32(__m128i a, __m128i b)
a の 4 つの符号付きまたは符号なし 32 ビット整数から、b の 4 つの符号付きまたは符号なし 32 ビット整数を引きます。
__m128i _mm_sub_epi64(__m128i a, __m128i b)
a の 2 つの符号付きまたは符号なし 64 ビット整数から、b の 2 つの符号付きまたは符号なし 64 ビット整数を引きます。
__m128i _mm_subs_epi8(__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号付き 8 ビット整数から、b の 16 の符号付き 8 ビット整数を引きます。
__m128i _mm_subs_epi16(__m128i a, __m128i b)
飽和演算を使用して、a の 8 つの符号付き 16 ビット整数から、b の 8 つの符号付き 16 ビット整数を引きます。
__m128i _mm_subs_epu8 (__m128i a, __m128i b)
飽和演算を使用して、a の 16 の符号なし 8 ビット整数から、b の 16 の符号なし 8 ビット整数を引きます。