2012-01-29 8 views
0

ターゲットをARMプラットフォームとしてGNUアセンブラを使用してアセンブリコードをコンパイルしようとしています。 しかし、いくつかのエラーが表示されます。私はアセンブリ文法に慣れていない。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

+0

インラインasmコードは、ffmpeg、libavutil/arm/intreadwrite.hから取得します。上記のコードを追加します。 – ciphor

答えて

0

試行:

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

コンパイラは、64ビットの量としてvは、レジスタペアを必要とすることを認識すべきです。

関連する問題