gpt4 book ai didi

c - 在 XLC 编译器中使用内联汇编时如何避免标签翻译?

转载 作者:太空宇宙 更新时间:2023-11-03 23:55:05 24 4
gpt4 key购买 nike

当使用带有 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不支持在另一个 asm 语句中分支到标签。

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

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

关于c - 在 XLC 编译器中使用内联汇编时如何避免标签翻译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997649/

24 4 0