我很难确定ARM 64跨平台(Linux、Apple、Windows Phone和Windows Store)和工具链(ARMCC、GCC、Clang、MSVC)的特性。根据ARM在编译器工具链 for __ARM_FEATURE_CRYPTO的文档
如果目标有密码指令,则设置为1。
返回跟踪更远一点,并根据ARM C语言扩展2.0 (ACLE)
6.5.7如果支持密码指令并提供12.3.14中定义的本质,则将密码扩展__ARM_FEATURE_CRYPTO定义为1。这些指令包括AES{E,D},SHA1{C,P,M}等。只有在__ARM_ARCH>= 8时才可用。
和:
2.3.14 Crypto Intrinsics密码扩展指令是高级SIMD指令集的一部分。当定义__ARM_FEATURE_CRYPTO时,这些内在属性是可用的。
如果您注意到,第6.5.7节将改为2.3.14,第2.3.14节将返回,而第2.3.14节将返回至6.5.7。
哪些指令将触发定义?当指令出现时,有哪些内部结构可用?
来自64位ARMv8 8的LeMaker HiKey (asimd是伪装的neon ):
$ cat /proc/cpuinfo
Processor : AArch64 Processor rev 3 (aarch64)
processor : 0
...
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 并且来自同一个LeMaker HiKey开发板(-march=native不可用):
$ gcc -dM -E -march=armv8-a -mcpu=cortex-a53 - < /dev/null | egrep -i '(arm|aarch|neon|crc|crypto)'
#define __AARCH64_CMODEL_SMALL__ 1
#define __aarch64__ 1
#define __AARCH64EL__ 1
#define __ARM_NEON 1来自苹果的工具链和-arch arm64
$ clang++ -arch arm64 -dM -E - < /dev/null | sort | egrep -i '(arm|aarch|neon|crc)'
#define __AARCH64EL__ 1
#define __AARCH64_SIMD__ 1
#define __ARM64_ARCH_8__ 1
#define __ARM_64BIT_STATE 1
#define __ARM_ACLE 200
#define __ARM_ALIGN_MAX_STACK_PWR 4
#define __ARM_ARCH 8
#define __ARM_ARCH_ISA_A64 1
#define __ARM_ARCH_PROFILE 'A'
#define __ARM_FEATURE_CLZ 1
#define __ARM_FEATURE_CRYPTO 1
#define __ARM_FEATURE_DIV 1
#define __ARM_FEATURE_FMA 1
#define __ARM_FEATURE_UNALIGNED 1
#define __ARM_FP 0xe
#define __ARM_FP16_FORMAT_IEEE 1
#define __ARM_FP_FENV_ROUNDING 1
#define __ARM_NEON 1
#define __ARM_NEON_FP 7
#define __ARM_NEON__ 1
#define __ARM_PCS_AAPCS64 1
#define __ARM_SIZEOF_MINIMAL_ENUM 4
#define __ARM_SIZEOF_WCHAR_T 4
#define __aarch64__ 1
#define __arm64 1
#define __arm64__ 1发布于 2016-05-15 10:27:31
作为一个可选的扩展,通常由您来告诉编译器您的目标是否实现了密码指令。对于GCC或普通Clang来说,这意味着将特征修饰符添加到-march或-mcpu设置中。
看起来苹果的Clang版本无条件地启用了它,但目标是隐含的"Apples's CPU“,我怀疑它们会制造非加密版本,因为它们根本没有授权它们的CPU设计,更不用说出口了。至于Windows,虽然ARMv8也向AArch32添加了密码指令,但VS2015 ARM编译器似乎仍然只支持ARMv7,所以我认为这完全没有意义。
请注意,GCC除了将其传递给汇编程序之外,并没有对密码特性做太多的工作,因为它不能正确地支持ACLE。我尝试了Arch打包的Clang4.8,如果给出了arm_acle.h,它会很高兴地从-march=armv8-a+crypto编译标准AES本质。
https://stackoverflow.com/questions/37236645
复制相似问题