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值,其餘意義相同;