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

时间:2016-10-12 21:15:51

标签: powerpc

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

我在armv8 - br x19中有以下代码 或在armv7 - bx r4

ppc64le中的内容是什么?

b r4只需要工作吗? mflr r4 mr r0, r5 mtlr r4 blr

1 个答案:

答案 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

您需要的两个重要参考资料是:

  • POWER ISA。它可以在线获得 - 您可能需要通过注册门户网站,但它应该是免费的。
  • Power ELF ABI v2是必不可少的。它告诉你各种有用的东西,比如如何设置堆栈帧,传入哪些寄存器参数,哪些是易失性/非易失性等等! PDF格式为https://members.openpowerfoundation.org/document/dl/576