Skip to content

Commit c34662c

Browse files
committed
std_detect: Update aarch64 feature dependencies to LLVM upstream
Feature dependencies for newer aarch64 fetaures differ between LLVM 18 in the Rust tree and upstream LLVM 19. This commit updates those dependencies to reflect new LLVM upstream changes.
1 parent a71ea0c commit c34662c

File tree

1 file changed

+29
-26
lines changed

1 file changed

+29
-26
lines changed

crates/std_detect/src/detect/os/linux/aarch64.rs

+29-26
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)