1. __m128i _mm_add_epi8(__m128i a ,__m128i b);
指令名: __m128i _mm_add_epi8(__m128i a ,__m128i b);
说明:将a中16个8位有符号或无符号整数与对应的b中的16个8位有符号或无符号整数相加。
返回值:加入a,b中16个8位整数分别如下排列:a0,a1,.....,a14,a15和b0,b1,......,b14,b15,对应的返回值__m128i 排列为
r0,r1,......,r14,r15,则有如下对应关系:
r0 := a0 + b0
r1 := a1 + b1
...
r15 := a15 + b15 2. __m128i _mm_add_epi16(__m128i a, __m128i b);
指令名: __m128i _mm_add_epi16(__m128i a, __m128i b); 说明:将a中8个16位有符号或无符号整数与对应的b中的8个16位有符号或无符号整数相加。
返回值:加入a,b中8个16位整数分别如下排列:a0,a1,.....,a7和b0,b1,......,b7,对应的返回值__m128i 排列为
r0,r1,......,r7,则有如下对应关系:
r0 := a0 + b0
r1 := a1 + b1
...
r7 := a7 + b7
3. __m128i _mm_add_epi32(__m128i a ,__m128i b); 指令名: __m128i _mm_add_epi8(__m128i a ,__m128i b);
说明:将a中4个32位有符号或无符号整数与对应的b中的4个32位有符号或无符号整数相加。
返回值:加入a,b中4个32位整数分别如下排列:a0,a1,a2,a3和b0,b1,b2,b3对应的返回值__m128i 排列为
r0,r1,r2,r3则有如下对应关系:
r0 := a0 + b0
r1 := a1 + b1
r2 := a2 + b2
r3 := a3 + b3
4. __m64 _mm_add_si64(__m64 a ,__m64 b);
指令名:__m64 _mm_add_si64(__m64 a ,__m64 b);
说明:将64位有符号或无符号整数a与64位有符号或无符号整数b相加。
返回值:加入a,b中64位整数分别如下排列:a0和b0对应的返回值__m64排列为
r0则有如下对应关系:
r0 := a0 + b0
5. __m128i _mm_add_epi64(__m128i a ,__m128i b);
指令名: __m128i _mm_add_epi64(__m128i a ,__m128i b);
说明:将a中2个64位有符号或无符号整数与对应的b中的2个64位有符号或无符号整数相加。
返回值:加入a,b中2个64位整数分别如下排列:a0,a1和b0,b1对应的返回值__m128i 排列为
r0,r1则有如下对应关系:
r0 := a0 + b0
r1 := a1 + b1
6. __m128i _mm_adds_epi8(__m128i a ,__m128i b); 指令名: __m128i _mm_adds_epi8(__m128i a ,__m128i b);
说明:将a中16个8位有符号整数与对应的b中的16个8位有符号整数相加,并启用饱和机制。
返回值:加入a,b中16个8位有符号整数分别如下排列:a0,a1,...,a15和b0,b1,...,b15对应的返回值__m128i 排列为
r0,r1,...,r15则有如下对应关系:
r0 := SignedSaturate(a0 + b0)
r1 := SignedSaturate(a1 + b1)
...
r15 := SignesSaturate(a15 + b15)
7. __m128i _mm_adds_epi16(__m128i a, __m128i b);
这个指令和上面2的关系,同6和1的关系是一样的,在此不再赘述!
8. __m128i _mm_adds_epu8(__m128i a, __m128i b);
这个指令和上面6的唯一区别就是6中为有符号整型,而这个指令中为无符号整型!其余的是一样的。
9. __m128i _mm_adds_epu16(__m128i a, __m128i b);
这个指令和上面7的唯一区别就是6中为有符号整型,而这个指令中为无符号整型!其余的是一样的。
10. __m128i _mm_avg_epu8(__m128i a, __m128i b);
指令名: __m128i _mm_avg_epu8(__m128i a, __m128i b);
说明:将a中16个8位无符号整数与对应的b中的16个8位无符号整数取平均,并取整。
返回值:加入a,b中16个8位无符号整数分别如下排列:a0,a1,...,a15和b0,b1,...,b15对应的返回值__m128i 排列为 r0,r1,...,r15则有如下对应关系:
r0:= (a0 + b0)/2
r1:= a1 + b1)/2
...
r15:= (a15 + b15)/2
11. __m128i _mm_avg_epu16(__m128i a, __m128i b);
这个指令同10的差别就是该指令对应的是8个16位无符号整数对应位取平均,并取整!
12. __m128i _mm_madd_epi16 ( __m128i a, __m128i b);
指令名: __m128i _mm_madd_epi16 ( __m128i a, __m128i b); 说明:将a中8个16位有符号整数与对应的b中的8个16位有符号整数相乘。
返回值:加入a,b中16个8位有符号整数分别如下排列:a0,a1,...,a8和b0,b1,...,b8对应的返回值__m128i数值,但是这个数值的排列方式为
4个32位有符号整数组成,假设分别r0,r1,r2,r3,则对应关系为
r0,r1,...,r8则有如下对应关系:
r0:= (a0 * b0)+(a1 * b1)
r1:= (a2 * b2)+(a3 * b3)
r2:= (a4 * b4)+(a5 * b5)
r3:= (a6 * b6)+(a7 * b7)
13. __m128i _mm_max_epi16(__m128i a, __m128i b);
指令名: __m128i _mm_max_epi16(__m128i a, __m128i b);
说明:将a中8个16位有符号整数与对应的b中的8个16位有符号整数分别比较去较大值。
返回值:加入a,b中8个16位整数分别如下排列:a0,a1,.....,a7和b0,b1,......,b7,对应的返回值__m128i 排列为
r0,r1,......,r7,则有如下对应关系:
r0 := max(a0,b0)
r1 := max(a1,b1)
...
r7 := max(a7,b7)
14. __m128i _mm_max_epu8 (__m128i a, __m128i b);
此指令与13中不同点在于对应整数为16个8位无符号整数对应取较大值,其余意义相同;
15. __m128i _mm_min_epi16(__m128i a, __m128i b);
此指令同13的唯一区别是对位取较小值来最后存储返回,其余同13一样;
16. __m128i _mm_min_epu8 (__m128i a, __m128i b); 此指令与14中不同点在于对应整数为16个8位无符号整数对应取较xiao值,其余意义相同;