在XLC编译器中使用内联汇编时如何避免标签转换?

时间:2012-04-03 16:37:40

标签: c assembly xlc

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

谢谢,

1 个答案:

答案 0 :(得分:1)

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

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

    __asm__("mylabel:\n"
            "nop\n"
            "b mylabel");