如何使用 llvm-gcc 内联汇编指定双字操作数的高/低部分?

发布于 2024-12-18 14:12:43 字数 297 浏览 2 评论 0原文

在GCC4.2(Xcode3)中,我使用%R0/%Q0来指定内联汇编中双字操作数的高/低部分。但以下代码在 llvm-gcc (Xcode4) 中生成错误: 错误:内联汇编中的操作数无效:'mov ${0:D}, $1

有人能给我一个解决方案吗?

    long long v1 = 0;
    long v2 = 1;
    __asm__(
        "mov %R0, %1\n\t"
        : "=&r" (v1)
        : "r" (v2)
    );

In GCC4.2(Xcode3), I use %R0/%Q0 to specify the high/low part of double word operand in inline assembly. But the following code generates error in llvm-gcc (Xcode4):
error: invalid operand in inline asm: 'mov ${0:D}, $1

Can someone point me a solution?

    long long v1 = 0;
    long v2 = 1;
    __asm__(
        "mov %R0, %1\n\t"
        : "=&r" (v1)
        : "r" (v2)
    );

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

杯别 2024-12-25 14:12:43

当前版本的 llvm-gcc 或 clang(Apple LLVM 编译器)不支持它。作为解决方法,您可以将 64 位值拆分为两个 32 位变量,然后使用移位等重新组合 64 位值。生成的代码最终应该看起来相同。

It's not supported in the current versions of llvm-gcc or clang (Apple LLVM Compiler). As a workaround, you can split the 64-bit value into two 32-bit variables, and reassemble the 64-bit value with shifts etc. The generated code should end up looking the same.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文