【问题标题】:gcc inline assembler implicit function declaration on Powerpc archPowerpc 架构上的 gcc 内联汇编程序隐式函数声明
【发布时间】:2013-09-05 15:56:57
【问题描述】:

我正在尝试编译多次调用以下 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

【问题讨论】:

  • 在编译 mul.c 时,您没有使用任何 gcc 的不允许扩展的标志(例如 -ansi-std=c99),是吗?
  • 我正在使用 -std=c99 这是否不允许扩展?

标签: c gcc freebsd inline-assembly powerpc


【解决方案1】:

根据 C 标准(附录 J.5.10),asm 是公共语言扩展。在gcc 中,如果您使用-std=c90-std=c99-ansi 之类的标志,则不允许(连同所有gcc 扩展)。如果您想要带有 gcc 扩展名的 C99,请改用 -std=gnu99

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2012-02-20
    • 2020-07-28
    • 2013-09-14
    • 2011-03-08
    相关资源
    最近更新 更多