Skip to content

Improve feature detect for combined aarch64 features #1527

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged

Conversation

adamgemmell
Copy link
Contributor

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.

#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
Copy link
Collaborator

rustbot commented Feb 15, 2024

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
Copy link
Contributor Author

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.

Copy link
Member

@Amanieu Amanieu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM once CI is fixed (when the nightly updates)

GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Feb 15, 2024
…target-features, r=Amanieu

Update aarch64 target feature docs to match LLVM

rust-lang/stdarch#1432 rust-lang/stdarch#1527

r? `@Amanieu`
oli-obk added a commit to oli-obk/rust that referenced this pull request Feb 15, 2024
…target-features, r=Amanieu

Update aarch64 target feature docs to match LLVM

rust-lang/stdarch#1432 rust-lang/stdarch#1527

r? ``@Amanieu``
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Feb 15, 2024
…target-features, r=Amanieu

Update aarch64 target feature docs to match LLVM

rust-lang/stdarch#1432 rust-lang/stdarch#1527

r? ```@Amanieu```
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Feb 16, 2024
Rollup merge of rust-lang#121145 - adamgemmell:dev/adagem01/combined-target-features, r=Amanieu

Update aarch64 target feature docs to match LLVM

rust-lang/stdarch#1432 rust-lang/stdarch#1527

r? ```@Amanieu```
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.
@Amanieu Amanieu force-pushed the dev/adagem01/combined-feature-detect branch from 14a9b30 to cbff686 Compare February 16, 2024 15:58
@Amanieu Amanieu merged commit 1bfe7f2 into rust-lang:master Feb 16, 2024
@adamgemmell adamgemmell deleted the dev/adagem01/combined-feature-detect branch February 19, 2024 09:40
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants