SSE4.1指令集系列之一

本文要介绍的是SSE4.1指令集中的几条整数指令及其在视频编码中的应用。

1.单指令32字节差分绝对值求和指令 MPSADBW

这条指令类似于SSE的PSADBW,但它实现的功能更强大。包括微软官方网站上对这条指令的说明都不是能够让人一目了然。下面这张图也许可以帮助我们理解:

这条指令的灵活之处在于源操作数和目的操作数的位置都是可选的。如何选择关键在于后面那个mask常量。这个常量是一个立即数,但只用到了其中的低三位。

其中,最低2位,用于选择源操作数的连续4个字节的起始位置。由于两位二进制有4中状态,所以源操作数的可选起始位置共有4种,具体见上图。

mask的第三位用于选择目的操作时连续11个字节的起始位置。很显然,香港虚拟主机,虚拟主机,共有两个起始位置可供选择。

下面的c代码更清楚的描述了这条指令的功能。

1 static __m128i compute_mpsadbw (unsigned char *v1, unsigned char *v2, int mask) 2 { 3 union 4 { 5 __m128i x; 6unsigned short s[8]; 7 } ret; 8unsigned char s[4]; 9int i, j;10int offs1, offs2;11 12offs2 = 4 * (mask & 3);13for (i = 0; i < 4; i++)14s[i] = v2[offs2 + i];15 16offs1 = 4 * ((mask & 4) >> 2);17for (j = 0; j < 8; j++)18 {19ret.s[j] = 0;20for (i = 0; i < 4; i++)21ret.s[j] += abs (v1[offs1 + j + i] – s[i]);22 } ret.x;25 },香港服务器租用吃水不忘挖井人。

SSE4.1指令集系列之一

相关文章:

你感兴趣的文章:

标签云: