将所有 LDUR 更改为 ADD 和 LD
Posted
技术标签:
【中文标题】将所有 LDUR 更改为 ADD 和 LD【英文标题】:Changing all LDUR to an ADD and a LD 【发布时间】:2019-02-26 13:21:20 【问题描述】:考虑对执行以下指令的单周期非流水线处理器进行更改:LDUR
、STUR
、R-type
和 CBZ
。考虑以以下方式将LDUR
指令替换为一对新指令的修改:
原码:
LDUR X1, X2, #100 /* X1=mem[X2+100] */
新代码:
ADD X4, x2, #100 /* X4=X2+100 */
LD X1, X4 /* X1=mem[X4] */
有人问我可能的优点和缺点。 我可以看到在非流水线处理器上将一条指令变成 2 条指令的缺点。我似乎找不到任何可能的优势。
有谁知道这样做的好处?
【问题讨论】:
This question is being discussed on meta. 【参考方案1】:我唯一想到的就是偏移量,但我有一种直觉,可能会有一些额外的隐藏,因为这个问题来自学术人士。然而:
LDUR
的可能偏移量在 -256 到 255 的范围内。另一方面,ADD
的偏移量范围更大,从 0 到 4095,这允许您实现一个函数以使用更大的静态偏移。
文档:
ARM Architecture Reference Manual ARMv8, for ARMv8-A architecture profile
参考:
ADD
:C6.2.4(C6-698 页)LDUR
:C6.2.155(C6-978 页)
【讨论】:
以上是关于将所有 LDUR 更改为 ADD 和 LD的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress Woocommerce 将所有产品更改为缺货
将所有文件从文件夹和 Mac 终端中的所有子文件夹更改为 .txt [重复]