rust-lang / stdarch

Rust's standard library vendor-specific APIs and run-time feature detection
https://doc.rust-lang.org/stable/core/arch/
Apache License 2.0
601 stars 267 forks source link

Improve feature detect for combined aarch64 features #1527

Closed adamgemmell closed 7 months ago

adamgemmell commented 7 months ago

LLVM's ssbs and mte target_features represent two Arm features. Linux's HWCAP also represents the same two features, so this is just a documentation update.

LLVM's ras target_feature represents two Arm features - FEAT_RAS and FEAT_RASv1p1. There is no runtime detection for this, so this is a no-op in stdarch.

LLVM's aes feature covers both FEAT_AES and FEAT_PMULL, but Linux exposes seperate feature bits. This patch makes the aes target_feature correctly shortcut runtime pmull detection and also makes the aes feature check for pmull at runtime to bring it in line with the target_feature behaviour. In practice I think this makes the two runtime features identical since the ID_AA64ISAR0_EL1 register does not allow for PMULL without AES. I haven't added a pmull target_feature because it would behave identically to the aes one, but I could do if you see fit.

https://github.com/rust-lang/stdarch/issues/1432

For reference: Linux HWCAPs are documented here: https://www.kernel.org/doc/html/latest/arch/arm64/elf_hwcaps.html They reference the ID registers documented here: https://developer.arm.com/documentation/ddi0595/2021-12/AArch64-Registers LLVM target features are defined here: https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/AArch64/AArch64.td

rustbot commented 7 months ago

r? @Amanieu

rustbot has assigned @Amanieu. They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

adamgemmell commented 7 months ago

I've bisected the CI failure down to the LLVM 18 upgrade - I'll be able to look into it next week if no-one gets there first.