Skip to content

Commit 1d50be3

Browse files
authored
Merge pull request #8 from quic/xqci
Xqci v0.4.1
2 parents a0829f4 + 154904f commit 1d50be3

25 files changed

+122
-71
lines changed

backends/crd_doc/templates/crd.adoc.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ Requirement <%= req.name %> only apply when <%= req.when_pretty %>.
320320
<% end -%>
321321
322322
// TODO: GitHub issue 92: Use version specified by each profile.
323-
<% insts = arch_def.instructions.select { |i| i.defined_by?(ext_db.name,ext_db.min_version) } -%>
323+
<% insts = arch_def.instructions.select { |i| i.defined_by?(ext_db.min_version) } -%>
324324
<% unless insts.empty? -%>
325325
==== Instructions
326326

backends/ext_pdf_doc/tasks.rake

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,18 @@ rule %r{#{$root}/gen/ext_pdf_doc/.*/adoc/.*_extension\.adoc} => proc { |tname|
145145
erb.filename = template_path.to_s
146146

147147
ext = arch_def.extension(ext_name)
148-
version_num =
149-
if ENV.key?("EXT_VERSION")
150-
ENV["EXT_VERSION"]
148+
version_strs = ENV["VERSION"].split(",")
149+
versions =
150+
if version_strs.include?("all")
151+
ext.versions
151152
else
152-
ext.versions.max { |a, b| a.version <=> b.version }.version
153+
vs = ext.versions.select do |ext_ver|
154+
version_strs.include?(ext_ver.version.to_s)
155+
end
156+
vs << ext.max_version if version_strs.include?("latest")
157+
vs.uniq
153158
end
154-
ext_version = ext.versions.find { |v| v.version == version_num }
159+
max_version = versions.max { |a, b| a.version <=> b.version }
155160
FileUtils.mkdir_p File.dirname(t.name)
156161
File.write t.name, AsciidocUtils.resolve_links(arch_def.find_replace_links(erb.result(binding)))
157162
end
@@ -161,25 +166,36 @@ namespace :gen do
161166
Generate PDF documentation for :extension
162167
163168
If the extension is custom (from an arch_overlay), also give the config name
164-
DESC
165-
task :ext_pdf, [:extension] do |_t, args|
166-
extension = args[:extension]
167169
168-
Rake::Task[$root / "gen" / "ext_pdf_doc" / "_" / "pdf" / "#{extension}_extension.pdf"].invoke
169-
end
170+
Options:
170171
171-
desc <<~DESC
172-
Generate PDF documentation for :extension that is defined or overlayed in :cfg
172+
* EXT - The extension name
173+
* CFG - The config name, required only when an overlay is required
174+
* VERSION - A list of versions to include. May also be "all" or "latest".
175+
176+
Examples:
177+
178+
./do gen:ext_pdf EXT=Xqci CFG=qc_iu VERSION=latest
179+
./do gen:ext_pdf EXT=B VERSION=all
180+
./do gen:ext_pdf EXT=B VERSION=1.0.0
181+
./do gen:ext_pdf EXT=B VERSION=1.0.0,1.1.0
173182
174-
The latest version will be used, but can be overloaded by setting the EXT_VERSION environment variable.
175183
DESC
176-
task :cfg_ext_pdf, [:extension, :cfg] do |_t, args|
177-
raise ArgumentError, "Missing required argument :extension" if args[:extension].nil?
178-
raise ArgumentError, "Missing required argument :cfg" if args[:cfg].nil?
184+
task :ext_pdf, [:extension] do |_t, args|
185+
raise ArgumentError, "Missing required argument EXT" if ENV["EXT"].nil?
179186

180-
extension = args[:extension]
187+
extension = ENV["EXT"]
188+
cfg = ENV["CFG"]
189+
version = ENV["VERSION"]
190+
191+
versions = version.split(",")
192+
raise ArgumentError, "Nothing else should be specified with 'all'" if versions.include?("all") && versions.size > 1
181193

182-
Rake::Task[$root / "gen" / "ext_pdf_doc" / args[:cfg] / "pdf" / "#{extension}_extension.pdf"].invoke(args)
194+
if cfg.nil?
195+
Rake::Task[$root / "gen" / "ext_pdf_doc" / "_" / "pdf" / "#{extension}_extension.pdf"].invoke
196+
else
197+
Rake::Task[$root / "gen" / "ext_pdf_doc" / cfg / "pdf" / "#{extension}_extension.pdf"].invoke(args)
198+
end
183199
end
184200

185201
desc <<~DESC

backends/ext_pdf_doc/templates/ext_pdf.adoc.erb

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
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] + \\
@@ -28,7 +28,7 @@
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"] %>
@@ -41,7 +41,7 @@
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
124124
This 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| -%>
132132
Contributors 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? ? "&#x2713;" : "" %>
218233
| <%= i.rv64? ? "&#x2713;" : "" %>
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) ? "&#x2713;" : "" }.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-
| &#x2713;
234-
| <%= ext.implies.map { |e| i.defined_by?(e.name, arch_def.extension(e.name).max_version) ? "&#x2713;" : "" }.join(" | ") %>
251+
| <%= implications.map { |e| i.defined_by?(e) ? "&#x2713;" : "" }.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? ? "&#x2713;" : "" %>
254271
| <%= csr.defined_in_base64? ? "&#x2713;" : "" %>
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) ? "&#x2713;" : "" }.join(" | ") %>
258276
<%- end -%>
277+
<%- end -%>
259278

260279
|===
261280

backends/profile_doc/templates/profile_pdf.adoc.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ end.join(" | ") -%>
467467
:leveloffset: -3
468468

469469
// TODO: GitHub issue 92: Use version specified by each profile and add version info to inst table below.
470-
<%- insts = arch_def.instructions.select { |i| i.defined_by?(ext.name,ext.min_version) } -%>
470+
<%- insts = arch_def.instructions.select { |i| i.defined_by?(ext.min_version) } -%>
471471
<%- unless insts.empty? -%>
472472
==== Instructions
473473

cfgs/qc_iu/arch_overlay/csr/Xqci/gen_mcliciX.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
address: 0x<%= (0x7f0 + num).to_s(16) %>
1010
length: 32
1111
priv_mode: M
12+
base: 32
1213
definedBy: Xqci
1314
description: |
1415
Pending bits for IRQs <%= num*32 %>-<%= (num + 1)*32 - 1 %>
@@ -29,6 +30,7 @@
2930
long_name: IRQ Enable <%= num %>
3031
address: 0x<%= (0x7f0 + num).to_s(16) %>
3132
length: 32
33+
base: 32
3234
priv_mode: M
3335
definedBy: Xqci
3436
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_flags.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ qc_flags:
22
long_name: Flags register (Condition Code Register + co-processor flags)
33
address: 0x803
44
priv_mode: M
5+
base: 32
56
length: 32
67
description: |
78
Condition Code Register with condition codes, plus a co-processor flags (_e.g._, to support floating point)

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie0.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie0:
44
long_name: IRQ Enable 0
55
address: 0x7f0
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie1.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie1:
44
long_name: IRQ Enable 1
55
address: 0x7f1
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie2.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie2:
44
long_name: IRQ Enable 2
55
address: 0x7f2
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie3.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie3:
44
long_name: IRQ Enable 3
55
address: 0x7f3
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie4.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie4:
44
long_name: IRQ Enable 4
55
address: 0x7f4
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie5.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie5:
44
long_name: IRQ Enable 5
55
address: 0x7f5
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie6.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie6:
44
long_name: IRQ Enable 6
55
address: 0x7f6
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicie7.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ qc_mclicie7:
44
long_name: IRQ Enable 7
55
address: 0x7f7
66
length: 32
7+
base: 32
78
priv_mode: M
89
definedBy: Xqci
910
description: |

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicip0.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ qc_mclicip0:
55
address: 0x7f0
66
length: 32
77
priv_mode: M
8+
base: 32
89
definedBy: Xqci
910
description: |
1011
Pending bits for IRQs 0-31

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicip1.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ qc_mclicip1:
55
address: 0x7f1
66
length: 32
77
priv_mode: M
8+
base: 32
89
definedBy: Xqci
910
description: |
1011
Pending bits for IRQs 32-63

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicip2.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ qc_mclicip2:
55
address: 0x7f2
66
length: 32
77
priv_mode: M
8+
base: 32
89
definedBy: Xqci
910
description: |
1011
Pending bits for IRQs 64-95

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicip3.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ qc_mclicip3:
55
address: 0x7f3
66
length: 32
77
priv_mode: M
8+
base: 32
89
definedBy: Xqci
910
description: |
1011
Pending bits for IRQs 96-127

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicip4.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ qc_mclicip4:
55
address: 0x7f4
66
length: 32
77
priv_mode: M
8+
base: 32
89
definedBy: Xqci
910
description: |
1011
Pending bits for IRQs 128-159

cfgs/qc_iu/arch_overlay/csr/Xqci/qc_mclicip5.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ qc_mclicip5:
55
address: 0x7f5
66
length: 32
77
priv_mode: M
8+
base: 32
89
definedBy: Xqci
910
description: |
1011
Pending bits for IRQs 160-191

0 commit comments

Comments
 (0)