@@ -37,31 +37,34 @@ pub(crate) fn detect_features() -> cache::Initializer {
37
37
// Armv8.0 features not using the standard identifiers
38
38
let fp = _sysctlbyname ( c"hw.optional.floatingpoint" ) ;
39
39
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" ) ;
41
41
42
42
// Armv8 and Armv9 features using the standard identifiers
43
43
let aes = _sysctlbyname ( c"hw.optional.arm.FEAT_AES" ) ;
44
44
let bf16 = _sysctlbyname ( c"hw.optional.arm.FEAT_BF16" ) ;
45
45
let bti = _sysctlbyname ( c"hw.optional.arm.FEAT_BTI" ) ;
46
+ let crc = _sysctlbyname ( c"hw.optional.arm.FEAT_CRC32" ) ;
46
47
let cssc = _sysctlbyname ( c"hw.optional.arm.FEAT_CSSC" ) ;
47
48
let dit = _sysctlbyname ( c"hw.optional.arm.FEAT_DIT" ) ;
49
+ let dotprod = _sysctlbyname ( c"hw.optional.arm.FEAT_DotProd" ) ;
48
50
let dpb = _sysctlbyname ( c"hw.optional.arm.FEAT_DPB" ) ;
49
51
let dpb2 = _sysctlbyname ( c"hw.optional.arm.FEAT_DPB2" ) ;
50
- let dotprod = _sysctlbyname ( c"hw.optional.arm.FEAT_DotProd" ) ;
51
52
let ecv = _sysctlbyname ( c"hw.optional.arm.FEAT_ECV" ) ;
52
53
let fcma = _sysctlbyname ( c"hw.optional.arm.FEAT_FCMA" ) ;
53
54
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" ) ;
56
55
let flagm = _sysctlbyname ( c"hw.optional.arm.FEAT_FlagM" ) ;
57
56
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" ) ;
58
59
let hbc = _sysctlbyname ( c"hw.optional.arm.FEAT_HBC" ) ;
59
60
let i8mm = _sysctlbyname ( c"hw.optional.arm.FEAT_I8MM" ) ;
60
61
let jsconv = _sysctlbyname ( c"hw.optional.arm.FEAT_JSCVT" ) ;
61
62
let rcpc = _sysctlbyname ( c"hw.optional.arm.FEAT_LRCPC" ) ;
62
63
let rcpc2 = _sysctlbyname ( c"hw.optional.arm.FEAT_LRCPC2" ) ;
63
64
let lse = _sysctlbyname ( c"hw.optional.arm.FEAT_LSE" ) ;
64
65
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" ) ;
65
68
let pauth = _sysctlbyname ( c"hw.optional.arm.FEAT_PAuth" ) ;
66
69
let pmull = _sysctlbyname ( c"hw.optional.arm.FEAT_PMULL" ) ;
67
70
let rdm = _sysctlbyname ( c"hw.optional.arm.FEAT_RDM" ) ;
@@ -72,6 +75,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
72
75
let sha512 = _sysctlbyname ( c"hw.optional.arm.FEAT_SHA512" ) ;
73
76
let sme = _sysctlbyname ( c"hw.optional.arm.FEAT_SME" ) ;
74
77
let sme2 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME2" ) ;
78
+ let sme2p1 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME2p1" ) ;
75
79
let sme_f64f64 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME_F64F64" ) ;
76
80
let sme_i16i64 = _sysctlbyname ( c"hw.optional.arm.FEAT_SME_I16I64" ) ;
77
81
let ssbs = _sysctlbyname ( c"hw.optional.arm.FEAT_SSBS" ) ;
@@ -87,6 +91,12 @@ pub(crate) fn detect_features() -> cache::Initializer {
87
91
let ebf16 = _sysctlbyname(c"hw.optional.arm.FEAT_EBF16");
88
92
let fpac = _sysctlbyname(c"hw.optional.arm.FEAT_FPAC");
89
93
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");
90
100
let pacimp = _sysctlbyname(c"hw.optional.arm.FEAT_PACIMP");
91
101
let pauth2 = _sysctlbyname(c"hw.optional.arm.FEAT_PAuth2");
92
102
let rpres = _sysctlbyname(c"hw.optional.arm.FEAT_RPRES");
@@ -111,7 +121,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
111
121
enable_feature ( Feature :: asimd, asimd) ;
112
122
enable_feature ( Feature :: bf16, bf16) ;
113
123
enable_feature ( Feature :: bti, bti) ;
114
- enable_feature ( Feature :: crc, crc) ;
124
+ enable_feature ( Feature :: crc, crc_old || crc) ;
115
125
enable_feature ( Feature :: cssc, cssc) ;
116
126
enable_feature ( Feature :: dit, dit) ;
117
127
enable_feature ( Feature :: dotprod, dotprod) ;
@@ -130,6 +140,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
130
140
enable_feature ( Feature :: jsconv, jsconv) ;
131
141
enable_feature ( Feature :: lse, lse) ;
132
142
enable_feature ( Feature :: lse2, lse2) ;
143
+ enable_feature ( Feature :: mte, mte && mte2) ;
133
144
enable_feature ( Feature :: paca, pauth) ;
134
145
enable_feature ( Feature :: pacg, pauth) ;
135
146
enable_feature ( Feature :: pmull, aes && pmull) ;
@@ -141,6 +152,7 @@ pub(crate) fn detect_features() -> cache::Initializer {
141
152
enable_feature ( Feature :: sha3, sha512 && sha3 && asimd) ;
142
153
enable_feature ( Feature :: sme, sme) ;
143
154
enable_feature ( Feature :: sme2, sme2) ;
155
+ enable_feature ( Feature :: sme2p1, sme2p1) ;
144
156
enable_feature ( Feature :: sme_f64f64, sme_f64f64) ;
145
157
enable_feature ( Feature :: sme_i16i64, sme_i16i64) ;
146
158
enable_feature ( Feature :: ssbs, ssbs) ;
0 commit comments