@@ -103,13 +103,26 @@ struct AtHwcap {
103
103
// afp: bool,
104
104
// rpres: bool,
105
105
// mte3: bool,
106
+ sme : bool ,
107
+ smei16i64 : bool ,
108
+ smef64f64 : bool ,
109
+ // smei8i32: bool,
110
+ // smef16f32: bool,
111
+ // smeb16f32: bool,
112
+ // smef32f32: bool,
113
+ smefa64 : bool ,
106
114
wfxt : bool ,
107
115
// ebf16: bool,
108
116
// sveebf16: bool,
109
117
cssc : bool ,
110
118
// rprfm: bool,
111
119
sve2p1 : bool ,
120
+ sme2 : bool ,
121
+ sme2p1 : bool ,
122
+ // smei16i32: bool,
123
+ // smebi32i32: bool,
112
124
smeb16b16 : bool ,
125
+ smef16f16 : bool ,
113
126
mops : bool ,
114
127
hbc : bool ,
115
128
sveb16b16 : bool ,
@@ -124,6 +137,12 @@ struct AtHwcap {
124
137
f8dp2 : bool ,
125
138
f8e4m3 : bool ,
126
139
f8e5m2 : bool ,
140
+ smelutv2 : bool ,
141
+ smef8f16 : bool ,
142
+ smef8f32 : bool ,
143
+ smesf8fma : bool ,
144
+ smesf8dp4 : bool ,
145
+ smesf8dp2 : bool ,
127
146
}
128
147
129
148
impl From < auxvec:: AuxVec > for AtHwcap {
@@ -187,13 +206,26 @@ impl From<auxvec::AuxVec> for AtHwcap {
187
206
// afp: bit::test(auxv.hwcap2, 20),
188
207
// rpres: bit::test(auxv.hwcap2, 21),
189
208
// mte3: bit::test(auxv.hwcap2, 22),
209
+ sme : bit:: test ( auxv. hwcap2 , 23 ) ,
210
+ smei16i64 : bit:: test ( auxv. hwcap2 , 24 ) ,
211
+ smef64f64 : bit:: test ( auxv. hwcap2 , 25 ) ,
212
+ // smei8i32: bit::test(auxv.hwcap2, 26),
213
+ // smef16f32: bit::test(auxv.hwcap2, 27),
214
+ // smeb16f32: bit::test(auxv.hwcap2, 28),
215
+ // smef32f32: bit::test(auxv.hwcap2, 29),
216
+ smefa64 : bit:: test ( auxv. hwcap2 , 30 ) ,
190
217
wfxt : bit:: test ( auxv. hwcap2 , 31 ) ,
191
218
// ebf16: bit::test(auxv.hwcap2, 32),
192
219
// sveebf16: bit::test(auxv.hwcap2, 33),
193
220
cssc : bit:: test ( auxv. hwcap2 , 34 ) ,
194
221
// rprfm: bit::test(auxv.hwcap2, 35),
195
222
sve2p1 : bit:: test ( auxv. hwcap2 , 36 ) ,
223
+ sme2 : bit:: test ( auxv. hwcap2 , 37 ) ,
224
+ sme2p1 : bit:: test ( auxv. hwcap2 , 38 ) ,
225
+ // smei16i32: bit::test(auxv.hwcap2, 39),
226
+ // smebi32i32: bit::test(auxv.hwcap2, 40),
196
227
smeb16b16 : bit:: test ( auxv. hwcap2 , 41 ) ,
228
+ smef16f16 : bit:: test ( auxv. hwcap2 , 42 ) ,
197
229
mops : bit:: test ( auxv. hwcap2 , 43 ) ,
198
230
hbc : bit:: test ( auxv. hwcap2 , 44 ) ,
199
231
sveb16b16 : bit:: test ( auxv. hwcap2 , 45 ) ,
@@ -208,6 +240,12 @@ impl From<auxvec::AuxVec> for AtHwcap {
208
240
f8dp2 : bit:: test ( auxv. hwcap2 , 54 ) ,
209
241
f8e4m3 : bit:: test ( auxv. hwcap2 , 55 ) ,
210
242
f8e5m2 : bit:: test ( auxv. hwcap2 , 56 ) ,
243
+ smelutv2 : bit:: test ( auxv. hwcap2 , 57 ) ,
244
+ smef8f16 : bit:: test ( auxv. hwcap2 , 58 ) ,
245
+ smef8f32 : bit:: test ( auxv. hwcap2 , 59 ) ,
246
+ smesf8fma : bit:: test ( auxv. hwcap2 , 60 ) ,
247
+ smesf8dp4 : bit:: test ( auxv. hwcap2 , 61 ) ,
248
+ smesf8dp2 : bit:: test ( auxv. hwcap2 , 62 ) ,
211
249
}
212
250
}
213
251
}
@@ -278,13 +316,26 @@ impl From<super::cpuinfo::CpuInfo> for AtHwcap {
278
316
// afp: f.has("afp"),
279
317
// rpres: f.has("rpres"),
280
318
// mte3: f.has("mte3"),
319
+ sme : f. has ( "sme" ) ,
320
+ smei16i64 : f. has ( "smei16i64" ) ,
321
+ smef64f64 : f. has ( "smef64f64" ) ,
322
+ // smei8i32: f.has("smei8i32"),
323
+ // smef16f32: f.has("smef16f32"),
324
+ // smeb16f32: f.has("smeb16f32"),
325
+ // smef32f32: f.has("smef32f32"),
326
+ smefa64 : f. has ( "smefa64" ) ,
281
327
wfxt : f. has ( "wfxt" ) ,
282
328
// ebf16: f.has("ebf16"),
283
329
// sveebf16: f.has("sveebf16"),
284
330
cssc : f. has ( "cssc" ) ,
285
331
// rprfm: f.has("rprfm"),
286
332
sve2p1 : f. has ( "sve2p1" ) ,
333
+ sme2 : f. has ( "sme2" ) ,
334
+ sme2p1 : f. has ( "sme2p1" ) ,
335
+ // smei16i32: f.has("smei16i32"),
336
+ // smebi32i32: f.has("smebi32i32"),
287
337
smeb16b16 : f. has ( "smeb16b16" ) ,
338
+ smef16f16 : f. has ( "smef16f16" ) ,
288
339
mops : f. has ( "mops" ) ,
289
340
hbc : f. has ( "hbc" ) ,
290
341
sveb16b16 : f. has ( "sveb16b16" ) ,
@@ -299,6 +350,12 @@ impl From<super::cpuinfo::CpuInfo> for AtHwcap {
299
350
f8dp2 : f. has ( "f8dp2" ) ,
300
351
f8e4m3 : f. has ( "f8e4m3" ) ,
301
352
f8e5m2 : f. has ( "f8e5m2" ) ,
353
+ smelutv2 : f. has ( "smelutv2" ) ,
354
+ smef8f16 : f. has ( "smef8f16" ) ,
355
+ smef8f32 : f. has ( "smef8f32" ) ,
356
+ smesf8fma : f. has ( "smesf8fma" ) ,
357
+ smesf8dp4 : f. has ( "smesf8dp4" ) ,
358
+ smesf8dp2 : f. has ( "smesf8dp2" ) ,
302
359
}
303
360
}
304
361
}
@@ -431,6 +488,25 @@ impl AtHwcap {
431
488
enable_feature ( Feature :: fp8dot4, self . f8dp4 ) ;
432
489
enable_feature ( Feature :: fp8dot2, self . f8dp2 ) ;
433
490
enable_feature ( Feature :: wfxt, self . wfxt ) ;
491
+ enable_feature ( Feature :: sme, self . sme && self . bf16 ) ;
492
+ enable_feature ( Feature :: sme_i16i64, self . smei16i64 && self . sme ) ;
493
+ enable_feature ( Feature :: sme_f64f64, self . smef64f64 && self . sme ) ;
494
+ // enable_feature(Feature::sme_i8i32, self.smei8i32);
495
+ // enable_feature(Feature::sme_f16f32, self.smef16f32);
496
+ // enable_feature(Feature::sme_b16f32, self.smeb16f32);
497
+ // enable_feature(Feature::sme_f32f32, self.smef32f32);
498
+ enable_feature ( Feature :: sme_fa64, self . smefa64 && self . sme && sve2) ;
499
+ enable_feature ( Feature :: sme2, self . sme2 && self . sme ) ;
500
+ enable_feature ( Feature :: sme2p1, self . sme2p1 && self . sme2 && self . sme ) ;
501
+ // enable_feature(Feature::sme_i16i32, self.smei16i32);
502
+ // enable_feature(Feature::sme_bi32i32, self.smebi32i32);
503
+ enable_feature ( Feature :: sme_f16f16, self . smef16f16 ) ;
504
+ enable_feature ( Feature :: sme_lutv2, self . smelutv2 ) ;
505
+ enable_feature ( Feature :: sme_f8f16, self . smef8f16 && self . sme2 && self . f8cvt ) ;
506
+ enable_feature ( Feature :: sme_f8f32, self . smef8f32 && self . sme2 && self . f8cvt ) ;
507
+ enable_feature ( Feature :: ssve_fp8fma, self . smesf8fma && self . sme2 ) ;
508
+ enable_feature ( Feature :: ssve_fp8dot4, self . smesf8dp4 && self . sme2 ) ;
509
+ enable_feature ( Feature :: ssve_fp8dot2, self . smesf8dp2 && self . sme2 ) ;
434
510
}
435
511
value
436
512
}
0 commit comments