2

当使用带有 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 中生成程序集时如何保留本地标签名称吗?任何其他解决方法也将有所帮助。

谢谢,

4

1 回答 1

1

Branching to a label in another asm statement is not supported.

尝试将所有内联汇编代码放入一个__asm__语句中,例如:

    __asm__("mylabel:\n"
            "nop\n"
            "b mylabel");
于 2012-04-05T06:50:35.477 回答