Skip to content

Commit 2ef4f78

Browse files
committed
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 referred 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 - "clmulr" instruction == Zbkc) 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. 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).
1 parent d6c1e45 commit 2ef4f78

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)