两操作数指令
Multiple Sum of Absolute Differences:
很复杂的一条指令,目前还没有用到过。
__m128i _mm_mpsadbw_epu8 (__m128i s1, __m128i s2, const int mask);
__m256i _mm256_mpsadbw_epu8 (__m256i s1, __m256i s2, const int mask);
Packed Absolute Value:
对8,16,32位取绝对值。
指令组成:
_mm/_mm256
_abs
_epi8/epi16/epi32
Pack with Signed Saturation:
将16,32位打包位8,16位。
_mm/_mm256
_packs
_epi16/epi32
Pack with Unsigned Saturation:
_mm/_mm256
_packus
_epi32/epi16
Add Packed Integers:
加法,溢出取低位
_mm/_mm256
_add
_epi8/_epi16/_epi32/_epi64
Add Packed Signed Integers with Signed:
带饱和,有符号
_mm/_mm256
_adds
_epi8/_epi16/
Add Packed Unsigned Integers with Unsigned Saturation:
饱和,无符号
_mm/_mm256
_adds
_epu8/_epu16/
Byte Align:
两个向量偏移拼接
_mm/_mm256
_alignr
_epi8
在从SSE到AVX2升级过程中,由于该指令分别对128进行操作,因此要注意。
Logical AND:
逻辑与
_mm/_mm256
_and
_si128/_si256
Logical AND NOT:
逻辑与非 not src1 and src2
_mm/_mm256
_andnot
_si128/_si256
Average Packed Integers:
平均值
_mm/_mm256
_avg
_epu8/_epu16
Variable Blend Packed Bytes:
可变赋值,根据src3决定结果为src1或src2的对应位。第三个mask参数为寄存器。
_mm_blendv_epi8
Blend Packed Words:
可变赋值,第三个mask参数为int
_mm/_mm256
_blend
_epi16
Compare Packed Integers for Equality:
比较是否等于,等于目标为赋值0xff,否则为0。
_mm/_mm256
_cmpeq
_epi8/_epi16/_epi32/_epi64
Compare Packed Integers for Greater Than:
比较是否大于
_cmpgt
Packed Horizontal Add:
相邻位置打包相加
_mm/_mm256
_hadd
_epi16/_epi32
Packed Horizontal Add with Saturation:
相邻位置打包相加,饱和&#x