将所有LDUR更改为ADD和LD

时间:2019-02-26 13:21:21

标签: assembly arm armv8

请考虑对执行以下指令的单周期非流水线处理器进行更改: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条指令的缺点。我似乎找不到任何可能的优势。

有人知道这样做的好处吗?

1 个答案:

答案 0 :(得分:4)

我唯一想到的是补偿,但是我有一种直觉,感觉可能还有一些额外的隐患,因为问题来自学者。但是:

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页)