如何在android中使用arm_acle C语言扩展

有许多使用arm neon intrinsics for android的例子,ndk甚至有一个例子。 我已经得到了没有问题的工作。

Arm还提供ACLE(Arm C语言扩展),但我可以通过示例找到几乎没有的东西。 arm文档本身仅建议包含arm_acle.h头文件,但是我仍然会出错。 谷歌几乎没有提供任何援助:)同时,搜索arm社区委员会的结果也很少。

人们不使用acle,而是选择内联汇编吗?

当我参与arm_acle.h并尝试使用__ssat()调用时,我必须进一步定义一个指令__ARM_FEATURE_CRC32,并在构建时得到错误“错误:’__ builtin_arm_qadd’未在此范围内声明”

标头看起来不包含任何依赖项,文档列表没有特定的链接依赖项。

任何建议?

还是我忽略了一些基本的东西?

附加信息:我的目标arch是armv7-a-neon,在构建时在make文件中正确检测到。 然后我进一步定义“-mfloat-abi = softfp -mfpu = neon -march = armv7”,但无济于事。 如果我撤消我的额外调试定义,我只是得到“错误:#error”ACLE内在支持未启用。“(霓虹灯支持和检测成功)搜索我的代码库,arm_acle.h头文件仅用于clang 主机工具,而arm_neon.h存在于几个预编译工具臂目录中。

正如我所说,arm_neon工作检测工作正常,运行正常,这是arm_acle组件不起作用。 搜索http://androidxref.com等在线存储库似乎表明只支持霓虹灯?

目前,GCC(从5.1版开始)不完全支持ARM C语言扩展。 Android NDK通常使用比此更早的GCC版本,它也没有完全支持ACLE。

此页面https://gcc.gnu.org/onlinedocs/gcc/ARM-C-Language-Extensions-_0028ACLE_0029.html对ARM和AArch64目标的当前ACLE实施水平有所了解。 正如您将看到的那样,GCC目前提供的arm_acle.h的唯一function是arm_acle.h中的CRC32内在arm_acle.h和您在arm_neon.h已经找到的Neon Intrinsics。