1、新闻出处:DSP信息网 发布时间: 2007-11-15 C64X特有的汇编指令集 ABS2 src2,dst .L 对src2的高、低半字的2 个有符号16位数取绝对值,有饱和 ADDAD src2,src1,dst ..D 使用双字寻址模式的整数加法 ADD2 src1,src2,dst .L.S.D src1和src2的高低半字分别做有符号加法 ADD4 src1,src2,dst .L Src1和src2的4 个字节分别做有符号加法 ADDKPC src1,src2,dst .S2 7位有符号常数src1左移2位,然后加到饱和ADDKPC指
2、令的取指包第1条指令地址(PCE1);3位无符号常数src2指定插入的空操作NOP数。 AND src1,src2,dst .L.S.D ANDN src1,src2,dst .L.S.D 先将src2取反,再和src1按位“与” AVG2 src1,src2,dst .M 分别求src1和src2高、低半字的平均值,向上取整,结果置入dst AVGU4 src1,src2,dst .M 分别求src1和src2的4个无符号字节的平均值,向上取整。 BDEC scst10,dst .S 当dst>=0时,将dst内容减1并执行相对转移,转移地址为BD
3、EC指令所在的取指包第一条指令地址(PCE1)与scst10(10位有符号数)左移2位后相加的和。如dst<0,无操作。 BITC4 src2,dst .M 将src2的4个字节内的“1”的个数记入dst的相应字节。 BITR src2,dst .M 位反转指令,将src2按位序(31~0)反转送到dst的位(31~0) BNOP src2,src1 注:src2为12为有符号数scst12 ..S2 执行绝对转移,转移地址位BNOP指令所在的取指包第1条指令地址(PCE1)与12位有符号数src2左移2位后相加的和。Src1指定插入的空操作数NOP数(0~5) B
4、NOP src2,src1 注:src2为寄存器 .S2 执行绝对转移,转移地址由src2的内容决定。Src1指定插入的空操作数NOP数(0~5) BPOS scst10,dst .S 与BDEC内容相似,差别仅在与dst内容不变 CMPEQ2 src1,src2,dst .S 分别比较src1和src2高低半字,若高半字相等则dst的bit 1置1,否则置0;同样,低半字的比较结果置dst的bit 0为1或0 CMPEQ4 src1,src2,dst .S 分别比较src1和src2的4个字节,比较结果置dst的bit 3~bit 0位为1或0 CMPGT2
5、 src1,src2,dst
.S
分别比较src1和src2高低半字,若src1高半字>src2高半字,则dst的bit 1位置1,否则置0;通样,低位半字的比较结果置dst的bit 0位为1或0
CMPGTU4 src1,src2,dst
.S
分别比较src1和src2的4个字节,若src1最高字节>src2最高字节,则dst的bit3置1,否则置0;同样,其他3个字节的比较结果置dst的bit 2位~bit 0位为1或0
CMPLT2 src2,src1,dst
.S
分别比较src2和src1的高低半字,若src2高半字 6、 1置1,否则置0;同样,低位半字结果置dst的bit 0位为1或0
CMPLTU4 src2,src1,dst
.S
分别比较src2和src1的4个字节(无符号数),若src1最高字节 7、展。Dst为32位整型量时 ,取64位点积的低32位。
DOTPN2 src1,src2,dst
.M
2个16位与16位乘积之差指令,src1与src2中高半字的积减去低半字的积 ,差值送dst
DOTPNRSU2 src1,src2,dst
.M
带求反、移位及四舍五入的点积指令。Src1(有符号数)和src2(无符号数)高半字的积减去低半字的积 ;差值加8000h后右移16位,结果置入dst
DOTPRSU2 src1,src2,dst
.M
与DOTPNRSU2类似,Src1(有符号数)和src2(无符号数)高半字的积加低半字的积 ;和数加8000h后右移16 8、位,结果置入dst
DOTPRUS2 src2,src1,dst
.M
与上一行DOTPRSU2指令差别仅仅是:src1(有符号数)和src2(无符号数)在指令的位置不同。
DOTPSU4 src1,src2,dst
.M
先求src1(有符号数)与src2(无符号数)4个字节对应的积,再相加 ,和数送入dst。
DOTPU4 src1,src2,dst
.M
与上一行指令的差别仅仅是:src1和src2都是无符号数,和数也是无符号数。
GMPY4 src1,src2,dst
.M
做4个字节的Galois域乘法。
LDDW *+baser[offs 9、etR],dst
LDDW *+baseR[ucst5],dst
.D
从内存读取64位双精度到寄存器,偏移地址可以放在寄存器中,也可以是5位常数。
LDNDW *mem,dst
LDNW *mem,dst
.D
无边界调整的内存读取,1次读64位
无边界调整的内存读取,1次读32位
MAX2 src1,src2,dst
.L
分别比较有符号数src1和src2的高低半字,取其中的大数送到dst的相应位置
MAXU4 src1,src2,dst
.L
分别比较有符号数src1和src2的4个无符号字节,取其中的大数送到dst的相应位置
MIN2 s 10、rc1,src2,dst
.L
分别比较有符号数src1和src2的高低半字,取其中的小数送到dst的相应位置
MINU4 src1,src2,dst
.L
分别比较有符号数src1和src2的4个无符号字节,取其中的小数送到dst的相应位置
MPY2 src1,src2,dst
.M
2个源操作数的高低有符号半字,对应相乘;目的操作数是64位的双字,低位字存放低半字的积,高位字存放高半字的积。
MPYHI src1,src2,dst
.M
Src1的高半字与src2的32位做乘法,结果是64有符号数,存入1对寄存器。
MPYHIR src1,s 11、rc2,dst
.M
16位与32位带舍入的乘法:src1的高半字与src2的32位做乘法,乘积加4000h后右移15位,结果的低32位存入dst
MPYIH src2,src1,dst
.M
Src1的高半字与src2的32位做乘法,结果是64有符号数,存入1对寄存器(与MPYHI指令相比,只是src1和src2的位置不同)。
MPYIHR src2,src1,dst
.M
与MPYHIR相比 ,只是src1,src2位置不同。
MPYIL src2,src1,dst
.M
Src1的低半字与32位的src2做乘法,结果是64位的有符号数,存入1对 12、寄存器。
MPYILR src2,src1,dst
.M
16位与32位的带舍入乘法:src1的低半字与32 位的src2做乘法,乘积加4000h后右移15位,结果的低32位存入dst
MPYLI src1,src2,dst
.M
与MPYIL相比 ,只是src1、src2位置不同。
MPYLIR src1,src2,dst
.M
与MPYILR相比,只是src1、src2位置不同。
MPYSU4 src1,src2,dst
.M
有符号src1与无符号src2的4个字节对应相乘,4个16位乘积依序存放到一对寄存器内
MPYUS4 src1,src2 13、dst
.M
与MPYSU4的差别仅在于src1、src2位置不同
MPYU4 src1,src2,dst
.M
无符号src1与无符号src2的4个字节对应相乘,4个16位乘积依序存放到一对寄存器内
MVD src2,dst
.M
通过功能单元.M把寄存器src2的内容送到寄存器dst,用时4个周期。
MVK cst,dst
.L.S.D
将常数cst写入dst低半字,符号扩展
MVKL cst,dst
.L.S.D
将常数cst或cst的低16位写入dst低半字,符号扩展。
OR src1,src2,dst
.L.S.D
Src1和 14、src2按位“或”
PACK2 src1,src2,dst
.L.S
将src1与suc2的低16位提取组成一个新的整型数,送dst
PACKH2 src1,src2,dst
.L.S
将src1与suc2的高16位提取组成一个新的整型数,送dst
PACKH4 src1,src2,dst
.L
将src1与suc2的低位字节提取组成一个新的整型数,送dst
PACKHL2 src1,src2,dst
.L.S
将src1高16位与src2的低16位提取组成一个新的整型数,送dst
PACKL4 src1,src2,dst
.L
将src1及 15、src2偶位字节提取组成一个新的整型数,送dst
PACKLH2 src1,src2,dst
.L.S
将src1的低16位与src2的高16位提取组成一个新的整型数,送dst
POTL src2,src1,dst
.M
将src2旋转左移,无符号数src1的最低5位指定旋转左移位数。
SADD src1,src2,dst
.S
Src1与src2高低半字分别做带饱和的加法,不影响SAT位。
SADDU4 src1,src2,dst
.S
Src1与src2的4个字节对应做无符号带饱和加法 ,不影响SAT位
SADDSU2 src1,src2 16、dst
.S
有符号数src1和无符号数src2的高低半字分别做带饱和加法,不影响SAT位
SADDUS2 src1,src2,dst
.S
无符号数src1和有符号数src2的高低半字分别做带饱和加法,不影响SAT位
SHFL src2,dst
.M
Src2的高半字与低半字按位顺序交插,形成新字送dst
SHLMB src1,src2,dst
.L.S
左移并拼接:src2左移8位,再把src1的最高字节续为其最低字节,形成新字送dst
SHR2 src2,src1,dst
.S
Src2的高低半字分别算术右移,有符号扩展,src1的低5位或u 17、cst5确定移位次序。
SHRMB src1,src2,dst
.L.S
右移并拼接:src2右移8位,再把src1的最低字节续为其最高字节,形成新字送dst
SHRU2 src2,src1,dst
.S
Src2的高低半字视作2个无符号数,分别算术右移,无符号扩展,src1的低5位或ucst5确定移位次数
SMPY2 src1,src2,dst
.M
Src1与src2高低半字对应相乘,结果为64位,其他同SMPY指令。
SPACKU4 src1,src2,dst
.S
将src1及src2 4个有符号16位数有饱和低转为4个8位无符号数,送dst
SSH 18、VL src2,src1,dst
.M
带符号扩展、移位方向、长度可变的左移指令:src1为补码数,且绝对值不大于31。如src1为正,src2左移;如src1为负,src2带符号扩展地右移。移位中符号有变,取饱和值,并置SAT位为1。
SSHVR src2,src1,dst
.M
带符号扩展、移位方向、长度可变的右移指令:src1为补码数,且绝对值不大于31。如src1为正,src2带符号扩展右移;如src1为负,src2左移。移位中符号有变,取饱和值,并置SAT位为1。
STDW src,*mem
.D
STNDW src,*mem
.D
STNW 19、 src,*mem
.D
SUB2 src1,src2,dst
.S.D
Src1与src2的高低半字分别做有符号减法
SUB4 src1,src2,dst
.L
Src1与src2的4个字节分别做有符号减法,得数送入dst的对应字节
SUBABS4 src1,src2,dst
.L
Src1与src2的4个字节分别做无符号减法,将各个差值的绝对值送入dst
SWAP2 src2,dst
.L.S
将src2的高低半字交换,结果送dst
SWAP4 src2,dst
.L
将src2的高低半字的2个字节交换 ,结果送dst
UNPKHU4 src2,dst
.L.S
将src2高半字的2个字节分别送dst的byte 2、byte 0,其余2字节补0
UNPKLU4 src2,dst
.L.S
将src2低半字的2个字节分别送dst的byte 2、byte 0,其余2字节补0






