我正在尝试编译多次调用以下宏的代码:
#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,我都会得到 p>
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,arch 是标记为 powerpc(32 位),操作系统是 freeBSD 9.2
最佳答案
根据C标准(附录J.5.10),asm
是一种通用语言扩展。在 gcc
中,它是不允许的(连同所有 gcc
扩展),如果你使用像 -std=c90
, -std 这样的标志=c99
或 -ansi
。如果您想要使用 gcc
扩展的 C99,请改用 -std=gnu99
。
关于c - Powerpc arch 上的 gcc 内联汇编程序隐式函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18574943/