Raspberry Pi 3 uses a Broadcom SoC with and ARMv8 A53 core。它还使用基于Debian Jessie的32位操作系统。根据ARM的ARM NEON programming quick reference,第3.2节,指令集:
ARMv8-A AArch32指令集由A32(ARM指令集,32位固定长度指令集)和T32(Thumb指令集,16位固定长度指令集; Thumb2指令集,16或32)组成比特长度指令集)。它是ARMv7-A指令集的超集,因此它保留了运行现有软件所需的向后兼容性。 A32和T32还增加了一些内容,以保持与A64指令集的对齐,包括NEON划分和加密扩展指令。还支持NEON双精度浮点(符合IEEE标准)。
我在How to test Aarch32 execution environment on Aarch64?的GCC邮件列表上回答了一个类似的问题,但我不太明白答案:
使用arm工具链进行编译后,可以通过
-march=armv8-a+crc
启用CRC扩展,或选择启用它的-mcpu
选项。要启用加密扩展程序,您必须指定正确的-mfpu
选项。
我的问题很简单......如何为Raspberry Pi 3启用CRC和加密扩展?
以下是一些不起作用的尝试。
尝试(4)类似于我们在Aarch64下本地执行的操作:gcc -march=armv8-a+crc+crypto -mtune=cortex-a53
。尝试(5)实际上启用了CRC,但我似乎无法启用任何其他功能,例如PMULL
,PMULL2
,AES
,SHA1
和{{1 }}
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