首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分支寄存器在ppc64le中是如何工作的?

分支寄存器在ppc64le中是如何工作的?
EN

Stack Overflow用户
提问于 2016-10-13 05:15:51
回答 1查看 319关注 0票数 1

分支寄存器在ppc64le中是如何工作的?

我在armv8 --br x19armv7 -- bx r4中有以下代码

ppc64le中它的等价物是什么?

只能使用b r4,否则我将不得不使用mflr r4 mr r0, r5 mtlr r4 blr

EN

回答 1

Stack Overflow用户

发布于 2016-10-13 08:52:52

听起来你想做的是一个间接的分支。Power上有几个工具--计数器寄存器和链接寄存器。

传统上,链接寄存器用于调用函数时的返回地址。因此,例如,如果您在asm中有一个函数,您可能会这样做:

代码语言:javascript
复制
.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

如果你想做你在问题中提到的那种间接分支,你可能会想要使用计数器寄存器。计数器寄存器通常用于循环(因此而得名),但对于间接分支也非常有用。如果你在一个函数中进行分支:

代码语言:javascript
复制
mtctr r4 // r4 - address you want to go to
bctr     // unconditional branch to contents of ctr

如果要对另一个函数进行间接分支,则希望分支也设置链接寄存器:

代码语言:javascript
复制
mtctr r4
bctrl // branch to counter, setting link register

你需要的两个关键参考资料是:

  • The POWER ISA。它可以在网上获得--你可能需要通过注册门户网站,但它应该是免费的。Power ELF ABI v2的
  • 是不可或缺的。它告诉你各种有用的事情,比如如何设置堆栈帧,传入哪些寄存器参数,哪些寄存器是易失性/非易失性的,等等!PDF在https://members.openpowerfoundation.org/document/dl/576
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40008483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档