edius7 安装时候需要支持ssse3指令集,小编带您详细了解下关于ssse3指令集是啥?
这里简要描述几个重要的算数运算指令。1.水平相加指令 SSSE3指令集增加的主要是针对整数进行水平方向上相加的指令,与SSE3的浮点指令类似。 phaddd 寄存器水平方向上按照无符号32位整数进行加法phaddw 寄存器水平方向上按照无符号16位整数进行加法
phaddsw 寄存器水平方向上按照16位整数进行饱和加法 phsubd 寄存器水平方向上按照无符号32位整数进行减法 phsubw 寄存器水平方向上按照无符号16位整数进行减法
phsubsw 寄存器水平方向上按照16位整数进行饱和减法 示例:
phaddwDest, SRC 源数据和目的数据水平相加并打包,适用于MMX和SSE寄存器:
DEST ← DEST + DEST;
DEST ← DEST + DEST;
DEST ← SRC + SRC;
DEST ← SRC + SRC;
XMM寄存器类似。 2. 饱和字节乘加指令 PMADDUBSW
按照字节对应位置做乘法,在把相邻两数相加,饱和在16位有符号数。示例:PMADDUBSWDEST, SRC
取源数据和目的数据的乘加的有符号饱和值,适用于MMX和SSE寄存器:
DEST ←saturatetoSWord(SRC*DST + SRC*DST);
DEST←saturatetoSWord(SRC*DST + SRC*DST);
DEST←saturatetoSWord(SRC*DST + SRC*DST);
DEST←saturatetoSWord(SRC*DST + SRC*DST);
XMM寄存器类似。
3.16位乘法取高位 PMULHRSW
这条指令专门为定点运算设计
用伪代码描述更为方便:
signed short a; // input a
signed short b; // input b
signed short r; // output r
for (i=0; i < 8; i++)
r = INT16((a*b + 0x4000) >> 15);
这是一种Q15定点格式的舍入移位运算,在语音信号处理中颇为常见。
4. 取绝对值操作 PABSB/PABSW/PABSD
示例:PABSW
取源数据的绝对值,适用于MMX和SSE寄存器:
DEST ← ABS(SRC);
DEST ← ABS(SRC);
DEST ← ABS(SRC);
DEST ← ABS(SRC);
XMM寄存器类似。 5. 字节混选指令PSHUFB 这条指令非常的灵活,用于选取源寄存器的任意字节重新排布到目的寄存器。
用伪代码描述如下: char a; // input a
char b; // input b
char r; // output r
for (i=0; i < 16; i++)
r = (b < 0) ? 0 : a % 16];如果源操作数的该字节高位符号位为1,即源字节操作数小于零的时候,把目的寄存器赋值为零。
否则,根据源操作数的低4位选择目的操作数,将其拷贝到目的操作数的相应位。
页:
[1]