将所有 LDUR 更改为 ADD 和 LD

Posted

技术标签:

【中文标题】将所有 LDUR 更改为 ADD 和 LD【英文标题】:Changing all LDUR to an ADD and a LD 【发布时间】:2019-02-26 13:21:20 【问题描述】:

考虑对执行以下指令的单周期非流水线处理器进行更改:LDURSTURR-typeCBZ。考虑以以下方式将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的主要内容,如果未能解决你的问题,请参考以下文章

sh 将所有文件更改为644,将所有文件夹更改为755

如何将订单参考更改为编号参考

Wordpress Woocommerce 将所有产品更改为缺货

将所有文件从文件夹和 Mac 终端中的所有子文件夹更改为 .txt [重复]

如何将 money 和 smallmoney 的所有 SQL 列更改为十进制?

问题解决:Centos误将/lib64更改为lib64.bak