Raspberry Pi 3 使用具有 ARMv8 A53 内核的 Broadcom SoC https://www.raspberrypi.org/magpi/raspberry-pi-3-specs-benchmarks/。它还使用基于 Debian Jessie 的 32 位操作系统。根据 ARM 的ARM NEON 编程快速参考 https://community.arm.com/groups/android-community/blog/2015/03/27/arm-neon-programming-quick-reference#_ednref3,第 3.2 节,指令系统:
ARMv8-A AArch32指令集由A32(ARM指令集,32位定长指令集)和T32(Thumb指令集,16位定长指令集;Thumb2指令集,16位或32位长度指令系统)。它是 ARMv7-A 指令集的超集,因此保留了运行现有软件所需的向后兼容性。 A32 和 T32 进行了一些补充,以保持与 A64 指令集的一致性,包括 NEON 除法和加密扩展指令。还支持 NEON 双精度浮点(IEEE 合规性)。
我不久前在 GCC 邮件列表上问过类似的问题如何在Aarch64上测试Aarch32执行环境? https://gcc.gnu.org/ml/gcc-help/2016-06/msg00097.html但我不太明白答案:
使用arm工具链进行编译后,可以通过以下方式启用CRC扩展-march=armv8-a+crc
或选择一个-mcpu
启用它的选项。要启用加密扩展,您必须指定正确的-mfpu
option.
我的问题很简单...如何为 Raspberry Pi 3 启用 CRC 和加密扩展?
以下是一些不起作用的尝试。
尝试 (4) 与我们在 Aarch64 下本地执行的方式类似:gcc -march=armv8-a+crc+crypto -mtune=cortex-a53
。尝试(5)实际上启用了 CRC,但我似乎无法启用其他任何内容,例如PMULL
, PMULL2
, AES
, SHA1
and SHA2
.
gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
gcc -march=armv8-a -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.9/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 4.9.2-10' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-armhf/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-armhf --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-armhf --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 4.9.2 (Raspbian 4.9.2-10)