如何在ARMv8-a上启用Aarch32指令集?

时间:2016-07-28 08:48:37

标签: gcc assembly arm intrinsics

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,但我似乎无法启用任何其他功能,例如PMULLPMULL2AESSHA1和{{1 }}

  1. SHA2
  2. gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  3. gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  4. gcc -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC -march=armv8-a -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  5. gcc -march=armv8-a+crc+crypto -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  6. gcc -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe
  7. gcc -march=armv8-a -mcpu=cortex-a53 -mfpu=neon test.cc -o test.exe

1 个答案:

答案 0 :(得分:4)

很简单,"正确的-mfpu选项"应该是-mfpu=crypto-neon-fp-armv8