2016-10-12 21 views
1

该分支注册如何在ppc64le中工作?分支注册如何在ppc64le中工作?

我在armv8下面的代码 - br x19armv7 - bx r4

什么是ppc64le它等同?

只想在b r4工作,否则我将不得不 mflr r4 mr r0, r5 mtlr r4 blr

回答

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
相关问题