分支寄存器如何在ppc64le中工作?
我在armv8
- br x19
中有以下代码
或在armv7
- bx r4
ppc64le
中的内容是什么?
b r4
只需要工作吗?
mflr r4
mr r0, r5
mtlr r4
blr
答案 0 :(得分:3)
听起来你想做的是间接分支。 Power上有几个设备 - 计数器寄存器和链接寄存器。
链接寄存器传统上用于调用函数时的返回地址。因此,例如,如果你在asm中有一个函数,你可能会这样做:
.my_func
// save r31 to the stack
...
mflr r31 // save off link register
...
bl .another_function // branch, setting the link register
nop // control will return here
...
mtlr r31 // restore LR
// restore r31 from stack
blr // branch to LR, exiting the function
如果你想在你的问题中谈论你所讨论的那种间接分支,你可能想要使用计数器寄存器。计数器寄存器通常用于循环(因此名称),但对间接分支也非常有用。如果你在一个函数中分支:
mtctr r4 // r4 - address you want to go to
bctr // unconditional branch to contents of ctr
如果要对另一个函数进行间接分支,您希望分支也设置链接寄存器:
mtctr r4
bctrl // branch to counter, setting link register
您需要的两个重要参考资料是: