2012-01-29 3 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이 레지스터 쌍을 필요로한다는 인식해야한다.

관련 문제