我正在尝试使用Armv8架构优化Arm处理器(Corte-A53)以实现加密目的。
问题是编译器接受-mcpu=cortex-a53+crypto
等但它不会改变输出(我检查了程序集输出)。
更改mfpu,mcpu添加像crypto或simd这样的期货,没关系,它完全被忽略了。
要启用Neon代码-ftree-vectorize,如何使用加密?
(我检查了-O(1,2,3)标志,它没有帮助。)
编辑:我意识到我犯了一个错误,认为crypto标志就像编译器解决的优化标志一样。我的坏。
答案 0 :(得分:2)
你有两个问题......
为什么
-mcpu=cortex-a53+crypto
不会更改代码输出?
加密扩展是ARMv8-A的AArch64状态下的可选功能。 +crypto
功能标志向编译器指示这些指令可用。从实际角度来看,在GCC 4.8 / 4.9 / 5.1中,这定义了宏__ARM_FEATURE_CRYPTO
,并控制是否可以使用ACLE中定义的加密内在函数,例如:
uint8x16_t vaeseq_u8 (uint8x16_t data, uint8x16_t key)
当前GCC中没有优化,它会自动转换一系列C代码以使用加密指令。如果你想进行这种转换,你必须手工完成(并用适当的特征宏来保护它)。
为什么
+fpu
和+simd
标志不会改变代码输出?
对于-mcpu=cortex-a53
,默认情况下会隐含+fp
和+simd
标记(默认情况下也可能隐含某些GCC +crypto
配置)。因此,添加这些功能标志不会改变代码生成。