macro_rules! is_aarch64_feature_detected { ("neon") => { ... }; ("pmull") => { ... }; ("fp") => { ... }; ("aes") => { ... }; ("bf16") => { ... }; ("bti") => { ... }; ("crc") => { ... }; ("cssc") => { ... }; ("dit") => { ... }; ("dpb") => { ... }; ("dpb2") => { ... }; ("dotprod") => { ... }; ("ecv") => { ... }; ("f32mm") => { ... }; ("f64mm") => { ... }; ("faminmax") => { ... }; ("fcma") => { ... }; ("fhm") => { ... }; ("flagm") => { ... }; ("flagm2") => { ... }; ("fp16") => { ... }; ("fp8") => { ... }; ("fp8dot2") => { ... }; ("fp8dot4") => { ... }; ("fp8fma") => { ... }; ("fpmr") => { ... }; ("frintts") => { ... }; ("hbc") => { ... }; ("i8mm") => { ... }; ("jsconv") => { ... }; ("lse") => { ... }; ("lse128") => { ... }; ("lse2") => { ... }; ("lut") => { ... }; ("mops") => { ... }; ("mte") => { ... }; ("paca") => { ... }; ("pacg") => { ... }; ("pauth-lr") => { ... }; ("rand") => { ... }; ("rcpc") => { ... }; ("rcpc2") => { ... }; ("rcpc3") => { ... }; ("rdm") => { ... }; ("sb") => { ... }; ("sha2") => { ... }; ("sha3") => { ... }; ("sm4") => { ... }; ("sme") => { ... }; ("sme2") => { ... }; ("sme2p1") => { ... }; ("sme-b16b16") => { ... }; ("sme-f16f16") => { ... }; ("sme-f64f64") => { ... }; ("sme-f8f16") => { ... }; ("sme-f8f32") => { ... }; ("sme-fa64") => { ... }; ("sme-i16i64") => { ... }; ("sme-lutv2") => { ... }; ("ssbs") => { ... }; ("ssve-fp8dot2") => { ... }; ("ssve-fp8dot4") => { ... }; ("ssve-fp8fma") => { ... }; ("sve") => { ... }; ("sve2") => { ... }; ("sve2p1") => { ... }; ("sve2-aes") => { ... }; ("sve-b16b16") => { ... }; ("sve2-bitperm") => { ... }; ("sve2-sha3") => { ... }; ("sve2-sm4") => { ... }; ("tme") => { ... }; ("wfxt") => { ... }; ("asimd") => { ... }; ("ras") => { ... }; ("v8.1a") => { ... }; ("v8.2a") => { ... }; ("v8.3a") => { ... }; ("v8.4a") => { ... }; ("v8.5a") => { ... }; ("v8.6a") => { ... }; ("v8.7a") => { ... }; ("v8.8a") => { ... }; ("v8.9a") => { ... }; ("v9.1a") => { ... }; ("v9.2a") => { ... }; ("v9.3a") => { ... }; ("v9.4a") => { ... }; ("v9.5a") => { ... }; ("v9a") => { ... }; ($t:tt,) => { ... }; ($t:tt) => { ... }; }
Expand description
This macro tests, at runtime, whether an aarch64
feature is enabled on aarch64 platforms.
Currently most features are only supported on linux-based platforms.
This macro takes one argument which is a string literal of the feature being tested for. The feature names are mostly taken from their FEAT_* definitions in the ARM Architecture Reference Manual.
§Supported arguments
"aes"
- FEAT_AES & FEAT_PMULL"asimd"
or “neon” - FEAT_AdvSIMD"bf16"
- FEAT_BF16"bti"
- FEAT_BTI"crc"
- FEAT_CRC"cssc"
- FEAT_CSSC"dit"
- FEAT_DIT"dotprod"
- FEAT_DotProd"dpb"
- FEAT_DPB"dpb2"
- FEAT_DPB2"ecv"
- FEAT_ECV"f32mm"
- FEAT_F32MM"f64mm"
- FEAT_F64MM"faminmax"
- FEAT_FAMINMAX"fcma"
- FEAT_FCMA"fhm"
- FEAT_FHM"flagm"
- FEAT_FLAGM"flagm2"
- FEAT_FLAGM2"fp"
- FEAT_FP"fp16"
- FEAT_FP16"fp8"
- FEAT_FP8"fp8dot2"
- FEAT_FP8DOT2"fp8dot4"
- FEAT_FP8DOT4"fp8fma"
- FEAT_FP8FMA"fpmr"
- FEAT_FPMR"frintts"
- FEAT_FRINTTS"hbc"
- FEAT_HBC"i8mm"
- FEAT_I8MM"jsconv"
- FEAT_JSCVT"lse"
- FEAT_LSE"lse128"
- FEAT_LSE128"lse2"
- FEAT_LSE2"lut"
- FEAT_LUT"mops"
- FEAT_MOPS"mte"
- FEAT_MTE & FEAT_MTE2"paca"
- FEAT_PAuth (address authentication)"pacg"
- FEAT_Pauth (generic authentication)"pauth-lr"
- FEAT_PAuth_LR"pmull"
- FEAT_PMULL"rand"
- FEAT_RNG"rcpc"
- FEAT_LRCPC"rcpc2"
- FEAT_LRCPC2"rcpc3"
- FEAT_LRCPC3"rdm"
- FEAT_RDM"sb"
- FEAT_SB"sha2"
- FEAT_SHA1 & FEAT_SHA256"sha3"
- FEAT_SHA512 & FEAT_SHA3"sm4"
- FEAT_SM3 & FEAT_SM4"sme"
- FEAT_SME"sme-b16b16"
- FEAT_SME_B16B16"sme-f16f16"
- FEAT_SME_F16F16"sme-f64f64"
- FEAT_SME_F64F64"sme-f8f16"
- FEAT_SME_F8F16"sme-f8f32"
- FEAT_SME_F8F32"sme-fa64"
- FEAT_SME_FA64"sme-i16i64"
- FEAT_SME_I16I64"sme-lutv2"
- FEAT_SME_LUTv2"sme2"
- FEAT_SME2"sme2p1"
- FEAT_SME2p1"ssbs"
- FEAT_SSBS & FEAT_SSBS2"ssve-fp8dot2"
- FEAT_SSVE_FP8DOT2"ssve-fp8dot4"
- FEAT_SSVE_FP8DOT4"ssve-fp8fma"
- FEAT_SSVE_FP8FMA"sve"
- FEAT_SVE"sve-b16b16"
- FEAT_SVE_B16B16 (SVE or SME Z-targeting instructions)"sve2"
- FEAT_SVE2"sve2-aes"
- FEAT_SVE_AES & FEAT_SVE_PMULL128 (SVE2 AES crypto)"sve2-bitperm"
- FEAT_SVE2_BitPerm"sve2-sha3"
- FEAT_SVE2_SHA3"sve2-sm4"
- FEAT_SVE2_SM4"sve2p1"
- FEAT_SVE2p1"tme"
- FEAT_TME"wfxt"
- FEAT_WFxT