2012-01-29 214 views
0

我想使用GNU彙編程序編譯一些彙編代碼,目標爲ARM平臺。 但出現一些錯誤。我不熟悉彙編語法。GNU彙編程序編譯錯誤'inline asm中的無效操作數'

任何人都可以告訴我如何解決這個錯誤?

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

造成這種編譯錯誤的內聯彙編代碼是在這裏:

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 2012-01-29 14:17:38

+0

內聯asm代碼來自ffmpeg,libavutil/arm/intreadwrite.h。我添加上面的代碼。 – ciphor 2012-01-29 15:24:48

回答

0

嘗試:

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

編譯器應該認識到,作爲v數量64位需要一個寄存器對。