亲注册登录道勤网-可以查看更多帖子内容哦!(包涵精彩图片、文字详情等)请您及时注册登录-www.daoqin.net
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这里简要描述几个重要的算数运算指令。 1. 水平相加指令 SSSE3指令集增加的主要是针对整数进行水平方向上相加的指令,与SSE3的浮点指令类似。 phaddd 寄存器水平方向上按照无符号32位整数进行加法
phaddw 寄存器水平方向上按照无符号16位整数进行加法
phaddsw 寄存器水平方向上按照16位整数进行饱和加法 phsubd 寄存器水平方向上按照无符号32位整数进行减法
edius7 安装时候需要支持ssse3指令集,小编带您详细了解下关于ssse3指令集是啥?
phsubw 寄存器水平方向上按照无符号16位整数进行减法
phsubsw 寄存器水平方向上按照16位整数进行饱和减法 示例:
phaddw Dest, SRC 源数据和目的数据水平相加并打包,适用于MMX和SSE寄存器:
DEST[15:0] ← DEST[31:16] + DEST[15:0];
DEST[31:16] ← DEST[63:48] + DEST[47:32];
DEST[47:32] ← SRC[31:16] + SRC[15:0];
DEST[63:48] ← SRC[63:48] + SRC[47:32];
XMM寄存器类似。 2. 饱和字节乘加指令 PMADDUBSW
按照字节对应位置做乘法,在把相邻两数相加,饱和在16位有符号数。 示例:PMADDUBSW DEST, SRC
取源数据和目的数据的乘加的有符号饱和值,适用于MMX和SSE寄存器:
DEST[15:0] ←saturatetoSWord(SRC[15:8]*DST[15:8] + SRC[7:0]*DST[7:0]);
DEST[31:16]←saturatetoSWord(SRC[31:24]*DST[31:24] + SRC[23:16]*DST[23:16]);
DEST[47:32]←saturatetoSWord(SRC[47:40]*DST[47:40] + SRC[39:32]*DST[39:32]);
DEST[63:48]←saturatetoSWord(SRC[63:56]*DST[63:56] + SRC[55:48]*DST[55:48]);
XMM寄存器类似。
3. 16位乘法取高位 PMULHRSW
这条指令专门为定点运算设计
用伪代码描述更为方便:
signed short a[8]; // input a
signed short b[8]; // input b
signed short r[8]; // output r
for (i=0; i < 8; i++)
r = INT16((a*b + 0x4000) >> 15);
这是一种Q15定点格式的舍入移位运算,在语音信号处理中颇为常见。
4. 取绝对值操作 PABSB/PABSW/PABSD
示例:PABSW
取源数据的绝对值,适用于MMX和SSE寄存器:
DEST[15:0] ← ABS(SRC[15:0]);
DEST[31:16] ← ABS(SRC[31:16]);
DEST[47:32] ← ABS(SRC[47:32]);
DEST[63:48] ← ABS(SRC[63:48]);
XMM寄存器类似。 5. 字节混选指令 PSHUFB 这条指令非常的灵活,用于选取源寄存器的任意字节重新排布到目的寄存器。
用伪代码描述如下: char a[16]; // input a
char b[16]; // input b
char r[16]; // output r
for (i=0; i < 16; i++)
r = (b < 0) ? 0 : a[b % 16]; 如果源操作数的该字节高位符号位为1,即源字节操作数小于零的时候,把目的寄存器赋值为零。
否则,根据源操作数的低4位选择目的操作数,将其拷贝到目的操作数的相应位。
道勤主机提供365天*24小时全年全天无休、实时在线、零等待的售后技术支持。竭力为您免费处理您在使用道勤主机过程中所遇到的一切问题!
如果您是道勤主机用户,那么您可以通过QQ【792472177】、售后QQ【59133755】、旺旺【诠释意念】、微信:q792472177免费电话、后台提交工单这些方式联系道勤主机客服!
如果您不是我们的客户也没问题,点击页面最右边的企业QQ在线咨询图标联系我们并购买后,我们为您免费进行无缝搬家服务,让您享受网站零访问延迟的迁移到道勤主机的服务! |