1
1
[[header]]
2
2
:description: <%= ext.long_name %> (<%= ext.name %> )
3
- :revdate: <%= ext_version .ratification_date.nil? ? Date.today : ext_version .ratification_date %>
4
- :revnumber: <%= ext_version .version %>
3
+ :revdate: <%= max_version .ratification_date.nil? ? Date.today : max_version .ratification_date %>
4
+ :revnumber: <%= max_version .version %>
5
5
:revmark: <%=
6
- case ext_version .state
6
+ case max_version .state
7
7
when "ratified"
8
8
<<~STATE
9
9
This document is in the http://riscv.org/spec-state[Ratified state] + \\
28
28
Change should be expected + \\
29
29
DEV_STATE
30
30
else
31
- raise "TODO: #{ext_version .state} description"
31
+ raise "TODO: #{max_version .state} description"
32
32
end
33
33
%>
34
34
:company: <%= ext.company.nil? ? "unknown" : ext.company["name"] %>
41
41
:title-logo-image: image:risc-v_logo.png["RISC-V International Logo",pdfwidth=3.25in,align=center]
42
42
:back-cover-image: image:riscv-horizontal-color.svg[opacity=25%]
43
43
<%- end -%>
44
- <%- if ext_version .state == "development" -%>
44
+ <%- if max_version .state == "development" -%>
45
45
:page-background-image: image:draft.png[opacity=20%]
46
46
<%- end -%>
47
47
// Settings
@@ -85,7 +85,7 @@ endif::[]
85
85
86
86
// Preamble
87
87
<%=
88
- case ext_version .state
88
+ case max_version .state
89
89
when "ratified"
90
90
<<~RATIFIED_STATE
91
91
[WARNING]
@@ -115,20 +115,20 @@ endif::[]
115
115
====
116
116
DEV_STATE
117
117
else
118
- raise "TODO: #{ext_version .state} description"
118
+ raise "TODO: #{max_version .state} description"
119
119
end
120
120
%>
121
121
122
122
[preface]
123
123
== Copyright and license information
124
124
This document is released under the <%= ext.doc_license.nil? ? "unknown" : ext.doc_license["url"] %> [<%= ext.doc_license.nil? ? "unknown" : ext.doc_license["name"] %> ].
125
125
126
- Copyright <%= ext_version .ratification_date.nil? ? Date.today.year : ext_version .ratification_date.split("-")[0] %> by <%= ext.company.nil? ? "unknown" : ext.company["name"] %> .
126
+ Copyright <%= max_version .ratification_date.nil? ? Date.today.year : max_version .ratification_date.split("-")[0] %> by <%= ext.company.nil? ? "unknown" : ext.company["name"] %> .
127
127
128
128
[preface]
129
129
== Acknowledgements
130
130
131
- <%- ext. versions.each do |version| -%>
131
+ <%- versions.each do |version| -%>
132
132
Contributors to version <%= version.version %> of the specification (in alphabetical order) include: +
133
133
134
134
<%- unless version.contributors.empty? -%>
@@ -145,7 +145,13 @@ improved this specification through their comments and questions.
145
145
[preface]
146
146
== Versions
147
147
148
- The following versions have been defined:
148
+ <%- if versions . size > 1 -%>
149
+ This specification documents versions <%= versions . map { |v | v . version } . join ( ', ' ) %> of <%= ext . name %> :
150
+ <%- else -%>
151
+ This specification documents version <%= max_version . version %> of <%= ext . name %> .
152
+ <%- end -%>
153
+
154
+ === Version History
149
155
150
156
<%- ext . versions . each do |version | -%>
151
157
--
@@ -182,22 +188,31 @@ Requires::
182
188
183
189
<%= ext . description %>
184
190
185
- <%- unless ext . implies . nil? -%>
191
+ <%- implications = versions . map { |v | v . implications } . flatten . uniq -%>
192
+ <%- unless implications . nil? -%>
186
193
=== Sub-extensions
187
- <%- if ext . implies . size > 1 -%>
188
- <%= ext . name %> defines the following #{ext.implies .size} sub-extensions:
194
+ <%- if implications . size > 1 -%>
195
+ <%= ext . name %> defines the following #{implications .size} sub-extensions:
189
196
<%- else -%>
190
197
<%= ext . name %> defines a single sub-extension:
191
198
<%- end -%>
192
199
193
- <%- ext . implies . each do |sub_ext | -%>
194
- ==== <%= sub_ext . name %>
200
+ <%- implications . each do |sub_ext | -%>
201
+ ==== <%= sub_ext . name %> (<%= sub_ext . version %> )
202
+
203
+ <%- if versions . size > 1 -%>
204
+ <%= sub_ext . name %> (<%= sub_ext . version %> ) is implied by
205
+ version <%= versions . select { |v | v . implications . include? ( sub_ext ) } . map ( &:version ) . join ( ", " ) %>
206
+ of <%= ext . name %> .
207
+ <%- end -%>
195
208
196
209
<%= arch_def . extension ( sub_ext . name ) . description %>
197
210
198
211
<%- unless sub_ext . requirements . empty? -%>
199
212
<%= sub_ext . name %> requires:
213
+
200
214
<%= sub_ext . requirements . to_asciidoc %>
215
+
201
216
<%- end -%>
202
217
203
218
<%- end -%>
@@ -211,27 +226,29 @@ The following <%= ext.instructions.size %> instructions are added by this extens
211
226
212
227
[%autowidth]
213
228
|===
214
- | RV32 | RV64 | Mnemonic | Instruction | <%= ext . versions . map { |v | "v#{ v . version } " } . join ( " | " ) %>
229
+ | RV32 | RV64 | Mnemonic | Instruction <%- if versions . size > 1 -%> | <%= versions . map { |v | "v#{ v . version } " } . join ( " | " ) %> <%- end - %>
215
230
216
231
<%- ext . instructions . each do |i | -%>
217
232
| <%= i . rv32? ? "✓" : "" %>
218
233
| <%= i . rv64? ? "✓" : "" %>
219
234
| `<%= i . name %> <%= i . assembly . gsub ( "x" , "r" ) . strip %> `
220
235
| xref:insns-<%= i . name . gsub ( '.' , '_' ) %> [<%= i . long_name %> ]
236
+ <%- if versions . size > 1 -%>
221
237
| <%= ext . versions . map { |v | i . defined_by? ( ext . name , v . version ) ? "✓" : "" } . join ( " | " ) %>
222
238
<%- end -%>
239
+ <%- end -%>
223
240
|===
224
241
225
- <%- unless ext . implies . empty? -%>
242
+ <%- unless implications . empty? -%>
226
243
=== Instructions by sub-extension
227
244
245
+ [%autowidth]
228
246
|===
229
- | Mnemonic | ` <%= ext . name %> ` | <%= ext . implies . map { |e | "`#{ e . name } `" } . join ( " | " ) %>
247
+ | Mnemonic | <%= implications . map { |e | "`#{ e . name } `" } . join ( " | " ) %>
230
248
231
249
<%- ext . instructions . each do |i | -%>
232
250
| `<%= i . name %> `
233
- | ✓
234
- | <%= ext . implies . map { |e | i . defined_by? ( e . name , arch_def . extension ( e . name ) . max_version ) ? "✓" : "" } . join ( " | " ) %>
251
+ | <%= implications . map { |e | i . defined_by? ( e ) ? "✓" : "" } . join ( " | " ) %>
235
252
<%- end -%>
236
253
|===
237
254
@@ -247,15 +264,17 @@ The following <%= ext.csrs.size %> are added by this extension.
247
264
248
265
[%autowidth]
249
266
|===
250
- | RV32 | RV64 | CSR | Name | <%= ext . versions . map { |v | "v#{ v . version } " } . join ( " | " ) %>
267
+ | RV32 | RV64 | CSR | Name <%- if versions . size > 1 -%> | <%= versions . map { |v | "v#{ v . version } " } . join ( " | " ) %> <%- end - %>
251
268
252
269
<%- ext . csrs . each do |csr | -%>
253
270
| <%= csr . defined_in_base32? ? "✓" : "" %>
254
271
| <%= csr . defined_in_base64? ? "✓" : "" %>
255
272
| xref:csrs-<%= csr . name . gsub ( '.' , '_' ) %> [<%= csr . name %> ]
256
273
| <%= csr . long_name %>
274
+ <%- if versions . size > 1 -%>
257
275
| <%= ext . versions . map { |v | csr . defined_by? ( ext . name , v . version ) ? "✓" : "" } . join ( " | " ) %>
258
276
<%- end -%>
277
+ <%- end -%>
259
278
260
279
|===
261
280
0 commit comments