Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Improve feature detect for combined aarch64 features #1527

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
27 checks passed
@adamgemmell adamgemmell deleted the dev/adagem01/combined-feature-detect branch February 19, 2024 09:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants