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 - b0 27.__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 - b1 28.__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中为有符号整型,而这个指令中为无符号整型!其余的是一样的。