首页 理论教育 算术运算指令的优化

算术运算指令的优化

时间:2023-06-20 理论教育 版权反馈
【摘要】:算术运算指令用于完成加、减、乘、除等算术运算。基于CPU的40位ALU、硬件MAC及多级流水线的强大功能,TMS320C54x的算术运算指令具有操作灵活、功能强、速度快的特点。TMS320C54x的算术运算指令非常丰富,按照功能的不同可以将算术运算指令分为6组:加法指令、减法指令、乘法指令、乘加与乘减指令、双精度指令和特殊应用指令。表4-14 加法指令TMS320C54x中提供了多条用于加法的指令,如ADD、ADDC、ADDM和ADDS。 减法指令示例。3.乘法指令乘法指令是将暂存器T或一个数

算术运算指令的优化

算术运算指令用于完成加、减、乘、除等算术运算。基于CPU的40位ALU、硬件MAC及多级流水线的强大功能,TMS320C54x的算术运算指令具有操作灵活、功能强、速度快的特点。TMS320C54x的算术运算指令非常丰富,按照功能的不同可以将算术运算指令分为6组:加法指令、减法指令、乘法指令、乘加与乘减指令、双精度指令和特殊应用指令。分别叙述如下。

1.加法指令

加法指令是将16位的值与累加器的内容或另一个数据存储单元的内容相加,并把结果放进累加器。加法指令共有13条,见表4-14。

表4-14 加法指令

978-7-111-35536-6-Chapter04-66.jpg

TMS320C54x中提供了多条用于加法的指令,如ADD、ADDC、ADDM和ADDS。其中:

1)ADD为不带进位加法,用于将一个16位数加到选定的累加器中。

2)ADDC用于带进位的加法运算,即将16位的Smem和进位位C的值加到src中。

3)ADDM专用于立即数的加法运算,即将16位的Smem与16位立即数lk相加,结果放在Smem中。

4)ADDS用于无符号数的加法运算,即将无符号16位的Smem加到src中。

加法指令中,将一个16位的数加到选定的累加器中,这个16位数可以是单数据存储器操作数Smem、双数据存储器操作数Xmem和Ymem、立即数lk或累加器src移位后的值。

如果定义了目的累加器dst,加法结果存入dst,否则存入src中。操作数左移时低位添0,右移时,如果SXM=1,则高位进行符号扩展;如果SXM=0,则高位添0。加法指令受状态位符号扩展模式位SXM和溢出模式位OVM的影响,执行结果影响状态位进位标志C和目的累加器溢出标志OVdst(若未指定dst,则为OVsrc)。

例4-16】 加法指令示例。

978-7-111-35536-6-Chapter04-67.jpg

978-7-111-35536-6-Chapter04-68.jpg

2.减法指令

减法指令是将累加器的内容或另一个数据存储单元的内容与一个16位的值相减,并把结果放进累加器。减法指令共有13条,见表4-15。

表4-15 减法指令

978-7-111-35536-6-Chapter04-69.jpg

(续)

978-7-111-35536-6-Chapter04-70.jpg

TMS320C54x中提供了多条用于减法的指令,如SUB、SUBB、SUBC和SUBS。其中:

1)SUB为不带借位的减法,用于从选定的累加器或Xmem中减去一个16位数,结果放在dst[src]中。

2)SUBB用于带借位的减法运算,即从源累加器src中减去Smem的值和进位位C的逻辑反,结果存在src中。

3)SUBS用于无符号数的减法运算,即从源累加器src中减去16位无符号Smem的值。

4)SUBC为移位减,即将16位的Smem左移15位,再从src中减去移位后的值。若结果大于0,则结果左移1位后加上1,放入src中;否则只把src的值左移一位,放入src中,DSP中的除法就是用该指令来实现的。

减法指令受状态位SXM和OVM的影响,执行结果影响状态位C和OVdst(若未指定dst,则为OVsrc)。

例4-17】 减法指令示例。

978-7-111-35536-6-Chapter04-71.jpg

978-7-111-35536-6-Chapter04-72.jpg

在TMS320C54x中没有提供专门的除法指令,一般有两种方法来完成除法。一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用SUBC指令,重复16次减法完成除法运算。

下面这几条指令就是利用SUBC来完成整数除法(temp1/temp2):

978-7-111-35536-6-Chapter04-73.jpg

在TMS320C54x中实现16位的小数除法与前面的整数除法基本一样,也是使用SUBC指令来完成,但应注意小数除法的结果一定是小数(小于1),所以被除数一定小于除数。在执行SUBC指令前,应将被除数装入累加器的高16位,而不是低16位,其结果的格式与整数除法一样,应当考虑符号位对结果小数点的影响,所以应将商右移一位,得到正确的有符号数。

3.乘法指令

乘法指令是将暂存器T或一个数据存储单元的内容与一个立即数或另一个数据存储单元的内容相乘,并把结果放进目的累加器。乘法指令共有10条,见表4-16。

表4-16 乘法指令

978-7-111-35536-6-Chapter04-74.jpg

(续)

978-7-111-35536-6-Chapter04-75.jpg

TMS320C54x中提供了多条用于乘法的指令,如MPY、MPYA、MPYU和SQUR。其结果都是32位的,放在累加器A或B中。其中:

1)MPY用于将T寄存器的值或一个数据存储器的值与另一个数据存储器的值或一个立即数相乘,结果放入dst中,在读操作数阶段把Smem或Xmem的值装入T寄存器中。

2)MPYA用于将A的高位与Smem或T寄存器的值相乘,结果放入dst或B中,在读操作数期间把Smem装入T寄存器。

3)MPYU用于将无符号T寄存器值与无符号Smem相乘,结果放入dst。

4)SQUR用于将Smem或累加器A的高位二次方后,结果放在dst中。

乘法指令受状态位分数模式位FRCT和溢出模式位OVM的影响,执行结果影响状态位OVdst。(www.xing528.com)

例4-18】 乘法指令示例。

978-7-111-35536-6-Chapter04-76.jpg

978-7-111-35536-6-Chapter04-77.jpg

4.乘加和乘减指令

乘加和乘减指令是将暂存器T或一个数据存储单元的内容与一个立即数或另一个数据存储单元的内容相乘,并把乘积与源累加器的内容相加/减,然后把结果放进累加器中。乘加和乘减指令共有22条,见表4-17。

表4-17 乘加和乘减指令

978-7-111-35536-6-Chapter04-78.jpg

(续)

978-7-111-35536-6-Chapter04-79.jpg

①带有扩展名R,对乘法结果进行舍入处理(加215,低16位清0)

TMS320C54x中提供了多条用于乘加和乘减的指令,如乘加指令MAC[R]、MACA[R]、MACD、MACP、MACSU、SQURA和乘减指令MAS[R]、MASA[R]、SQURS。其中:

1)MAC[R]用于完成乘累加运算,结果放入dst[src]中,带扩展名R时,结果还需要进行舍入操作。

2)MACA[R]用于将A的高位与Smem或T寄存器中的内容相乘,乘积加到累加器B中或src中,带扩展名R时,结果还需要进行舍入操作。

3)MACD用于将Smem与pmad相乘,乘积和src值相加,结果放入src中,并把Smem装入下一数据单元和T寄存器。

4)MACP用于将Smem与pmad相乘,乘积和src相加,结果放入src中,同时把Smem复制到T寄存器中。

5)MACSU用于将无符号Xmem与带符号Ymem相乘,乘积与src相加,结果放入src中,同时把Xmem存入T寄存器。

6)SQURA用于对Smem求二次方并加到src中,同时Smem放到T寄存器中。

7)MAS[R]用于完成乘累减运算,将Smem与T寄存器内容相乘,或者Xmem与Ymem相乘,再从src中减去该乘积,结果存放在dst中,带扩展名R时,结果还需要进行舍入操作。

8)MASA[R]用于将A的高位与Smem或T寄存器中的内容相乘,然后从B或src中减去该乘积,结果存入B或dst中,带扩展名R时,结果还需要进行舍入操作。

9)SQURS用于将Smem值复制到T寄存器,然后src值减去Smem值的二次方,结果存入src中。

乘加和乘减指令受状态位FRCT和OVM的影响,执行结果影响状态位OVdst。

例4-19】 乘加指令示例。

978-7-111-35536-6-Chapter04-80.jpg

978-7-111-35536-6-Chapter04-81.jpg

例4-20】 乘减指令示例。

978-7-111-35536-6-Chapter04-82.jpg

5.双精度指令

双精度(32位操作数)指令是指那些有一个操作数为双精度(32位)的指令。双精度指令共有6条,见表4-18。

表4-18 双精度(32位操作数)指令

978-7-111-35536-6-Chapter04-83.jpg

注:C16=0,表中指令以双精度方式(32位)执行;C16=1,表中指令以双16位方式(同时进行两次16位数的加或减)执行。

TMS320C54x中提供了多条双精度指令,如DADD、DADST、DRSUB、DSADT、DSUB、DSUBT。指令中,Lmem为32位操作数,该32位操作数由两个连续地址的16位字构成,低地址必须为偶数,内容为32位操作数的高16位,高地址的内容则是32位操作数的低16位。

在双精度指令中,C16的值决定了指令执行的方式。当C16=0时,指令以双精度方式(32位)执行。40位累加器的值src加到长数据存储器中,饱和度和溢出位都是根据运算的结果来设置的。指令受状态位SXM和OVM的影响,执行指令会影响结果状态位C和OVdst。

当C16=1时,指令以双16位方式执行。src的高位字(31~16位)与Lmem的高16位相加;src的低位字(15~0位)与Lmem的低16位相加。饱和度和溢出位在此方式下不受影响,并且无论OVM的状态是什么,结果都不进行饱和运算。

例4-21】 双精度(32位操作数)指令示例。

978-7-111-35536-6-Chapter04-84.jpg

6.特殊应用指令

TMS320C54x还提供了15条特殊应用指令,见表4-19。

表4-19 特殊应用指令

978-7-111-35536-6-Chapter04-85.jpg

1EXPsrc该指令计算累加器A指数值并保存在T寄存器中,该值是一个-8~31之间的带符号的二进制补码值。指数值是通过源累加器A的引导位数减8得到的。引导位数等于消除40位累加器A中符号位以外的冗余符号位所需左移的位数。指令结束后,A中值没有改变。如果引导位数减去8的值为负,说明累加器A的保护位中有有效位。

TMS320C54x提供的特殊应用指令分别为ABDST、ABS、CMPL、DELAY、EXP、MAX、MIN、POLY、SAT、RND、SQDST、FIRS、LMS、NEG、NORM。除了一条FIRS为2字3周期指令之外,其他全部是单字单周期指令。完成的功能包括求绝对值、取反、取大值给目标或取小值给目标、求补码、求指数等。这些指令提高了定点的处理能力,为一些特殊运算提供了方便。

例4-22】 特殊应用指令示例。

978-7-111-35536-6-Chapter04-86.jpg

978-7-111-35536-6-Chapter04-87.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈