1

谁能解释一下:如何在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 

除了我通过 -S 编译器标志检查 gcc 生成的 asm 代码之外,它还生成 qadd 指令:

qadd r3, r3, r2
4

1 回答 1

2

内在函数 __qadd 不适用于 GCC 编译器。您提供的文档链接适用于(非免费)armcc 编译器。

如果您使用 GCC,则使用汇编程序方法是使用 qadd 指令的唯一实用方法。

于 2013-01-08T03:44:02.810 回答