Как работает регистр филиала в ppc64le?

Как работает регистр филиала в ppc64le?

У меня есть следующий код в armv8 -br x19или в armv7 - bx r4

Что эквивалентно в ppc64le для этого?

Будет только b r4 работать или мне придется mflr r4 mr r0, r5 mtlr r4 blr

1 ответ

Похоже, что вы хотите сделать, это косвенная ветвь. Для 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 ELF ABI v2 незаменим. Он рассказывает вам все виды полезных вещей, таких как, как настроить стековые фреймы, в какие регистры передаются аргументы, какие из них являются энергозависимыми / энергонезависимыми, и многое другое! PDF на https://members.openpowerfoundation.org/document/dl/576
Другие вопросы по тегам