7

我正在尝试编译多次调用以下 makro 的代码:

#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 我得到了

错误:预期 ')' 在 ':' 标记之前

错误通知。

错误代码如下所示:

../../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 (32Bit),操作系统是 freeBSD 9.2

4

1 回答 1

18

根据 C 标准(附录 J.5.10),asm是一种通用语言扩展。如果您gcc使用gcc类似-std=c90,-std=c99-ansi. 如果您想要带有gcc扩展名的 C99,请-std=gnu99改用。

于 2013-09-02T18:21:38.990 回答