【问题标题】:gcc; Aarch64; Armv8; enable crypto; -mcpu=cortex-a53+crypto海合会; Aarch64; ARMv8;启用加密; -mcpu=cortex-a53+加密
【发布时间】:2015-04-28 07:18:39
【问题描述】:

我正在尝试优化具有 Armv8 架构的 Arm 处理器 (Corte-A53) 以用于加密目的。

问题是编译器接受-mcpu=cortex-a53+crypto 等并不会改变输出(我检查了程序集输出)。

改变mfpu,mcpu添加像crypto或者simd这样的future,没关系,完全忽略。

要启用 Neon 代码 -ftree-vectorize 是必需的,如何使用加密?

(我检查了 -O(1,2,3) 标志,它没有帮助)。

编辑:我意识到我犯了一个错误,认为加密标志像编译器解决的优化标志一样工作。我的错。

【问题讨论】:

  • 你为什么期望编译器发出加密指令?编译器标志可能只是用于检查可选行为。
  • 你正在编译的代码是什么?除非你真的在建造,例如一个包含一些使用加密指令的程序集的加密库,仅仅启用它们本身不太可能做很多事情。我不相信 GCC 足够聪明地说“嘿,这个随机的 C 代码看起来像一个 SHA-1 实现,让我们对其进行优化!”完全靠自己......
  • 代码使用 c 实现的 AES 指令,我预计(希望)编译器会用它做任何事情,比如优化标志。我还没有找到关于它的有用文档(或实现)。你以为国旗只是一张支票?所以所有的代码都应该写成内联汇编?
  • 是的,我正在使用加密库,但它全部由 c 实现。
  • 不同之处在于,如果您的代码确实包含加密指令,除非您启用该功能,否则您会从汇编程序中收到错误。

标签: gcc cryptography arm64


【解决方案1】:

你有两个问题...

为什么-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 也可能默认隐含)。因此,添加这些功能标志不会改变代码生成。

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2017-09-24
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多