Powerpc arch上的gcc内联汇编程序隐式函数声明

时间:2013-09-02 13:55:27

标签: c gcc freebsd inline-assembly powerpc

我正在尝试编译多次调用以下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(32位),操作系统是freeBSD 9.2

1 个答案:

答案 0 :(得分:15)

根据C标准(附录J.5.10),asm是一种常见的语言扩展。在gcc中,如果您使用gcc-std=c90-std=c99等标记,则不允许(与所有-ansi个扩展名一起使用)。如果您希望C99具有gcc个扩展名,请改用-std=gnu99