11[[header]]
22: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 %>
55:revmark: <%=
6- case ext_version .state
6+ case max_version .state
77 when "ratified"
88 <<~STATE
99 This document is in the http://riscv.org/spec-state[Ratified state] + \\
2828 Change should be expected + \\
2929 DEV_STATE
3030 else
31- raise "TODO: #{ext_version .state} description"
31+ raise "TODO: #{max_version .state} description"
3232 end
3333%>
3434:company: <%= ext.company.nil? ? "unknown" : ext.company["name"] %>
4141:title-logo-image: image:risc-v_logo.png["RISC-V International Logo",pdfwidth=3.25in,align=center]
4242:back-cover-image: image:riscv-horizontal-color.svg[opacity=25%]
4343<%- end -%>
44- <%- if ext_version .state == "development" -%>
44+ <%- if max_version .state == "development" -%>
4545:page-background-image: image:draft.png[opacity=20%]
4646<%- end -%>
4747// Settings
@@ -85,7 +85,7 @@ endif::[]
8585
8686// Preamble
8787<%=
88- case ext_version .state
88+ case max_version .state
8989 when "ratified"
9090 <<~RATIFIED_STATE
9191 [WARNING]
@@ -115,20 +115,20 @@ endif::[]
115115 ====
116116 DEV_STATE
117117 else
118- raise "TODO: #{ext_version .state} description"
118+ raise "TODO: #{max_version .state} description"
119119 end
120120%>
121121
122122[preface]
123123== Copyright and license information
124124This document is released under the <%= ext.doc_license.nil? ? "unknown" : ext.doc_license["url"] %> [<%= ext.doc_license.nil? ? "unknown" : ext.doc_license["name"] %> ].
125125
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"] %> .
127127
128128[preface]
129129== Acknowledgements
130130
131- <%- ext. versions.each do |version| -%>
131+ <%- versions.each do |version| -%>
132132Contributors to version <%= version.version %> of the specification (in alphabetical order) include: +
133133
134134<%- unless version.contributors.empty? -%>
@@ -145,7 +145,13 @@ improved this specification through their comments and questions.
145145[preface]
146146== Versions
147147
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
149155
150156<%- ext . versions . each do |version | -%>
151157--
@@ -182,22 +188,31 @@ Requires::
182188
183189<%= ext . description %>
184190
185- <%- unless ext . implies . nil? -%>
191+ <%- implications = versions . map { |v | v . implications } . flatten . uniq -%>
192+ <%- unless implications . nil? -%>
186193=== 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:
189196<%- else -%>
190197<%= ext . name %> defines a single sub-extension:
191198<%- end -%>
192199
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 -%>
195208
196209<%= arch_def . extension ( sub_ext . name ) . description %>
197210
198211<%- unless sub_ext . requirements . empty? -%>
199212<%= sub_ext . name %> requires:
213+
200214<%= sub_ext . requirements . to_asciidoc %>
215+
201216<%- end -%>
202217
203218<%- end -%>
@@ -211,27 +226,29 @@ The following <%= ext.instructions.size %> instructions are added by this extens
211226
212227[%autowidth]
213228|===
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 - %>
215230
216231<%- ext . instructions . each do |i | -%>
217232| <%= i . rv32? ? "✓" : "" %>
218233| <%= i . rv64? ? "✓" : "" %>
219234| `<%= i . name %> <%= i . assembly . gsub ( "x" , "r" ) . strip %> `
220235| xref:insns-<%= i . name . gsub ( '.' , '_' ) %> [<%= i . long_name %> ]
236+ <%- if versions . size > 1 -%>
221237| <%= ext . versions . map { |v | i . defined_by? ( ext . name , v . version ) ? "✓" : "" } . join ( " | " ) %>
222238<%- end -%>
239+ <%- end -%>
223240|===
224241
225- <%- unless ext . implies . empty? -%>
242+ <%- unless implications . empty? -%>
226243=== Instructions by sub-extension
227244
245+ [%autowidth]
228246|===
229- | Mnemonic | ` <%= ext . name %> ` | <%= ext . implies . map { |e | "`#{ e . name } `" } . join ( " | " ) %>
247+ | Mnemonic | <%= implications . map { |e | "`#{ e . name } `" } . join ( " | " ) %>
230248
231249<%- ext . instructions . each do |i | -%>
232250| `<%= 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 ( " | " ) %>
235252<%- end -%>
236253|===
237254
@@ -247,15 +264,17 @@ The following <%= ext.csrs.size %> are added by this extension.
247264
248265[%autowidth]
249266|===
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 - %>
251268
252269<%- ext . csrs . each do |csr | -%>
253270| <%= csr . defined_in_base32? ? "✓" : "" %>
254271| <%= csr . defined_in_base64? ? "✓" : "" %>
255272| xref:csrs-<%= csr . name . gsub ( '.' , '_' ) %> [<%= csr . name %> ]
256273| <%= csr . long_name %>
274+ <%- if versions . size > 1 -%>
257275| <%= ext . versions . map { |v | csr . defined_by? ( ext . name , v . version ) ? "✓" : "" } . join ( " | " ) %>
258276<%- end -%>
277+ <%- end -%>
259278
260279|===
261280
0 commit comments