2013-09-02 1 views
3

:GCC 인라인 어셈블러 암시 적 함수 선언 나는 여러 번에게 다음과 같은 매크로 호출 코드를 컴파일하기 위해 노력하고있어

#define MULADD(i, j) \ 
    asm(\ 
    " mullw 16,%6,%7  \n\t" \ 
    " addc %0,%0,16  \n\t" \ 
    " mulhwu 16,%6,%7  \n\t" \ 
    " adde %1,%1,16  \n\t" \ 
    " addze %2,%2   \n\t" \ 
    :"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"16"); 

적 MULAD 내가

error: expected ')' before ':' token

를 얻을라고 오류 알림.

그리고 오류 코드는 다음과 같습니다

../../src/math/mul.c: In function 'mul_comba': 
../../src/math/mul.c:787: warning: implicit declaration of function 'asm' 
../../src/math/mul.c:787: error: expected ')' before ':' token 
../../src/math/mul.c: In function 'mul_comba_small': 
../../src/math/mul.c:816: error: expected ')' before ':' token 

내가 잘못 뭘하는지 아무 생각이 없다, 그리고 암시 적 선언은 무엇을 의미합니까? 내가 아는 한 asm()은 컴파일러가 예약되어 있으므로 선언해야하는 함수가 아닌가? 그렇다면 무엇을 포함시켜야합니까? 나는 정말로 지식이 부족합니다.

편집 : 나는 GCC 4.2.1를 사용하고 asm가 일반적이다, 아치는 태그의 PowerPC (32 비트)을하고 OS는 C 표준 (부록 J.5.10)에 따르면, FreeBSD의

+2

'mul.c '를 컴파일 할 때 확장자를 허용하지 않는'gcc' 플래그를 사용하지 않습니다 (예 :'-ansi' 또는'-std = c99')? – nickie

+1

-std = c99를 사용하면 확장 기능을 사용할 수 없습니까? – dhein

답변

10

9.2입니다 언어 확장. gcc에서 -std=c90, -std=c99 또는 -ansi과 같은 플래그를 사용하면 허용되지 않습니다 (모든 gcc 확장자와 함께). gcc 개의 확장자가있는 C99를 사용하려면 -std=gnu99을 대신 사용하십시오.

+0

이 문제를 해결했습니다. – dhein

관련 문제