Skip to content
Closed
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
37dcf7b
feat: add amo instruction layout system for zaamo extension
Sukuna0007Abhi Jul 21, 2025
d091dc1
Merge branch 'main' into main
Sukuna0007Abhi Jul 23, 2025
5bfcfa9
feat: add amo instruction layout system for zaamo extension
Sukuna0007Abhi Jul 24, 2025
3cfa5e3
feat: implement AMO instruction layout system for Zaamo extension
Sukuna0007Abhi Jul 25, 2025
9ea548d
Merge branch 'main' into main
Sukuna0007Abhi Jul 26, 2025
cdbf368
Merge branch 'main' into main
Sukuna0007Abhi Jul 27, 2025
309ad6a
fix(zaamo-amo): use .aqrl (not .aq.rl) for combined acquire/release A…
Sukuna0007Abhi Jul 27, 2025
1d95bc4
fix(zaamo-amo): correct path to use four ../ in layout files
Sukuna0007Abhi Jul 27, 2025
77b615e
feat: make all deploy actions dry-run from regress (#919)
dhower-qc Jul 22, 2025
da7d931
fix: cfgs with custom overlays; was broken by refactoring (#908)
dhower-qc Jul 22, 2025
c3c7da5
feat: get deploy actions running in both merge queue and regress (#920)
dhower-qc Jul 23, 2025
6e75a16
feat: add amo instruction layout system for zaamo extension
Sukuna0007Abhi Jul 24, 2025
72e4905
feat: implement AMO instruction layout system for Zaamo extension
Sukuna0007Abhi Jul 25, 2025
1cc1e6f
fix(csr): misa: add Q-bit in sw_read() (#922)
adingank-qualcomm Jul 25, 2025
a469ee8
Fix issue #85: Make instruction access mode display conditional (#911)
7908837174 Jul 27, 2025
d283bad
fix(zaamo-amo): use .aqrl (not .aq.rl) for combined acquire/release A…
Sukuna0007Abhi Jul 27, 2025
56456f9
fix(zaamo-amo): correct path to use four ../ in layout files
Sukuna0007Abhi Jul 27, 2025
2ad81c1
Merge branch 'riscv-software-src:main' into main
Sukuna0007Abhi Jul 29, 2025
621b85e
Merge branch 'main' of https://github.com/Sukuna0007Abhi/riscv-unifie…
Sukuna0007Abhi Jul 29, 2025
ccea35a
feat: add amo instruction layout system for zaamo extension
Sukuna0007Abhi Jul 21, 2025
0dcde0f
feat: make all deploy actions dry-run from regress (#919)
dhower-qc Jul 22, 2025
4b251d5
fix: cfgs with custom overlays; was broken by refactoring (#908)
dhower-qc Jul 22, 2025
e39bab7
feat: get deploy actions running in both merge queue and regress (#920)
dhower-qc Jul 23, 2025
c21fd76
feat: add amo instruction layout system for zaamo extension
Sukuna0007Abhi Jul 24, 2025
7421916
feat: implement AMO instruction layout system for Zaamo extension
Sukuna0007Abhi Jul 25, 2025
69ac64c
fix(csr): misa: add Q-bit in sw_read() (#922)
adingank-qualcomm Jul 25, 2025
5781bad
Fix issue #85: Make instruction access mode display conditional (#911)
7908837174 Jul 27, 2025
7839e51
fix(zaamo-amo): use .aqrl (not .aq.rl) for combined acquire/release A…
Sukuna0007Abhi Jul 27, 2025
bc986d2
fix(zaamo-amo): correct path to use four ../ in layout files
Sukuna0007Abhi Jul 27, 2025
19cf34b
feat: adding certificate and CTP for RVI20 (#889)
james-ball-qualcomm Jul 29, 2025
0654020
Merge branch 'main' of https://github.com/Sukuna0007Abhi/riscv-unifie…
Sukuna0007Abhi Jul 29, 2025
ca81979
feat:added a restore file …
Sukuna0007Abhi Jul 29, 2025
2383d3b
feat:added a restore file …
Sukuna0007Abhi Jul 29, 2025
0b8e1c2
Generate missing Zaamo instruction files
Sukuna0007Abhi Jul 30, 2025
7e7a6d9
Fix Zaamo extension specification inconsistencies
Sukuna0007Abhi Jul 30, 2025
4e13e45
Merge branch 'main' into main
Sukuna0007Abhi Jul 30, 2025
2b118e5
feat:Resolved all asked changes
Sukuna0007Abhi Jul 31, 2025
01c199a
Merge branch 'main' into main
Sukuna0007Abhi Aug 1, 2025
29066d5
fix: correct AMO function syntax in Zaamo templates and generated files
Sukuna0007Abhi Aug 6, 2025
720da29
fix: correct AMO function argument types
Sukuna0007Abhi Aug 6, 2025
a4ab767
fix: implement mentor feedback for AMO memory model semantics and mis…
Sukuna0007Abhi Aug 9, 2025
296b88a
feat: reorganize AMO instructions by size between Zaamo and Zabha ext…
Sukuna0007Abhi Aug 11, 2025
d9a642d
refactor: remove amocas generation from Rakefile
Sukuna0007Abhi Aug 12, 2025
8acdb30
fix: correct AMO instruction encodings and operation calls
Sukuna0007Abhi Aug 12, 2025
ed67e23
fix: address all PR feedback - correct MISA logic and layout conditio…
Sukuna0007Abhi Aug 13, 2025
7230cf2
fix: resolve AMO opcode overlaps by fixing base files to use aq=0,rl=0
Sukuna0007Abhi Aug 16, 2025
e70ec3c
fix: temporarily disable Zacas amocas generation to pass CI
Sukuna0007Abhi Aug 16, 2025
c10e8ff
feat: implement AMOCAS instruction support for Zabha and Zacas extens…
Sukuna0007Abhi Aug 16, 2025
a301003
fix: correct AMOCAS instruction operation() implementations
Sukuna0007Abhi Aug 16, 2025
5736f75
Merge branch 'main' into main
Sukuna0007Abhi Aug 16, 2025
04d75e5
fix: correct AMOCAS function calls and update golden appendix
Sukuna0007Abhi Aug 16, 2025
3ac435e
fix: correct PmaAttribute enum usage in AMOCAS functions
Sukuna0007Abhi Aug 16, 2025
633247e
fix: restore original path in golden instruction appendix
Sukuna0007Abhi Aug 18, 2025
79e238f
fix: sail syntax in Zabha AMO base files
Sukuna0007Abhi Aug 18, 2025
1ea634c
Merge branch 'main' into main
Sukuna0007Abhi Aug 21, 2025
4e7c462
refactor: clean up Rakefile duplication and fix AMO layout templates
Sukuna0007Abhi Aug 22, 2025
981fdd6
feat: implement AMO instruction layout system for Zaamo & Zabha exten…
Sukuna0007Abhi Aug 25, 2025
f7e811f
chore: update golden instruction appendix for new AMO instructions
Sukuna0007Abhi Aug 25, 2025
3fdacaa
chore: update golden instruction appendix with current generation output
Sukuna0007Abhi Aug 25, 2025
4bbe2f1
fix: address Sir @ThinkOpenly's code review feedback on AMO instructi…
Sukuna0007Abhi Sep 2, 2025
267b75f
Merge branch 'riscv-software-src:main' into main
Sukuna0007Abhi Sep 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 107 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ require "sorbet-runtime"
T.bind(self, T.all(Rake::DSL, Object))
extend T::Sig

require 'pathname'
require 'erb'

Encoding.default_external = "UTF-8"

$jobs = ENV["JOBS"].nil? ? 1 : ENV["JOBS"].to_i
Expand Down Expand Up @@ -156,7 +159,7 @@ end

namespace :test do
desc "Check that instruction encodings in the DB are consistent and do not conflict"
task :inst_encodings do
task :inst_encodings => ["gen:arch"] do
print "Checking for conflicts in instruction encodings.."

cfg_arch = $resolver.cfg_arch_for("_")
Expand Down Expand Up @@ -235,7 +238,7 @@ def insert_warning(str, from)
# insert a warning on the second line
lines = str.lines
first_line = lines.shift
lines.unshift(first_line, "\n# WARNING: This file is auto-generated from #{Pathname.new(from).relative_path_from($root)}").join("")
lines.unshift(first_line, "\n# WARNING: This file is auto-generated from #{Pathname.new(from).relative_path_from($root)}\n").join("")
end

(3..31).each do |hpm_num|
Expand Down Expand Up @@ -356,9 +359,88 @@ file "#{$resolver.std_path}/csr/Zicntr/mcountinhibit.yaml" => [
File.write(t.name, insert_warning(erb.result(binding), t.prerequisites.first))
end

# AMO instruction generation from layouts
%w[amoadd amoand amomax amomaxu amomin amominu amoor amoswap amoxor].each do |op|
["b", "h", "w", "d"].each do |size|
# Determine target extension directory based on size
extension_dir = %w[b h].include?(size) ? "Zabha" : "Zaamo"

# Define all acquire/release combinations
aq_rl_variants = [
{ suffix: "", aq: false, rl: false }, # base instruction
{ suffix: ".aq", aq: true, rl: false }, # acquire only
{ suffix: ".rl", aq: false, rl: true }, # release only
{ suffix: ".aqrl", aq: true, rl: true } # both acquire and release
]

aq_rl_variants.each do |variant|
file "#{$resolver.std_path}/inst/#{extension_dir}/#{op}.#{size}#{variant[:suffix]}.yaml" => [
"#{$resolver.std_path}/inst/Zaamo/#{op}.SIZE.AQRL.layout",
__FILE__
] do |t|
aq = variant[:aq]
rl = variant[:rl]
erb = ERB.new(File.read($resolver.std_path / "inst/Zaamo/#{op}.SIZE.AQRL.layout"), trim_mode: "-")
erb.filename = "#{$resolver.std_path}/inst/Zaamo/#{op}.SIZE.AQRL.layout"
File.write(t.name, insert_warning(erb.result(binding), t.prerequisites.first))
end
end
end
end

# AMOCAS instruction generation from Zabha layout (supports both Zabha and Zacas)
# Zabha variants (b, h) -> generated in Zabha directory
["b", "h"].each do |size|
# Define all acquire/release combinations
aq_rl_variants = [
{ suffix: "", aq: false, rl: false }, # base instruction
{ suffix: ".aq", aq: true, rl: false }, # acquire only
{ suffix: ".rl", aq: false, rl: true }, # release only
{ suffix: ".aqrl", aq: true, rl: true } # both acquire and release
]

aq_rl_variants.each do |variant|
file "#{$resolver.std_path}/inst/Zabha/amocas.#{size}#{variant[:suffix]}.yaml" => [
"#{$resolver.std_path}/inst/Zabha/amocas.SIZE.AQRL.layout",
__FILE__
] do |t|
aq = variant[:aq]
rl = variant[:rl]
erb = ERB.new(File.read($resolver.std_path / "inst/Zabha/amocas.SIZE.AQRL.layout"), trim_mode: "-")
erb.filename = "#{$resolver.std_path}/inst/Zabha/amocas.SIZE.AQRL.layout"
File.write(t.name, insert_warning(erb.result(binding), t.prerequisites.first))
end
end
end

# Zacas variants (w, d, q) -> generated in Zacas directory using the same Zabha layout
# ["w", "d", "q"].each do |size|
# # Define all acquire/release combinations
# aq_rl_variants = [
# { suffix: "", aq: false, rl: false }, # base instruction
# { suffix: ".aq", aq: true, rl: false }, # acquire only
# { suffix: ".rl", aq: false, rl: true }, # release only
# { suffix: ".aqrl", aq: true, rl: true } # both acquire and release
# ]
#
# aq_rl_variants.each do |variant|
# file "#{$resolver.std_path}/inst/Zacas/amocas.#{size}#{variant[:suffix]}.yaml" => [
# "#{$resolver.std_path}/inst/Zabha/amocas.SIZE.AQRL.layout",
# __FILE__
# ] do |t|
# aq = variant[:aq]
# rl = variant[:rl]
# erb = ERB.new(File.read($resolver.std_path / "inst/Zabha/amocas.SIZE.AQRL.layout"), trim_mode: "-")
# erb.filename = "#{$resolver.std_path}/inst/Zabha/amocas.SIZE.AQRL.layout"
# File.write(t.name, insert_warning(erb.result(binding), t.prerequisites.first))
# end
# end
# end

namespace :gen do
desc "Generate architecture files from layouts"
task :arch do
# Generate CSR files
(3..31).each do |hpm_num|
Rake::Task["#{$resolver.std_path}/csr/Zihpm/mhpmcounter#{hpm_num}.yaml"].invoke
Rake::Task["#{$resolver.std_path}/csr/Zihpm/mhpmcounter#{hpm_num}h.yaml"].invoke
Expand All @@ -382,6 +464,29 @@ namespace :gen do
(0..15).each do |pmpcfg_num|
Rake::Task["#{$resolver.std_path}/csr/I/pmpcfg#{pmpcfg_num}.yaml"].invoke
end

# Generate AMO instruction files
%w[amoadd amoand amomax amomaxu amomin amominu amoor amoswap amoxor].each do |op|
["b", "h", "w", "d"].each do |size|
extension_dir = %w[b h].include?(size) ? "Zabha" : "Zaamo"
["", ".aq", ".rl", ".aqrl"].each do |suffix|
Rake::Task["#{$resolver.std_path}/inst/#{extension_dir}/#{op}.#{size}#{suffix}.yaml"].invoke
end
end
end

# Generate AMOCAS instruction files
["b", "h"].each do |size|
["", ".aq", ".rl", ".aqrl"].each do |suffix|
Rake::Task["#{$resolver.std_path}/inst/Zabha/amocas.#{size}#{suffix}.yaml"].invoke
end
end

# ["w", "d", "q"].each do |size|
# ["", ".aq", ".rl", ".aqrl"].each do |suffix|
# Rake::Task["#{$resolver.std_path}/inst/Zacas/amocas.#{size}#{suffix}.yaml"].invoke
# end
# end
end
end

Expand Down
Loading
Loading