@@ -37,31 +37,34 @@ pub(crate) fn detect_features() -> cache::Initializer {
3737 // Armv8.0 features not using the standard identifiers
3838 let fp = _sysctlbyname ( c"hw.optional.floatingpoint" ) ;
3939 let asimd = _sysctlbyname ( c"hw.optional.AdvSIMD" ) ;
40- let crc = _sysctlbyname ( c"hw.optional.armv8_crc32" ) ;
40+ let crc_old = _sysctlbyname ( c"hw.optional.armv8_crc32" ) ;
4141
4242 // Armv8 and Armv9 features using the standard identifiers
4343 let aes = _sysctlbyname ( c"hw.optional.arm.FEAT_AES" ) ;
4444 let bf16 = _sysctlbyname ( c"hw.optional.arm.FEAT_BF16" ) ;
4545 let bti = _sysctlbyname ( c"hw.optional.arm.FEAT_BTI" ) ;
46+ let crc = _sysctlbyname ( c"hw.optional.arm.FEAT_CRC32" ) ;
4647 let cssc = _sysctlbyname ( c"hw.optional.arm.FEAT_CSSC" ) ;
4748 let dit = _sysctlbyname ( c"hw.optional.arm.FEAT_DIT" ) ;
49+ let dotprod = _sysctlbyname ( c"hw.optional.arm.FEAT_DotProd" ) ;
4850 let dpb = _sysctlbyname ( c"hw.optional.arm.FEAT_DPB" ) ;
4951 let dpb2 = _sysctlbyname ( c"hw.optional.arm.FEAT_DPB2" ) ;
50- let dotprod = _sysctlbyname ( c"hw.optional.arm.FEAT_DotProd" ) ;
5152 let ecv = _sysctlbyname ( c"hw.optional.arm.FEAT_ECV" ) ;
5253 let fcma = _sysctlbyname ( c"hw.optional.arm.FEAT_FCMA" ) ;
5354 let fhm = _sysctlbyname ( c"hw.optional.arm.FEAT_FHM" ) ;
54- let fp16 = _sysctlbyname ( c"hw.optional.arm.FEAT_FP16" ) ;
55- let frintts = _sysctlbyname ( c"hw.optional.arm.FEAT_FRINTTS" ) ;
5655 let flagm = _sysctlbyname ( c"hw.optional.arm.FEAT_FlagM" ) ;
5756 let flagm2 = _sysctlbyname ( c"hw.optional.arm.FEAT_FlagM2" ) ;
57+ let fp16 = _sysctlbyname ( c"hw.optional.arm.FEAT_FP16" ) ;
58+ let frintts = _sysctlbyname ( c"hw.optional.arm.FEAT_FRINTTS" ) ;
5859 let hbc = _sysctlbyname ( c"hw.optional.arm.FEAT_HBC" ) ;
5960 let i8mm = _sysctlbyname ( c"hw.optional.arm.FEAT_I8MM" ) ;
6061 let jsconv = _sysctlbyname ( c"hw.optional.arm.FEAT_JSCVT" ) ;
6162 let rcpc = _sysctlbyname ( c"hw.optional.arm.FEAT_LRCPC" ) ;
6263 let rcpc2 = _sysctlbyname ( c"hw.optional.arm.FEAT_LRCPC2" ) ;
6364 let lse = _sysctlbyname ( c"hw.optional.arm.FEAT_LSE" ) ;
6465 let lse2 = _sysctlbyname ( c"hw.optional.arm.FEAT_LSE2" ) ;
66+ let mte = _sysctlbyname ( c"hw.optional.arm.FEAT_MTE" ) ;
67+ let mte2 = _sysctlbyname ( c"hw.optional.arm.FEAT_MTE2" ) ;
6568 let pauth = _sysctlbyname ( c"hw.optional.arm.FEAT_PAuth" ) ;
6669 let pmull = _sysctlbyname ( c"hw.optional.arm.FEAT_PMULL" ) ;
6770 let rdm = _sysctlbyname ( c"hw.optional.arm.FEAT_RDM" ) ;
@@ -72,6 +75,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
7275 let sha512 = _sysctlbyname ( c"hw.optional.arm.FEAT_SHA512" ) ;
7376 let sme = _sysctlbyname ( c"hw.optional.arm.FEAT_SME" ) ;
7477 let sme2 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME2" ) ;
78+ let sme2p1 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME2p1" ) ;
7579 let sme_f64f64 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME_F64F64" ) ;
7680 let sme_i16i64 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME_I16I64" ) ;
7781 let ssbs = _sysctlbyname ( c"hw.optional.arm.FEAT_SSBS" ) ;
@@ -87,6 +91,12 @@ pub(crate) fn detect_features() -> cache::Initializer {
8791 let ebf16 = _sysctlbyname(c"hw.optional.arm.FEAT_EBF16");
8892 let fpac = _sysctlbyname(c"hw.optional.arm.FEAT_FPAC");
8993 let fpaccombine = _sysctlbyname(c"hw.optional.arm.FEAT_FPACCOMBINE");
94+ let mte_async = _sysctlbyname(c"hw.optional.arm.FEAT_MTE_ASYNC");
95+ let mte_canonical_tags = _sysctlbyname(c"hw.optional.arm.FEAT_MTE_CANONICAL_TAGS");
96+ let mte_no_address_tags = _sysctlbyname(c"hw.optional.arm.FEAT_MTE_NO_ADDRESS_TAGS");
97+ let mte_store_only = _sysctlbyname(c"hw.optional.arm.FEAT_MTE_STORE_ONLY");
98+ let mte3 = _sysctlbyname(c"hw.optional.arm.FEAT_MTE3");
99+ let mte4 = _sysctlbyname(c"hw.optional.arm.FEAT_MTE4");
90100 let pacimp = _sysctlbyname(c"hw.optional.arm.FEAT_PACIMP");
91101 let pauth2 = _sysctlbyname(c"hw.optional.arm.FEAT_PAuth2");
92102 let rpres = _sysctlbyname(c"hw.optional.arm.FEAT_RPRES");
@@ -111,7 +121,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
111121 enable_feature ( Feature :: asimd, asimd) ;
112122 enable_feature ( Feature :: bf16, bf16) ;
113123 enable_feature ( Feature :: bti, bti) ;
114- enable_feature ( Feature :: crc, crc) ;
124+ enable_feature ( Feature :: crc, crc_old || crc) ;
115125 enable_feature ( Feature :: cssc, cssc) ;
116126 enable_feature ( Feature :: dit, dit) ;
117127 enable_feature ( Feature :: dotprod, dotprod) ;
@@ -130,6 +140,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
130140 enable_feature ( Feature :: jsconv, jsconv) ;
131141 enable_feature ( Feature :: lse, lse) ;
132142 enable_feature ( Feature :: lse2, lse2) ;
143+ enable_feature ( Feature :: mte, mte && mte2) ;
133144 enable_feature ( Feature :: paca, pauth) ;
134145 enable_feature ( Feature :: pacg, pauth) ;
135146 enable_feature ( Feature :: pmull, aes && pmull) ;
@@ -141,6 +152,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
141152 enable_feature ( Feature :: sha3, sha512 && sha3 && asimd) ;
142153 enable_feature ( Feature :: sme, sme) ;
143154 enable_feature ( Feature :: sme2, sme2) ;
155+ enable_feature ( Feature :: sme2p1, sme2p1) ;
144156 enable_feature ( Feature :: sme_f64f64, sme_f64f64) ;
145157 enable_feature ( Feature :: sme_i16i64, sme_i16i64) ;
146158 enable_feature ( Feature :: ssbs, ssbs) ;
0 commit comments