1
该分支注册如何在ppc64le中工作?分支注册如何在ppc64le中工作?
我在armv8
下面的代码 - br x19
或armv7
- bx r4
什么是ppc64le
它等同?
只想在b r4
工作,否则我将不得不 mflr r4 mr r0, r5 mtlr r4 blr
该分支注册如何在ppc64le中工作?分支注册如何在ppc64le中工作?
我在armv8
下面的代码 - br x19
或armv7
- bx r4
什么是ppc64le
它等同?
只想在b r4
工作,否则我将不得不 mflr r4 mr r0, r5 mtlr r4 blr
这听起来像你想要做的是一个间接分支。在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
两个重要的参考,你如果你在一个函数中的分支我想要的是: