@@ -403,11 +403,12 @@ impl AtHwcap {
403403 enable_feature ( Feature :: crc, self . crc32 ) ;
404404 enable_feature ( Feature :: lse, self . atomics ) ;
405405 enable_feature ( Feature :: lse2, self . uscat ) ;
406- enable_feature ( Feature :: lse128, self . lse128 ) ;
406+ enable_feature ( Feature :: lse128, self . lse128 && self . atomics ) ;
407407 enable_feature ( Feature :: rcpc, self . lrcpc ) ;
408408 // 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) ;
411412 enable_feature ( Feature :: dit, self . dit ) ;
412413 enable_feature ( Feature :: flagm, self . flagm ) ;
413414 enable_feature ( Feature :: flagm2, self . flagm2 ) ;
@@ -456,7 +457,7 @@ impl AtHwcap {
456457 // SVE2 requires SVE
457458 let sve2 = self . sve2 && self . sve && asimd;
458459 enable_feature ( Feature :: sve2, sve2) ;
459- enable_feature ( Feature :: sve2p1, self . sve2p1 ) ;
460+ enable_feature ( Feature :: sve2p1, self . sve2p1 && sve2 ) ;
460461 // SVE2 extensions require SVE2 and crypto features
461462 enable_feature (
462463 Feature :: sve2_aes,
@@ -483,30 +484,32 @@ impl AtHwcap {
483484 enable_feature ( Feature :: cssc, self . cssc ) ;
484485 enable_feature ( Feature :: fpmr, self . fpmr ) ;
485486 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) ;
490494 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) ;
504504 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) ;
510513 }
511514 value
512515 }
0 commit comments