将内联程序集与XLC编译器(用于powerpc)一起使用时,标签会被转换,因此不可能知道跳转的最终标签名称例子:
int main()
{
__asm__("mylabel:");
__asm__("nop");
__asm__("b mylabel");
}
如果我使用GCC编译前面的代码,一切都按预期工作但是,使用XLC时,生成的程序集如下:
...
.L1
nop
b mylabel
...
显然,程序无法编译,因为从未定义“mylabel”“mylabel”的定义自动转换为“.L1”名称实际上,这个名称取决于定义的本地标签的数量所以,它可以是“.L1”、“.L2”。。。
我试着用asm,asm代替asm,但是我得到了相同的输出禁用编译器优化也不起作用有人知道在XLC中生成程序集时如何保留本地标签名吗其他的工作也会有帮助。
谢谢您,
最佳答案
This表示Branching to a label in another asm statement is not supported.
尝试将所有内联程序集代码放入单个__asm__
语句中,如下所示:
__asm__("mylabel:\n"
"nop\n"
"b mylabel");
关于c - 在XLC编译器中使用内联汇编时,如何避免标签转换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9997649/