Я пытаюсь научиться писать сборку gcc inline.Ошибка с сборкой gcc inline
Следующий код должен выполнять команду 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
.
Что я делаю неправильно?