如何使用 llvm-gcc 内联汇编指定双字操作数的高/低部分?
在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当前版本的 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.