Ошибка компиляции ассемблера GNU 'недопустимый операнд во встроенном asm' - PullRequest
0 голосов
/ 29 января 2012

Я пытаюсь скомпилировать некоторый ассемблерный код, используя GNU ассемблер, с целью в качестве платформы ARM. Но появляются некоторые ошибки. Я не знаком с грамматикой сборки.

Кто-нибудь может сказать мне, как обойти эту ошибку?

error: invalid operand in inline asm: 'str  ${2:Q}, $0  
str  ${2:R}, $1

Встроенный asm-код, вызвавший эту ошибку компиляции, находится здесь:

static av_always_inline void AV_WN64(void *p, uint64_t v)
{
    __asm__ ("str  %Q2, %0  \n\t"
         "str  %R2, %1  \n\t"
         : "=m"(*(uint32_t*)p), "=m"(*((uint32_t*)p+1))
         : "r"(v));
}

1 Ответ

0 голосов
/ 30 января 2012

Попробуйте:

__asm__ ("strd [%0], %1\n\t" : : "r"(p), "r"(v) : "memory");

Компилятор должен признать, что v как 64-битное количество требует пары регистров.

...