如何在编译器中启用内在函数?

谁能解释一下:如何在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指令的唯一实用方法。