@@ -403,11 +403,12 @@ impl AtHwcap {
403
403
enable_feature ( Feature :: crc, self . crc32 ) ;
404
404
enable_feature ( Feature :: lse, self . atomics ) ;
405
405
enable_feature ( Feature :: lse2, self . uscat ) ;
406
- enable_feature ( Feature :: lse128, self . lse128 ) ;
406
+ enable_feature ( Feature :: lse128, self . lse128 && self . atomics ) ;
407
407
enable_feature ( Feature :: rcpc, self . lrcpc ) ;
408
408
// RCPC2 (rcpc-immo in LLVM) requires RCPC support
409
- enable_feature ( Feature :: rcpc2, self . ilrcpc && self . lrcpc ) ;
410
- enable_feature ( Feature :: rcpc3, self . lrcpc3 ) ;
409
+ let rcpc2 = self . ilrcpc && self . lrcpc ;
410
+ enable_feature ( Feature :: rcpc2, rcpc2) ;
411
+ enable_feature ( Feature :: rcpc3, self . lrcpc3 && rcpc2) ;
411
412
enable_feature ( Feature :: dit, self . dit ) ;
412
413
enable_feature ( Feature :: flagm, self . flagm ) ;
413
414
enable_feature ( Feature :: flagm2, self . flagm2 ) ;
@@ -456,7 +457,7 @@ impl AtHwcap {
456
457
// SVE2 requires SVE
457
458
let sve2 = self . sve2 && self . sve && asimd;
458
459
enable_feature ( Feature :: sve2, sve2) ;
459
- enable_feature ( Feature :: sve2p1, self . sve2p1 ) ;
460
+ enable_feature ( Feature :: sve2p1, self . sve2p1 && sve2 ) ;
460
461
// SVE2 extensions require SVE2 and crypto features
461
462
enable_feature (
462
463
Feature :: sve2_aes,
@@ -483,30 +484,32 @@ impl AtHwcap {
483
484
enable_feature ( Feature :: cssc, self . cssc ) ;
484
485
enable_feature ( Feature :: fpmr, self . fpmr ) ;
485
486
enable_feature ( Feature :: faminmax, self . faminmax ) ;
486
- enable_feature ( Feature :: fp8, self . f8cvt ) ;
487
- enable_feature ( Feature :: fp8fma, self . f8fma ) ;
488
- enable_feature ( Feature :: fp8dot4, self . f8dp4 ) ;
489
- enable_feature ( Feature :: fp8dot2, self . f8dp2 ) ;
487
+ let fp8 = self . f8cvt && self . faminmax && self . lut && self . bf16 ;
488
+ enable_feature ( Feature :: fp8, fp8) ;
489
+ let fp8fma = self . f8fma && fp8;
490
+ enable_feature ( Feature :: fp8fma, fp8fma) ;
491
+ let fp8dot4 = self . f8dp4 && fp8fma;
492
+ enable_feature ( Feature :: fp8dot4, fp8dot4) ;
493
+ enable_feature ( Feature :: fp8dot2, self . f8dp2 && fp8dot4) ;
490
494
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 ) ;
495
+ let sme = self . sme && self . bf16 ;
496
+ enable_feature ( Feature :: sme, sme) ;
497
+ enable_feature ( Feature :: sme_i16i64, self . smei16i64 && sme) ;
498
+ enable_feature ( Feature :: sme_f64f64, self . smef64f64 && sme) ;
499
+ enable_feature ( Feature :: sme_fa64, self . smefa64 && sme && sve2) ;
500
+ let sme2 = self . sme2 && sme;
501
+ enable_feature ( Feature :: sme2, sme2) ;
502
+ enable_feature ( Feature :: sme2p1, self . sme2p1 && sme2) ;
503
+ enable_feature ( Feature :: sme_f16f16, self . smef16f16 && sme2) ;
504
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 ) ;
505
+ let sme_f8f32 = self . smef8f32 && sme2 && fp8;
506
+ enable_feature ( Feature :: sme_f8f32, sme_f8f32) ;
507
+ enable_feature ( Feature :: sme_f8f16, self . smef8f16 && sme_f8f32) ;
508
+ let ssve_fp8fma = self . smesf8fma && sme2 && fp8;
509
+ enable_feature ( Feature :: ssve_fp8fma, ssve_fp8fma) ;
510
+ let ssve_fp8dot4 = self . smesf8dp4 && ssve_fp8fma;
511
+ enable_feature ( Feature :: ssve_fp8dot4, ssve_fp8dot4) ;
512
+ enable_feature ( Feature :: ssve_fp8dot2, self . smesf8dp2 && ssve_fp8dot4) ;
510
513
}
511
514
value
512
515
}
0 commit comments