Skip to content

Implement SHA512, SM3 and SM4 intrinsics #1790

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

Merged
merged 2 commits into from
May 1, 2025
Merged

Conversation

sayantn
Copy link
Contributor

@sayantn sayantn commented Apr 29, 2025

This PR implements all the SHA512, SM3 and SM4 intrinsics (rust-lang/rust#126624).

This also fixes a issue in stdarch-verify where it was silently not verifying most intrinsics as they were marked safe as part of target_feature_11.

@rustbot
Copy link
Collaborator

rustbot commented Apr 29, 2025

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

@sayantn
Copy link
Contributor Author

sayantn commented Apr 29, 2025

---- verify_all_signatures stdout ----
failed to verify `vdupq_n_p8`
  * mismatched arguments: PrimUnsigned(8) != PrimPoly(8)

@Amanieu this intrinsic should have p8 parameter right? Can we change this?

edit: looking into older docs show that it was always like that, I am changing it since p8 is just an alias for u8

@sayantn sayantn force-pushed the sha512 branch 3 times, most recently from 1c3b492 to bd3613a Compare April 29, 2025 14:34
@Amanieu Amanieu added this pull request to the merge queue May 1, 2025
Merged via the queue into rust-lang:master with commit 6154e40 May 1, 2025
58 checks passed
@sayantn sayantn deleted the sha512 branch May 1, 2025 14:27
tgross35 added a commit to tgross35/rust that referenced this pull request Jun 9, 2025
…cross,tgross35

Stabilize `sha512`, `sm3` and `sm4` for x86

This PR stabilizes the feature flag `sha512_sm_x86` (tracking issue rust-lang#126624).

# Public API
The 3 `x86` target features `sha512`, `sm3` and `sm4`, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 10 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added in LLVM17, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

# Associated PRs
 - rust-lang#126704
 - rust-lang/stdarch#1592
 - rust-lang/stdarch#1790
 - rust-lang#140389 (stdarch submodule update)
 - rust-lang/stdarch#1796 (stabilizing the runtime detection and intrinsics)
 - rust-lang#141964 (stdarch submodule update for the stabilization of the runtime detection and intrinsics)

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc `@rust-lang/lang`
cc `@rust-lang/libs-api` for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc `@Amanieu.` I will send the reference pr soon.
rust-timer added a commit to rust-lang/rust that referenced this pull request Jun 9, 2025
Rollup merge of #140767 - sayantn:stabilize-sha512, r=traviscross,tgross35

Stabilize `sha512`, `sm3` and `sm4` for x86

This PR stabilizes the feature flag `sha512_sm_x86` (tracking issue #126624).

# Public API
The 3 `x86` target features `sha512`, `sm3` and `sm4`, and the associated intrinsics in stdarch.

These target features are very specialized, and are only used to signal the presence of the corresponding CPU instruction. They don't have any nontrivial interaction with the ABI (contrary to something like AVX), and serve the only purpose of enabling 10 stdarch intrinsics, all of which have been implemented and propagated to rustc via a stdarch submodule update.

Also, these were added in LLVM17, and as the minimum LLVM required for rustc is LLVM19, we are safe in that front too!

# Associated PRs
 - #126704
 - rust-lang/stdarch#1592
 - rust-lang/stdarch#1790
 - #140389 (stdarch submodule update)
 - rust-lang/stdarch#1796 (stabilizing the runtime detection and intrinsics)
 - #141964 (stdarch submodule update for the stabilization of the runtime detection and intrinsics)

As all of the required tasks have been done (adding the target features to rustc, implementing their runtime detection in std_detect and implementing the associated intrinsics in core_arch), these target features can be stabilized now.

cc `@rust-lang/lang`
cc `@rust-lang/libs-api` for the intrinsics and runtime detection

I don't think anyone else worked on this feature, so no one else to ping, maybe cc `@Amanieu.` I will send the reference pr soon.
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