Add instruction set detection for SVE_AES, SVE_SHA3, SVE_SM4, SHA3, SM4#124637
Add instruction set detection for SVE_AES, SVE_SHA3, SVE_SM4, SHA3, SM4#124637a74nh wants to merge 14 commits intodotnet:mainfrom
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. |
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
|
@dotnet/arm64-contrib |
|
The changes to the jit all lgtm |
|
@jkotas - I think we need someone from your area to review this. Could you take a look please. |
|
|
||
| ; The ISA definitions should also be mapped to `hwintrinsicIsaRangeArray` in hwintrinsic.cpp. | ||
| ; NEXT_AVAILABLE_R2R_BIT = 82 | ||
| ; NEXT_AVAILABLE_R2R_BIT = 90 |
| instructionset ,ARM64 ,Sha3 , ,85 ,Sha3 ,sha3 | ||
| instructionset ,ARM64 ,Sm4 , ,86 ,Sm4 ,sm4 | ||
| instructionset ,ARM64 ,SveAes , ,87 ,SveAes ,sve_aes | ||
| instructionset ,ARM64 ,SveSha3 , ,88 ,SveSha3 ,sve_sha3 | ||
| instructionset ,ARM64 ,SveSm4 , ,89 ,SveSm4 ,sve_sm4 |
There was a problem hiding this comment.
Does the copilot feedback needs addressing?
There was a problem hiding this comment.
Does the copilot feedback needs addressing?
Yes, I'll take a look - they are new since I did the request :)
@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. |
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 |
Mostly a copy/paste of #115117