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

标签 c gcc freebsd inline-assembly powerpc

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

#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,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/

相关文章:

gcc - 禁止将警告视为错误 (cc1.exe)

logging - 如何使用 newsyslog 将日期添加到日志文件名中?

c - Makefile 说明 : files that includes headers which includes another header

C++ lambda : Access static method in lambda leads to error 'this was not captured for this lambda function'

在非 IEEE 浮点实现中更改尾数的宽度

Python Fabric 2.4 没有环境变量

shared-libraries - 为什么 libtool 的 "current"在 BSD 上用作 "SOVERSION"而不是 "major"?

c++ - gdb 重新设置断点时出错(无法访问内存)

C - mystrtok() 函数有什么问题?

c++ - 保存结果时按分隔符拆分 char 数组?