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

How to use arm_acle C language extensions in android

android有很多使用 arm neon 内在函数的例子,ndk 甚至有一个例子。我已经让它正常工作了。

Arm 还提供 ACLE(Arm C 语言扩展),但我几乎找不到任何示例。 arm 文档本身只是建议包括 arm_acle.h header 文件,但我仍然会出错。 Google 提供的帮助几乎为零 :) 搜索 arm 社区板也几乎没有结果。

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

当我包含 arm_acle.h 并尝试使用 __ssat() 调用时,我必须进一步定义一个指令 __ARM_FEATURE_CRC32,并且在构建时出现“错误”错误: '__builtin_arm_qadd' 未在此范围内声明

header 没有看到包含任何依赖项,并且文档列表中没有特定的 link 依赖项。

有什么建议吗?

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

附加信息: 我的目标架构是 armv7-a-neon 并且在构建时在 make 文件中被正确检测到。 然后我进一步定义“-mfloat-abi=softfp -mfpu=neon -march=armv7”,但无济于事。 如果我撤消额外的调试定义,我只会得到“错误:#error "ACLE intrinsics support not enabled."(Neon 支持和检测成功) 搜索我的代码库,arm_acle.h header 文件仅存在于 clang host 工具中,而 arm_neon.h 存在于多个预构建工具臂中目录。

正如我所说,arm_neon 工作检测工作正常,并且运行良好,它是 arm_acle 组件不起作用。 搜索像 http://androidxref.com 这样的在线存储库似乎表明只支持 neon?

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 目前提供的 ACLE 的唯一特性是 arm_acle.h 中的 CRC32 内在函数和您已经在 arm_neon.h 中找到的 Neon 内在函数。