【发布时间】:2016-08-31 05:42:01
【问题描述】:
根据ARM ARM,__ARM_NEON__ 是在 Neon SIMD 指令可用时定义的。我无法让 GCC 提供它。
运行 Debian 8.2 的 BananaPi Pro 开发板上提供了 Neon:
$ cat /proc/cpuinfo | grep neon
Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
我使用的是 GCC 4.9:
$ gcc --version
gcc (Debian 4.9.2-10) 4.9.2
试试 GCC 和 -march=native:
$ g++ -march=native -dM -E - </dev/null | grep -i neon
#define __ARM_NEON_FP 4
好的,试试 Google 在为 Neon 构建时为 Android 使用的东西:
$ g++ -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -dM -E - </dev/null | grep -i neon
#define __ARM_NEON_FP 4
也许是带有硬浮点的 ARMv7-a:
$ g++ -march=armv7-a -mfloat-abi=hard -dM -E - </dev/null | grep -i neon
#define __ARM_NEON_FP 4
我的问题是:
- 为什么我没有看到
__ARM_NEON__? - 如何在预处理器中检测 Neon 的可用性?
也许:
- 我应该使用哪些 GCC 开关来启用 Neon SIMD 指令?
在 LeMaker HiKey 上相关,它是 AARCH64/ARM64,使用 GCC 4.9.2 运行 Linaro,这是预处理器的输出:
$ cpp -dM </dev/null | grep -i neon
#define __ARM_NEON 1
根据 ARM,该板确实具有高级 SIMD 指令,即使:
$ cat /proc/cpuinfo
Processor : AArch64 Processor rev 3 (aarch64)
...
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
【问题讨论】:
-
-mfpu=neon,或者-mfpu=neon-vfpv4。 -
感谢@EOF。我需要仔细检查 Android 构建标志,看看为什么它没有被用于 AOSP 工具链(或者它可能是并且我的笔记不完整/损坏)。
标签: gcc macros arm c-preprocessor neon