【发布时间】:2018-12-29 00:33:54
【问题描述】:
aarch64 上的 user 程序是否可以检测 crc32 指令是否可用?我找到了references to kernel support 进行此类检测,这意味着包含有关哪些指令将在用户模式下工作的信息的寄存器在用户模式下不可用(!)。
是这样吗?或者是否有一种可移植的方式来确定 crc32 指令是否可用?
注意:我所说的“用户程序”和“可移植”是一种不需要特权指令或操作系统特定调用或文件(例如 /proc/cpuinfo)的方法。代码本身需要能够检测指令是否可用,如果可用则使用它们,如果不可用则回退到替代方案。例如,英特尔处理器为此目的提供了cpuid 指令。
更新:
翻遍 ARM 架构描述,我发现了一个用户级寄存器PMCR_EL0,它为处理器提供了一个 8 位实现代码和一个 8 位 ID 代码。也许如果我能找到这些代码的列表,我可能会更接近我正在寻找的东西。
更新 2:
但是,当我尝试读取该寄存器时,我得到了一个非法指令异常。那么即使是 EL0 寄存器也需要特权访问?
【问题讨论】:
-
是的,可以在 EL0 访问 PMCR_EL0,但前提是之前通过配置 PMUSERENR_EL0 启用了 EL0 访问。奇怪的是,似乎需要在 EL1 上运行才能这样做,请参阅zhiyisun.github.io/2016/03/02/…。我在 EL0 上试了一下,遇到了非法指令错误。
-
ARM 不会让我在这里休息。
标签: portability arm64 crc32