2012-01-29 2 views
0

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

Любой может сказать мне, как обойти эту ошибку?

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)); 
} 
+0

, пожалуйста, отправьте исходную строку, на которую он также жалуется. – jcopenha

+0

Входящий код asm исходит из ffmpeg, libavutil/arm/intreadwrite.h. Я добавляю код выше. – ciphor

ответ

0

Try:

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

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