【发布时间】:2014-10-12 20:11:18
【问题描述】:
我正在尝试学习如何编写 gcc 内联汇编。
下面的代码应该执行shl指令并返回结果。
#include <stdio.h>
#include <inttypes.h>
uint64_t rotate(uint64_t x, int b)
{
int left = x;
__asm__ ("shl %1, %0"
:"=r"(left)
:"i"(b), "0"(left));
return left;
}
int main()
{
uint64_t a = 1000000000;
uint64_t res = rotate(a, 10);
printf("%llu\n", res);
return 0;
}
编译失败,error: impossible constraint in asm
问题基本上出在"i"(b)。我已经尝试过"o"、"n"、"m" 等,但它仍然不起作用。要么是这个错误,要么是operand size mismatch。
我做错了什么?
【问题讨论】: