Как работает регистр филиала в 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