【发布时间】:2013-01-07 00:20:44
【问题描述】:
谁能解释一下:如何在 c 代码中启用内在函数?
我想在 armv5TE 中使用special dsp instructions
考虑qadd 指令,当我使用汇编程序方法时它可以很好地工作,如下所示:
inline int function_qadd(int a, int b) {
__asm__ (
"qadd %0, %1, %2" : "=r" (a) : "r" (a), "r" (b));
return a;
}
但是当我尝试像这样使用__qadd intrinsic 而不是 asm 时:
int add_result = __qadd(5,10);
LOGI("qadd='%d'", add_result);
我有错误:
错误:未定义对“__qadd”的引用
我做错了什么,如何在 c 代码中启用内在函数?
更新:
我有ndk android-ndk-r8c(windows 版),它have GCC 4.6 as default:
GCC 4.6 编译器仍然是默认的,
除了我在 android.mk 中明确指定
NDK_TOOLCHAIN_VERSION=4.6
我的编译器标志是:
LOCAL_CFLAGS += -std=c99 -ffast-math -march=armv5te -mfpu=vfp -mfloat-abi=softfp
除了我通过 -S 编译器标志检查 gcc 生成的 asm 代码之外,它还生成 qadd 指令:
qadd r3, r3, r2
【问题讨论】:
-
你使用的是哪个编译器?
-
每个编译器都有自己的内在函数规则。可能您需要包含带有特殊声明的标题。
-
嗯,根据infocenter.arm.com/help/topic/com.arm.doc.dui0491h/…,编译器是GCC,函数不需要声明。仔细检查您是否正在为正确的 ISA 进行编译;汇编器可能只是让您为错误的处理器生成指令。
-
土豆,你链接的那个文件是armcc的文件吗?据我所知,GCC 不会将 __qadd 或任何等价物用作内在函数。
-
如何在编译中使用armcc?