Uh oh!
There was an error while loading. Please reload this page.
Add instruction set detection for SVE_AES, SVE_SHA3, SVE_SM4, SHA3, SM4 - #124637
Conversation
Mostly a copy/paste of dotnet#115117
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
There was a problem hiding this comment.
Pull request overview
Adds end-to-end ARM64 instruction set detection and plumbing for SHA3/SM4 and SVE crypto extensions so the runtime/JIT/R2R toolchain can recognize and gate these features consistently across platforms.
Changes:
- Extend
minipal_getcpufeaturesto detect SHA3/SM4 and SVE AES/SHA3/SM4 (Linux hwcaps, Applesysctlbyname, WindowsIsProcessorFeaturePresent). - Add new ARM64 instruction sets (including R2R IDs/implications) and propagate them through CoreCLR instruction-set enums and helpers.
- Gate JIT enablement via new CLRConfig/JitConfig switches and wire feature bits into EE JIT compile flags.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/native/minipal/cpufeatures.h | Adds new ARM64 feature-bit constants for SHA3/SM4 and SVE crypto extensions. |
| src/native/minipal/cpufeatures.c | Detects new ARM64 capabilities via HWCAP/HWCAP2, sysctl, and Windows PF_* flags. |
| src/coreclr/vm/codeman.cpp | Sets CPU compile flags for new instruction sets, gated by CLRConfig switches. |
| src/coreclr/tools/Common/JitInterface/ThunkGenerator/InstructionSetDesc.txt | Registers new ARM64 instruction sets, R2R bits, and ISA implications. |
| src/coreclr/tools/Common/JitInterface/CorInfoInstructionSet.cs | Updates managed instruction-set enums and implication handling for new ARM64 ISAs. |
| src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSetHelper.cs | Maps new ARM64 instruction sets to R2R instruction set IDs. |
| src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSet.cs | Adds new R2R instruction set enum values for ARM64 SHA3/SM4 and SVE crypto. |
| src/coreclr/jit/jitconfigvalues.h | Introduces JIT config toggles for enabling/disabling the new ARM64 ISAs. |
| src/coreclr/jit/hwintrinsicarm64.cpp | Adds name-to-instruction-set and Arm64-variant mapping for new ISAs. |
| src/coreclr/jit/hwintrinsic.cpp | Extends ISA range table to include the new ARM64 instruction sets. |
| src/coreclr/jit/compiler.cpp | Enables new ARM64 instruction sets in “enable available ISAs” flow based on JitConfig. |
| src/coreclr/inc/readytoruninstructionset.h | Adds new R2R instruction set IDs on the native side. |
| src/coreclr/inc/jiteeversionguid.h | Bumps JIT/EE version GUID due to instruction-set enum changes. |
| src/coreclr/inc/corinfoinstructionset.h | Extends CORINFO instruction-set enums/validation/mappings for new ARM64 ISAs. |
| src/coreclr/inc/clrconfigvalues.h | Adds CLRConfig switches to gate the new ARM64 ISAs. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
a74nh
commented
Feb 20, 2026
@dotnet/arm64-contrib |
jkotas
commented
Mar 18, 2026
@dhartglassMSFT is on my team. Do we have approved APIs from these extensions? When is the hardware with the extensions going to be broadly available? I do not see a problem with adding this proactively, but I would rather want to see more energy to be spent on making SVE/SVE2 work great. SVE/SVE2 is much more important than a future HW crypto extensions. The HW crypto extensions are low value for .NET runtime since we depend on OpenSSL exclusively for anything crypto related. |
a74nh
commented
Mar 18, 2026
These are all available on cobalt 100 and 200, so the the idea was to add everything available on the cobalts that hadn't been added to .NET yet Approvals are:
Agreed getting SVE/SVE2 working better is much more important. I was expecting these not to take too long to implement given they are only a few APIs per set - I have a PR ready to push that implements all of SHA3 and SVE SHA3 in one go. If people agree, then I'm happy to drop these - and we'd remove them from #121787 |
dhartglassMSFT
commented
Apr 7, 2026
I talked to Jan offline This change is good to go in, I'll update the branch and requeue check But priority should still be SVE2 light-up |
Head branch was pushed to by a user without write access
a74nh
commented
Apr 10, 2026
@dhartglassMSFT : looks like my commits caused automerge to turn off. Failures seems to be unrelated wasm issues. |
tannergooding
commented
Apr 13, 2026
/ba-g unrelated timeout |
Mostly a copy/paste of #115117