操作数的顺序是否会影响MUL操作的性能?

时间:2015-10-13 13:42:16

标签: assembly arm

我听说MUL中操作数的顺序会影响性能 在ARM汇编中,操作数的顺序是否会影响MUL操作的性能?

2 个答案:

答案 0 :(得分:3)

这个概念以及操作数限制Michael mentions是早期ARM内核使用Booth's algorithm来实现乘法器的结果。早期的非常使用目标寄存器作为工作寄存器,因此如果在此过程中销毁了一个输入操作数,那么你最终会得到一个无意义的结果 - 后来的核心具有更好的乘法器(ARM7TDMI)我认为,将这些工作保留在乘法器单元的内部,并且最后只写回寄存器,因此特定的限制最终完全在ARMv6架构中解除。但是,这样的迭代算法也可能能够提前终止,并且v6体系结构仍然会使早期实现的行为正式化,并注意提前终止的任何实现都必须基于 second 操作数。 / p>

在实践中,这意味着,在一个适当的古老核心上,操作所需的周期数MUL Rd, Rm, Rs可能depend on how many non-sign bits Rs has,但在ARMv5和更高版本的设计中,您几乎肯定会假设快速修复 - 时间乘数,它没有任何区别。

答案 1 :(得分:0)

表现,没有(AFAIK)。但是,操作数顺序在某些ARM acrhitectures上可能因其他原因而变得重要。从ARM7TDMI指令集手册(DDI 0029E):

  

4.7.1操作数限制
  目标寄存器Rd不能与操作数寄存器Rm相同。 R15   不得用作操作数或目标寄存器。

因此,例如,不应该写mul r1,r1,r2,但mul r1,r2,r1也可以。如果您对RdRm使用相同的寄存器,手册似乎没有详细说明将会发生什么,这可能取决于具体的实现。 ARM ARM(DDI 0100E)表示结果是 UNPREDICTABLE