2016-10-12 8 views
1

ppc64leの分岐レジスタはどのように機能しますか?ppc64leでは分岐レジスタはどのように機能しますか?

私はarmv8に次のコードを持っている - それのためのppc64leで同等である何bx r4

からbr x19armv7では?

するのと同じb r4仕事やそれが間接分岐で何がやりたいように聞こえる mflr r4 mr r0, r5 mtlr r4 blr

答えて

3

に私が持っています。これには、カウンタのレジスタとリンクレジスタの2つの機能があります。

リンクレジスタは、従来、関数を呼び出すときにリターンアドレスとして使用されます。あなたは、あなたの質問に話をしている間接分岐の並べ替えをしたい場合、あなたはおそらくしたいと思います

.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 

:あなたはASMで機能を持っているのであれば、たとえば、あなたのような何かをするかもしれませんカウンタレジスタを使用してください。カウンタレジスタはしばしばループのために使用されます(したがって名前)が、間接分岐にも非常に便利です。あなたは、関数内で分岐している場合:

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 

2つの重要な参照できます

  • パワーISA。オンラインで入手できます。登録ポータルを経由する必要がありますが、無料である必要があります。
  • Power ELF ABI v2は不可欠です。スタックフレームを設定する方法、引数が渡されるレジスタ、揮発性/不揮発性のものなど、さまざまな有用な情報が表示されます。 PDF:https://members.openpowerfoundation.org/document/dl/576
関連する問題