请考虑对执行以下指令的单周期非流水线处理器进行更改: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条指令的缺点。我似乎找不到任何可能的优势。
有人知道这样做的好处吗?
答案 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页)