如何在编译器中启用内在函数?
谁能解释一下:如何在c代码中启用内在函数?
我想在armv5TE中使用特殊的dsp指令
考虑qadd
指令,当我使用汇编程序方法时它很好用,如下所示:
inline int function_qadd(int a, int b) { __asm__ ( "qadd %0, %1, %2" : "=r" (a) : "r" (a), "r" (b)); return a; }
但是当我尝试使用__qadd内在而不是像这样的asm:
int add_result = __qadd(5,10); LOGI("qadd='%d'", add_result);
我收到了错误:
错误:未定义引用’__qadd’
我做错了什么,如何在c代码中启用内在函数?
更新:
我有ndk android-ndk-r8c
(windows版),它默认为GCC 4.6 :
GCC 4.6编译器仍然是默认的,
除了我在android.mk中明确指定
NDK_TOOLCHAIN_VERSION=4.6
我的编译器标志是:
LOCAL_CFLAGS += -std=c99 -ffast-math -march=armv5te -mfpu=vfp -mfloat-abi=softfp
除了我检查由gcc通过-S编译器标志生成的asm代码,它生成qadd指令:
qadd r3, r3, r2
内部函数__qadd不适用于GCC编译器。 您提供的文档的链接适用于(非自由)armcc编译器。
如果您正在使用GCC,则使用汇编程序方法是使用qadd指令的唯一实用方法。