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;
}

しかし、私が次のようにasmの代わりに__qadd組み込みを使用しようとしたとき:

int add_result = __qadd(5,10);
LOGI("qadd='%d'", add_result);

エラーが発生しました:

エラー:「__qadd」への未定義の参照

私が間違っていること、cコードで組み込み関数を有効にする方法は?

アップデート:

私はndk android-ndk-r8c(Windowsバージョン)を持っています、それはデフォルトとしてGCC 4.6を持っています

GCC4.6コンパイラは引き続きデフォルトです。

それに加えて、android.mkで明示的に指定します

NDK_TOOLCHAIN_VERSION=4.6

私のコンパイラフラグは次のとおりです。

LOCAL_CFLAGS += -std=c99 -ffast-math -march=armv5te -mfpu=vfp -mfloat-abi=softfp 

gcc throught -Sコンパイラフラグによって生成されたasmコードをチェックすることに加えて、qadd命令を生成します。

qadd r3, r3, r2
4

1 に答える 1

2

組み込み関数 __qadd は、GCC コンパイラーでは使用できません。あなたが提供したドキュメントへのリンクは、(非フリーの) armcc コンパイラ用です。

GCC を使用している場合、qadd 命令を使用する唯一の実用的な方法は、アセンブラー アプローチを使用することです。

于 2013-01-08T03:44:02.810 に答える