std_detect: Support detecting more features on AArch64 Windows
This commit is contained in:
parent
a9135c1634
commit
1c136ddc5a
1 changed files with 49 additions and 1 deletions
|
|
@ -19,9 +19,23 @@ pub(crate) fn detect_features() -> cache::Initializer {
|
|||
const PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE: u32 = 43;
|
||||
const PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE: u32 = 44;
|
||||
const PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE: u32 = 45;
|
||||
const PF_ARM_SVE_INSTRUCTIONS_AVAILABLE: u32 = 46;
|
||||
const PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE: u32 = 47;
|
||||
const PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE: u32 = 48;
|
||||
const PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE: u32 = 49;
|
||||
const PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE: u32 = 50;
|
||||
const PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE: u32 = 51;
|
||||
// const PF_ARM_SVE_BF16_INSTRUCTIONS_AVAILABLE: u32 = 52;
|
||||
// const PF_ARM_SVE_EBF16_INSTRUCTIONS_AVAILABLE: u32 = 53;
|
||||
const PF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE: u32 = 54;
|
||||
const PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE: u32 = 55;
|
||||
const PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE: u32 = 56;
|
||||
// const PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE: u32 = 57;
|
||||
// const PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE: u32 = 58;
|
||||
// const PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE: u32 = 59;
|
||||
|
||||
unsafe extern "system" {
|
||||
pub fn IsProcessorFeaturePresent(ProcessorFeature: DWORD) -> BOOL;
|
||||
fn IsProcessorFeaturePresent(ProcessorFeature: DWORD) -> BOOL;
|
||||
}
|
||||
|
||||
let mut value = cache::Initializer::default();
|
||||
|
|
@ -64,6 +78,40 @@ pub(crate) fn detect_features() -> cache::Initializer {
|
|||
Feature::rcpc,
|
||||
IsProcessorFeaturePresent(PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve2,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve2p1,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve2_aes,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE) != FALSE
|
||||
&& IsProcessorFeaturePresent(PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE)
|
||||
!= FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve2_bitperm,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve_b16b16,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve2_sha3,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
enable_feature(
|
||||
Feature::sve2_sm4,
|
||||
IsProcessorFeaturePresent(PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE) != FALSE,
|
||||
);
|
||||
// PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE means aes, sha1, sha2 and
|
||||
// pmull support
|
||||
let crypto =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue