SSE2指令--使用SSE2的整型指令:算數操作指令-2

   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值,其餘意義相同;
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章