首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM密码指令与__ARM_FEATURE_CRYPTO宏

ARM密码指令与__ARM_FEATURE_CRYPTO宏
EN

Stack Overflow用户
提问于 2016-05-15 09:33:24
回答 1查看 2.3K关注 0票数 2

我很难确定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 ):

代码语言:javascript
复制
$ cat /proc/cpuinfo 
Processor   : AArch64 Processor rev 3 (aarch64)
processor   : 0
...
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 

并且来自同一个LeMaker HiKey开发板(-march=native不可用):

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
$ 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
EN

回答 1

Stack Overflow用户

发布于 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本质。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37236645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档