Skip to content

Commit 31a72bc

Browse files
authored
Rollup merge of #140139 - a4lg:riscv-feature-imply-adjust-1, r=Amanieu
rustc_target: Adjust RISC-V feature implication This commit adjusts feature implication of the RISC-V ISA for better feature detection from the user perspective. The main rule is: * If the feature `A` is a functional superset of the feature `B` (`A ⊃ B`), `A` is to imply `B`, even if this implication is not on the manual. Such implications (not directly written in the ISA manual) are commented as `A ⊃ B` which means "`A` is a (functional) superset of `B`". 1. `Zbc` → `Zbkc` (add as a superset) The `Zbkc` extension is a subset of the `Zbc` extension (`Zbc` minus `clmulr` instruction). 2. `Zkr` → (nothing) (remove dependency to `Zicsr`) Implication to the `Zicsr` extension is removed because (although nearly harmless), the `Zkr` extension (or the `seed` CSR section) defines its own subset of the `Zicsr` extension (guaranteed to work against the `seed` CSR which needs read/write access). 3. `Zvbb` → `Zvkb` (comment as a superset) This implication was already there but not denoted as a functional superset. This commit adds the comment. 4. `Zvfh` → `Zvfhmin` (comment as a superset) This is similar to the case above (`Zvbb` → `Zvkb`). 5. `Zvfh` → `Zve32f` (add implication per the ISA specification) This dependency is on the ISA manual but was missing (due to the fact that `Zvfh` indirectly implies `Zve32f` on the current implementation through `Zvfh` → `Zvfhmin` which is a functional relation). This commit ensures that this is *also* ISA-compliant in the source code level (there's no functional changes though). 6. `Zvknhb` → `Zvknha` (add as a superset) The `Zvknhb` extension (SHA-256 / SHA-512) is a functional superset of the `Zvknha` extension (SHA-256 only).
2 parents c3f811f + 2ef4f78 commit 31a72bc

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

compiler/rustc_target/src/target_features.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ static RISCV_FEATURES: &[(&str, Stability, ImpliedFeatures)] = &[
516516
("zawrs", Unstable(sym::riscv_target_feature), &[]),
517517
("zba", Stable, &[]),
518518
("zbb", Stable, &[]),
519-
("zbc", Stable, &[]),
519+
("zbc", Stable, &["zbkc"]), // Zbc ⊃ Zbkc
520520
("zbkb", Stable, &[]),
521521
("zbkc", Stable, &[]),
522522
("zbkx", Stable, &[]),
@@ -545,20 +545,20 @@ static RISCV_FEATURES: &[(&str, Stability, ImpliedFeatures)] = &[
545545
("zknd", Stable, &[]),
546546
("zkne", Stable, &[]),
547547
("zknh", Stable, &[]),
548-
("zkr", Stable, &["zicsr"]),
548+
("zkr", Stable, &[]),
549549
("zks", Stable, &["zbkb", "zbkc", "zbkx", "zksed", "zksh"]),
550550
("zksed", Stable, &[]),
551551
("zksh", Stable, &[]),
552552
("zkt", Stable, &[]),
553553
("ztso", Unstable(sym::riscv_target_feature), &[]),
554-
("zvbb", Unstable(sym::riscv_target_feature), &["zvkb"]),
554+
("zvbb", Unstable(sym::riscv_target_feature), &["zvkb"]), // Zvbb ⊃ Zvkb
555555
("zvbc", Unstable(sym::riscv_target_feature), &["zve64x"]),
556556
("zve32f", Unstable(sym::riscv_target_feature), &["zve32x", "f"]),
557557
("zve32x", Unstable(sym::riscv_target_feature), &["zvl32b", "zicsr"]),
558558
("zve64d", Unstable(sym::riscv_target_feature), &["zve64f", "d"]),
559559
("zve64f", Unstable(sym::riscv_target_feature), &["zve32f", "zve64x"]),
560560
("zve64x", Unstable(sym::riscv_target_feature), &["zve32x", "zvl64b"]),
561-
("zvfh", Unstable(sym::riscv_target_feature), &["zvfhmin", "zfhmin"]),
561+
("zvfh", Unstable(sym::riscv_target_feature), &["zvfhmin", "zve32f", "zfhmin"]), // Zvfh ⊃ Zvfhmin
562562
("zvfhmin", Unstable(sym::riscv_target_feature), &["zve32f"]),
563563
("zvkb", Unstable(sym::riscv_target_feature), &["zve32x"]),
564564
("zvkg", Unstable(sym::riscv_target_feature), &["zve32x"]),
@@ -567,7 +567,7 @@ static RISCV_FEATURES: &[(&str, Stability, ImpliedFeatures)] = &[
567567
("zvkned", Unstable(sym::riscv_target_feature), &["zve32x"]),
568568
("zvkng", Unstable(sym::riscv_target_feature), &["zvkn", "zvkg"]),
569569
("zvknha", Unstable(sym::riscv_target_feature), &["zve32x"]),
570-
("zvknhb", Unstable(sym::riscv_target_feature), &["zve64x"]),
570+
("zvknhb", Unstable(sym::riscv_target_feature), &["zvknha", "zve64x"]), // Zvknhb ⊃ Zvknha
571571
("zvks", Unstable(sym::riscv_target_feature), &["zvksed", "zvksh", "zvkb", "zvkt"]),
572572
("zvksc", Unstable(sym::riscv_target_feature), &["zvks", "zvbc"]),
573573
("zvksed", Unstable(sym::riscv_target_feature), &["zve32x"]),

0 commit comments

Comments
 (0)