diff options
Diffstat (limited to 'library/stdarch/crates/std_detect')
4 files changed, 24 insertions, 1 deletions
diff --git a/library/stdarch/crates/std_detect/src/detect/arch/x86.rs b/library/stdarch/crates/std_detect/src/detect/arch/x86.rs index f4c2129156c..8867c59b119 100644 --- a/library/stdarch/crates/std_detect/src/detect/arch/x86.rs +++ b/library/stdarch/crates/std_detect/src/detect/arch/x86.rs @@ -57,6 +57,9 @@ features! { /// * `"sha"` /// * `"avx"` /// * `"avx2"` + /// * `"sha512"` + /// * `"sm3"` + /// * `"sm4"` /// * `"avx512f"` /// * `"avx512cd"` /// * `"avx512er"` @@ -138,6 +141,12 @@ features! { /// AVX (Advanced Vector Extensions) @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx2: "avx2"; /// AVX2 (Advanced Vector Extensions 2) + @FEATURE: #[unstable(feature = "sha512_sm_x86", issue = "126624")] sha512: "sha512"; + /// SHA512 + @FEATURE: #[unstable(feature = "sha512_sm_x86", issue = "126624")] sm3: "sm3"; + /// SM3 + @FEATURE: #[unstable(feature = "sha512_sm_x86", issue = "126624")] sm4: "sm4"; + /// SM4 @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512f: "avx512f" ; /// AVX-512 F (Foundation) @FEATURE: #[stable(feature = "simd_x86", since = "1.27.0")] avx512cd: "avx512cd" ; diff --git a/library/stdarch/crates/std_detect/src/detect/os/x86.rs b/library/stdarch/crates/std_detect/src/detect/os/x86.rs index f8811e8cf13..c0d86d4b3a6 100644 --- a/library/stdarch/crates/std_detect/src/detect/os/x86.rs +++ b/library/stdarch/crates/std_detect/src/detect/os/x86.rs @@ -217,6 +217,10 @@ pub(crate) fn detect_features() -> cache::Initializer { enable(extended_features_edx_leaf_1, 5, Feature::avxneconvert); enable(extended_features_edx_leaf_1, 10, Feature::avxvnniint16); + enable(extended_features_eax_leaf_1, 0, Feature::sha512); + enable(extended_features_eax_leaf_1, 1, Feature::sm3); + enable(extended_features_eax_leaf_1, 2, Feature::sm4); + // For AVX-512 the OS also needs to support saving/restoring // the extended state, only then we enable AVX-512 support: if os_avx512_support { diff --git a/library/stdarch/crates/std_detect/tests/cpu-detection.rs b/library/stdarch/crates/std_detect/tests/cpu-detection.rs index fcad846fbd9..6cf74a67218 100644 --- a/library/stdarch/crates/std_detect/tests/cpu-detection.rs +++ b/library/stdarch/crates/std_detect/tests/cpu-detection.rs @@ -3,6 +3,10 @@ #![cfg_attr(target_arch = "arm", feature(stdarch_arm_feature_detection))] #![cfg_attr(target_arch = "powerpc", feature(stdarch_powerpc_feature_detection))] #![cfg_attr(target_arch = "powerpc64", feature(stdarch_powerpc_feature_detection))] +#![cfg_attr( + any(target_arch = "x86", target_arch = "x86_64"), + feature(sha512_sm_x86) +)] #![allow(clippy::unwrap_used, clippy::use_debug, clippy::print_stdout)] #[cfg_attr( @@ -210,6 +214,9 @@ fn x86_all() { println!("sha: {:?}", is_x86_feature_detected!("sha")); println!("avx: {:?}", is_x86_feature_detected!("avx")); println!("avx2: {:?}", is_x86_feature_detected!("avx2")); + println!("sha512: {:?}", is_x86_feature_detected!("sha512")); + println!("sm3: {:?}", is_x86_feature_detected!("sm3")); + println!("sm4: {:?}", is_x86_feature_detected!("sm4")); println!("avx512f: {:?}", is_x86_feature_detected!("avx512f")); println!("avx512cd: {:?}", is_x86_feature_detected!("avx512cd")); println!("avx512er: {:?}", is_x86_feature_detected!("avx512er")); diff --git a/library/stdarch/crates/std_detect/tests/x86-specific.rs b/library/stdarch/crates/std_detect/tests/x86-specific.rs index d2b2675716d..74326f4a5a1 100644 --- a/library/stdarch/crates/std_detect/tests/x86-specific.rs +++ b/library/stdarch/crates/std_detect/tests/x86-specific.rs @@ -1,6 +1,6 @@ #![cfg(any(target_arch = "x86", target_arch = "x86_64"))] #![allow(internal_features)] -#![feature(stdarch_internal, avx512_target_feature)] +#![feature(stdarch_internal, avx512_target_feature, sha512_sm_x86)] extern crate cupid; #[macro_use] @@ -24,6 +24,9 @@ fn dump() { println!("f16c: {:?}", is_x86_feature_detected!("f16c")); println!("avx: {:?}", is_x86_feature_detected!("avx")); println!("avx2: {:?}", is_x86_feature_detected!("avx2")); + println!("sha512: {:?}", is_x86_feature_detected!("sha512")); + println!("sm3: {:?}", is_x86_feature_detected!("sm3")); + println!("sm4: {:?}", is_x86_feature_detected!("sm4")); println!("avx512f {:?}", is_x86_feature_detected!("avx512f")); println!("avx512cd {:?}", is_x86_feature_detected!("avx512cd")); println!("avx512er {:?}", is_x86_feature_detected!("avx512er")); |
