更新
将汇编的第二行更改为实际使用的助记符 ( mflr
) 并在底部添加了更多信息。
我遇到了一些类似于以下的代码(使用 gcc)(释义):
#define SOME_MACRO( someVar ) \
do { \
__asm__ ( \
" b 0f\n" \
"0: mflr %0\n" \
: "=r"( someVar ) \
); \
} while(0)
...其中b
指令(ppc)是一个简短的 jmp 并且mflr
正在获取“链接寄存器”的内容——这在某些方面类似于程序计数器。对于英特尔代码,我也看到过这种情况(参见这个问题中接受的答案)。
该分支充当无操作...我的问题:这有什么目的?
我猜它与分支预测有关,但到目前为止,我只发现人们在搜索时使用这个成语的代码。
看起来我在分支预测猜测上错了。 mflr
获取链接寄存器的内容。
所以,我的问题归结为:为什么需要分支。