SSE2指令--使用SSE2的整型指令:算数操作指令-3

来源:互联网 发布:优克联公司工作 知乎 编辑:程序博客网 时间:2024/05/22 15:37

17.  __m128i   _mm_mulhi_epi16 (__m128ia,__m128i b);

               指令名:__m128i   _mm_mulhi_epi16 (__m128ia,__m128i b);

                   说明:__m128i  型变量a中的8个16位有符号整型数值与b中8个16位有符号整型数值对应相乘;

               返回值:返回的__m128i 由8个16位有符号整型组成,假设变量a和b组成分别为a0,a1,....a7和b1,b2,....b7,返回值r由r0,r1,...,r7;返回值rx(x可取0,1,...,7)中的取值为对应的ax与bx相乘后保存在32位有符号整数的高16位数;

           如下所示:

                             r0 := (a0 * b0)[31:16]
                             r1 := (a1 * b1)[31:16]
                                 ...
                             r7 := (a7 * b7)[31:16]

18.  __m128i   _mm_mulhi_epu16 (__m128ia,__m128i b);

             此指令同上面一条指令的区别仅在于,其a,b构成为8个16位无符号整数组成,其余意义一样;

19.  __m128i   _mm_mullo_epi16 (__m128ia,__m128i b);

               指令名:__m128i   _mm_mulhi_epi16 (__m128ia,__m128i b);

                   说明:__m128i  型变量a中的8个16位有符号或无符号整型数值与b中8个16位有符号或无符号整型数  

                               值对应相乘;

               返回值:返回的__m128i 由8个16位有符号或无符号整型组成,假设变量a和b组成分别为a0,a1,....a7和b1,b2,....b7,返回值r由r0,r1,...,r7;返回值rx(x可取0,1,...,7)中的取值为对应的ax与bx相乘后保存在32位有符号或无符号整数的低16位数;

           如下所示:

                             r0 := (a0 * b0)[15:0]
                             r1 := (a1 * b1)[15:0]
                                 ...
                             r7 := (a7 * b7)[15:0]

20.  __m64   _mm_mul_su32 (__m64  a,__m64  b);

          指令名:__m64 _mm_mul_su32 (__m64  a, __m64  b);

              说明:__m64型变量a中的低32位同变量b中的低32位对应相乘

           返回值:对应相乘之后将值存在一个__m64类型的返回值中;

21.  __m64   _mm_mul_epu32 (__m64  a,__m64  b);

        此指令和上面是一样的

22.  __m128i  _mm_sad_epu8 (__m128i  a, __m128i  b);

         指令名__m128i  _mm_sad_epu8 (__m128i  a, __m128i  b);

             说明:计算a中16个8位无符号整数与b对应的16个8位无符号整数的绝对差值;

          返回值:对前八个绝对差值求和然后对后八个绝对差值求和,分别存储在高64位无符号整数元素和低64位无符号整数中;

      如下所示:

                    r0 := abs(a0 - b0) + abs(a1 - b1) +...+ abs(a7 - b7)
                      r1 := 0x0 ; r2 := 0x0 ; r3 := 0x0
                      r4 := abs(a8 - b8) + abs(a9 - b9) +...+ abs(a15 - b15)
                      r5 := 0x0 ; r6 := 0x0 ; r7 := 0x0

23.  __m128i _mm_sub_epi8(__m128i a ,__m128i b);

       指令名 __m128i _mm_sub_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
24.__m128i _mm_sub_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
25.__m128i _mm_sub_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
26.__m64 _mm_sub_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 - b027.__m128i _mm_sub_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 - b128.__m128i _mm_subs_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)
29.__m128i _mm_subs_epi16(__m128i a, __m128i b);
            这个指令和上面24的关系,同28和23的关系是一样的,在此不再赘述!
30. __m128i _mm_subs_epu8(__m128i a, __m128i b);
            这个指令和上面28的唯一区别就是28中为有符号整型,而这个指令中为无符号整型!其余的是一样的。
31. __m128i _mm_subs_epu16(__m128i a, __m128i b);
            这个指令和上面29的唯一区别就是29中为有符号整型,而这个指令中为无符号整型!其余的是一样的。

 

 

 

 

 

 

原创粉丝点击