Skip to content

Commit 96b1b10

Browse files
committed
Revert "std_detect: RISC-V platform guide documentation"
This reverts commit e907456. This is due to a CI failure (technically broken HTML with duplicate IDs) caused by this commit (visibly fine but invalid per the HTML specification and detected by the LinkCheck tool on the Rust CI process). The author independently working on a rustdoc enhancement to enable writing multiple references to a single footnote. If that change makes it to the stage0 compiler (next beta), the original change will be acceptable again (possibly targeting for the version 1.89).
1 parent 690b3a6 commit 96b1b10

File tree

1 file changed

+78
-126
lines changed
  • crates/std_detect/src/detect/arch

1 file changed

+78
-126
lines changed

crates/std_detect/src/detect/arch/riscv.rs

+78-126
Original file line numberDiff line numberDiff line change
@@ -22,133 +22,87 @@ features! {
2222
///
2323
/// [ISA manual]: https://riscv.org/specifications/ratified/
2424
///
25-
/// # Platform-specific/agnostic Behavior and Availability
26-
///
27-
/// Runtime detection depends on the platform-specific feature detection
28-
/// facility and its availability per feature is
29-
/// highly platform/version-specific.
30-
///
31-
/// Still, a best-effort attempt is performed to enable subset/dependent
32-
/// features if a superset feature is enabled regardless of the platform.
33-
/// For instance, if the A extension (`"a"`) is enabled, its subsets (the
34-
/// Zalrsc and Zaamo extensions; `"zalrsc"` and `"zaamo"`) are also enabled.
35-
/// Likewise, if the F extension (`"f"`) is enabled, one of its dependencies
36-
/// (the Zicsr extension `"zicsr"`) is also enabled.
37-
///
3825
/// # Unprivileged Specification
3926
///
40-
/// The supported ratified RISC-V instruction sets are as follows (OS
41-
/// columns denote runtime feature detection support with or without the
42-
/// minimum supported version):
43-
///
44-
/// | Literal | Base | Linux |
45-
/// |:---------- |:------- |:---------- |
46-
/// | `"rv32e"` | RV32E | No |
47-
/// | `"rv32i"` | RV32I | Yes [^ima] |
48-
/// | `"rv64i"` | RV64I | Yes [^ima] |
49-
///
50-
/// | Literal | Extension | Linux |
51-
/// |:--------------- |:----------- |:------------------ |
52-
/// | `"a"` | A | Yes [^ima] |
53-
/// | `"b"` | B | 6.5 |
54-
/// | `"c"` | C | Yes |
55-
/// | `"d"` | D | Yes |
56-
/// | `"f"` | F | Yes |
57-
/// | `"m"` | M | Yes [^ima] |
58-
/// | `"q"` | Q | No |
59-
/// | `"v"` | V | 6.5 |
60-
/// | `"zaamo"` | Zaamo | No [^ima] [^dep] |
61-
/// | `"zacas"` | Zacas | 6.8 |
62-
/// | `"zalrsc"` | Zalrsc | No [^ima] [^dep] |
63-
/// | `"zawrs"` | Zawrs | 6.11 |
64-
/// | `"zba"` | Zba | 6.5 |
65-
/// | `"zbb"` | Zbb | 6.5 |
66-
/// | `"zbc"` | Zbc | 6.8 |
67-
/// | `"zbkb"` | Zbkb | 6.8 |
68-
/// | `"zbkc"` | Zbkc | 6.8 |
69-
/// | `"zbkx"` | Zbkx | 6.8 |
70-
/// | `"zbs"` | Zbs | 6.5 |
71-
/// | `"zca"` | Zca | 6.11 [^dep] |
72-
/// | `"zcb"` | Zcb | 6.11 [^dep] |
73-
/// | `"zcd"` | Zcd | 6.11 [^dep] |
74-
/// | `"zcf"` | Zcf | 6.11 [^dep] |
75-
/// | `"zcmop"` | Zcmop | 6.11 |
76-
/// | `"zdinx"` | Zdinx | No |
77-
/// | `"zfa"` | Zfa | 6.8 |
78-
/// | `"zfh"` | Zfh | 6.8 |
79-
/// | `"zfhmin"` | Zfhmin | 6.8 |
80-
/// | `"zfinx"` | Zfinx | No |
81-
/// | `"zhinx"` | Zhinx | No |
82-
/// | `"zhinxmin"` | Zhinxmin | No |
83-
/// | `"zicboz"` | Zicboz | 6.7 |
84-
/// | `"zicntr"` | Zicntr | No [^ima-cntr] [^cntr] |
85-
/// | `"zicond"` | Zicond | 6.8 |
86-
/// | `"zicsr"` | Zicsr | No [^ima] [^dep] |
87-
/// | `"zifencei"` | Zifencei | No [^ima] |
88-
/// | `"zihintntl"` | Zihintntl | 6.8 |
89-
/// | `"zihintpause"` | Zihintpause | 6.10 |
90-
/// | `"zihpm"` | Zihpm | No |
91-
/// | `"zimop"` | Zimop | 6.11 |
92-
/// | `"zk"` | Zk | No [^zkr] |
93-
/// | `"zkn"` | Zkn | 6.8 |
94-
/// | `"zknd"` | Zknd | 6.8 |
95-
/// | `"zkne"` | Zkne | 6.8 |
96-
/// | `"zknh"` | Zknh | 6.8 |
97-
/// | `"zkr"` | Zkr | No [^zkr] |
98-
/// | `"zks"` | Zks | 6.8 |
99-
/// | `"zksed"` | Zksed | 6.8 |
100-
/// | `"zksh"` | Zksh | 6.8 |
101-
/// | `"zkt"` | Zkt | 6.8 |
102-
/// | `"ztso"` | Ztso | 6.8 |
103-
/// | `"zvbb"` | Zvbb | 6.8 |
104-
/// | `"zvbc"` | Zvbc | 6.8 |
105-
/// | `"zve32f"` | Zve32f | 6.11 [^dep] |
106-
/// | `"zve32x"` | Zve32x | 6.11 [^dep] |
107-
/// | `"zve64d"` | Zve64d | 6.11 [^dep] |
108-
/// | `"zve64f"` | Zve64f | 6.11 [^dep] |
109-
/// | `"zve64x"` | Zve64x | 6.11 [^dep] |
110-
/// | `"zvfh"` | Zvfh | 6.8 |
111-
/// | `"zvfhmin"` | Zvfhmin | 6.8 |
112-
/// | `"zvkb"` | Zvkb | 6.8 |
113-
/// | `"zvkg"` | Zvkg | 6.8 |
114-
/// | `"zvkn"` | Zvkn | 6.8 |
115-
/// | `"zvknc"` | Zvknc | 6.8 |
116-
/// | `"zvkned"` | Zvkned | 6.8 |
117-
/// | `"zvkng"` | Zvkng | 6.8 |
118-
/// | `"zvknha"` | Zvknha | 6.8 |
119-
/// | `"zvknhb"` | Zvknhb | 6.8 |
120-
/// | `"zvks"` | Zvks | 6.8 |
121-
/// | `"zvksc"` | Zvksc | 6.8 |
122-
/// | `"zvksed"` | Zvksed | 6.8 |
123-
/// | `"zvksg"` | Zvksg | 6.8 |
124-
/// | `"zvksh"` | Zvksh | 6.8 |
125-
/// | `"zvkt"` | Zvkt | 6.8 |
126-
///
127-
/// [^ima]: Or enabled when the IMA base behavior is enabled on the Linux
128-
/// kernel version 6.4 or later (for bases, the only matching one -- either
129-
/// `"rv32i"` or `"rv64i"` -- is enabled).
130-
///
131-
/// [^ima-cntr]: If the IMA base behavior is enabled on the Linux kernel
132-
/// version 6.4 or later, the Zicntr extension should be also present.
133-
/// However, it seems that Linux does not guarantee its existence.
134-
///
135-
/// [^cntr]: Even if this extension is available, it does not necessarily
136-
/// mean all performance counters are accessible.
137-
/// For instance, the Linux kernel version 6.6 or later prohibits accesses
138-
/// to performance counters other than `time` (wall-clock) by default.
139-
/// Also beware that, even if performance counters like `cycle` and
140-
/// `instret` are accessible, their value can be unreliable (e.g. returning
141-
/// the constant value) under certain circumstances.
142-
///
143-
/// [^dep]: Or enabled as a dependency of another extension (a superset)
144-
/// even if runtime detection of this feature itself is not supported (as
145-
/// long as the runtime detection of the superset is supported).
27+
/// The supported ratified RISC-V instruction sets are as follows:
14628
///
147-
/// [^zkr]: Linux does not report existence of this extension even if
148-
/// supported by the hardware mainly because the `seed` CSR is normally
149-
/// inaccessible from the user mode.
150-
/// For the Zk extension features except this CSR, check existence of both
151-
/// `"zkn"` and `"zkt"` features instead.
29+
/// * RV32E: `"rv32e"`
30+
/// * RV32I: `"rv32i"`
31+
/// * RV64I: `"rv64i"`
32+
/// * A: `"a"`
33+
/// * Zaamo: `"zaamo"`
34+
/// * Zalrsc: `"zalrsc"`
35+
/// * B: `"b"`
36+
/// * Zba: `"zba"`
37+
/// * Zbb: `"zbb"`
38+
/// * Zbs: `"zbs"`
39+
/// * C: `"c"`
40+
/// * Zca: `"zca"`
41+
/// * Zcd: `"zcd"` (if D is enabled)
42+
/// * Zcf: `"zcf"` (if F is enabled on RV32)
43+
/// * D: `"d"`
44+
/// * F: `"f"`
45+
/// * M: `"m"`
46+
/// * Q: `"q"`
47+
/// * V: `"v"`
48+
/// * Zve32x: `"zve32x"`
49+
/// * Zve32f: `"zve32f"`
50+
/// * Zve64x: `"zve64x"`
51+
/// * Zve64f: `"zve64f"`
52+
/// * Zve64d: `"zve64d"`
53+
/// * Zicboz: `"zicboz"`
54+
/// * Zicntr: `"zicntr"`
55+
/// * Zicond: `"zicond"`
56+
/// * Zicsr: `"zicsr"`
57+
/// * Zifencei: `"zifencei"`
58+
/// * Zihintntl: `"zihintntl"`
59+
/// * Zihintpause: `"zihintpause"`
60+
/// * Zihpm: `"zihpm"`
61+
/// * Zimop: `"zimop"`
62+
/// * Zacas: `"zacas"`
63+
/// * Zawrs: `"zawrs"`
64+
/// * Zfa: `"zfa"`
65+
/// * Zfh: `"zfh"`
66+
/// * Zfhmin: `"zfhmin"`
67+
/// * Zfinx: `"zfinx"`
68+
/// * Zdinx: `"zdinx"`
69+
/// * Zhinx: `"zhinx"`
70+
/// * Zhinxmin: `"zhinxmin"`
71+
/// * Zcb: `"zcb"`
72+
/// * Zcmop: `"zcmop"`
73+
/// * Zbc: `"zbc"`
74+
/// * Zbkb: `"zbkb"`
75+
/// * Zbkc: `"zbkc"`
76+
/// * Zbkx: `"zbkx"`
77+
/// * Zk: `"zk"`
78+
/// * Zkn: `"zkn"`
79+
/// * Zknd: `"zknd"`
80+
/// * Zkne: `"zkne"`
81+
/// * Zknh: `"zknh"`
82+
/// * Zkr: `"zkr"`
83+
/// * Zks: `"zks"`
84+
/// * Zksed: `"zksed"`
85+
/// * Zksh: `"zksh"`
86+
/// * Zkt: `"zkt"`
87+
/// * Zvbb: `"zvbb"`
88+
/// * Zvbc: `"zvbc"`
89+
/// * Zvfh: `"zvfh"`
90+
/// * Zvfhmin: `"zvfhmin"`
91+
/// * Zvkb: `"zvkb"`
92+
/// * Zvkg: `"zvkg"`
93+
/// * Zvkn: `"zvkn"`
94+
/// * Zvkned: `"zvkned"`
95+
/// * Zvknha: `"zvknha"`
96+
/// * Zvknhb: `"zvknhb"`
97+
/// * Zvknc: `"zvknc"`
98+
/// * Zvkng: `"zvkng"`
99+
/// * Zvks: `"zvks"`
100+
/// * Zvksed: `"zvksed"`
101+
/// * Zvksh: `"zvksh"`
102+
/// * Zvksc: `"zvksc"`
103+
/// * Zvksg: `"zvksg"`
104+
/// * Zvkt: `"zvkt"`
105+
/// * Ztso: `"ztso"`
152106
///
153107
/// There's also bases and extensions marked as standard instruction set,
154108
/// but they are in frozen or draft state. These instruction sets are also
@@ -168,9 +122,7 @@ features! {
168122
/// corresponding unaligned memory access is reasonably fast.
169123
///
170124
/// * `"unaligned-scalar-mem"`
171-
/// * Runtime detection requires Linux kernel version 6.4 or later.
172125
/// * `"unaligned-vector-mem"`
173-
/// * Runtime detection requires Linux kernel version 6.13 or later.
174126
#[stable(feature = "riscv_ratified", since = "1.78.0")]
175127

176128
@FEATURE: #[unstable(feature = "stdarch_riscv_feature_detection", issue = "111192")] rv32i: "rv32i";

0 commit comments

Comments
 (0)