Skip to content

Commit

Permalink
Get tests working again
Browse files Browse the repository at this point in the history
  • Loading branch information
dhower-qc committed Dec 11, 2024
1 parent 667c999 commit a417f66
Show file tree
Hide file tree
Showing 10 changed files with 160 additions and 440 deletions.
6 changes: 3 additions & 3 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ require "ruby-progressbar"
require "yard"
require "minitest/test_task"

require_relative $root / "lib" / "specification"
require_relative $root / "lib" / "architecture"

directory "#{$root}/.stamps"

Expand Down Expand Up @@ -118,7 +118,7 @@ namespace :test do
end
task schema: "gen:resolved_arch" do
puts "Checking arch files against schema.."
Specification.new("#{$root}/resolved_arch").validate(show_progress: true)
Architecture.new("#{$root}/resolved_arch").validate(show_progress: true)
puts "All files validate against their schema"
end
task idl: ["gen:resolved_arch", "#{$root}/.stamps/resolve-rv32.stamp", "#{$root}/.stamps/resolve-rv64.stamp"] do
Expand Down Expand Up @@ -293,7 +293,7 @@ namespace :test do
Rake::Task["test:idl_compiler"].invoke
Rake::Task["test:lib"].invoke
Rake::Task["test:schema"].invoke
Rake::Task["test:idl_model"].invoke
Rake::Task["test:idl"].invoke
end

desc <<~DESC
Expand Down
2 changes: 1 addition & 1 deletion arch/certificate_model/MockCertificateModel.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ extensions:
- "profile/MP-S-64.yaml#/extensions"
I:
note: Just added this note to I extension
MockExt:
Xmock:
presence: mandatory
parameters:
MOCK_ENUM_2_INTS: {}
Expand Down
156 changes: 0 additions & 156 deletions arch/ext/MockExt.yaml

This file was deleted.

18 changes: 9 additions & 9 deletions lib/arch_def.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
require "tilt"

require_relative "config"
require_relative "specification"
require_relative "architecture"

require_relative "idl"
require_relative "idl/passes/find_return_values"
Expand Down Expand Up @@ -229,7 +229,7 @@ def type_check(show_progress: true, io: $stdout)
inst.type_checked_operation_ast(@idl_compiler, @symtab, 32) if inst.rv32?
elsif @mxlen == 64
inst.type_checked_operation_ast(@idl_compiler, @symtab, 64) if inst.rv64?
inst.type_checked_operation_ast(@idl_compiler, @symtab, 32) if @config.possible_xlens.include?(32) && inst.rv32?
inst.type_checked_operation_ast(@idl_compiler, @symtab, 32) if possible_xlens.include?(32) && inst.rv32?
end
end

Expand All @@ -241,26 +241,26 @@ def type_check(show_progress: true, io: $stdout)
csrs.each do |csr|
progressbar.increment if show_progress
if csr.has_custom_sw_read?
if (@config.possible_xlens.include?(32) && csr.defined_in_base32?) || (@config.possible_xlens.include?(64) && csr.defined_in_base64?)
if (possible_xlens.include?(32) && csr.defined_in_base32?) || (possible_xlens.include?(64) && csr.defined_in_base64?)
csr.type_checked_sw_read_ast(@symtab)
end
end
csr.fields.each do |field|
unless field.type_ast(@symtab).nil?
if ((@config.possible_xlens.include?(32) && csr.defined_in_base32? && field.defined_in_base32?) ||
(@config.possible_xlens.include?(64) && csr.defined_in_base64? && field.defined_in_base64?))
if ((possible_xlens.include?(32) && csr.defined_in_base32? && field.defined_in_base32?) ||
(possible_xlens.include?(64) && csr.defined_in_base64? && field.defined_in_base64?))
field.type_checked_type_ast(@symtab)
end
end
unless field.reset_value_ast(@symtab).nil?
if ((@config.possible_xlens.include?(32) && csr.defined_in_base32? && field.defined_in_base32?) ||
(@config.possible_xlens.include?(64) && csr.defined_in_base64? && field.defined_in_base64?))
if ((possible_xlens.include?(32) && csr.defined_in_base32? && field.defined_in_base32?) ||
(possible_xlens.include?(64) && csr.defined_in_base64? && field.defined_in_base64?))
field.type_checked_reset_value_ast(@symtab) if csr.defined_in_base32? && field.defined_in_base32?
end
end
unless field.sw_write_ast(@symtab).nil?
field.type_checked_sw_write_ast(@symtab, 32) if @config.possible_xlens.include?(32) && csr.defined_in_base32? && field.defined_in_base32?
field.type_checked_sw_write_ast(@symtab, 64) if @config.possible_xlens.include?(64) && csr.defined_in_base64? && field.defined_in_base64?
field.type_checked_sw_write_ast(@symtab, 32) if possible_xlens.include?(32) && csr.defined_in_base32? && field.defined_in_base32?
field.type_checked_sw_write_ast(@symtab, 64) if possible_xlens.include?(64) && csr.defined_in_base64? && field.defined_in_base64?
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/arch_obj_models/portfolio.rb
Original file line number Diff line number Diff line change
Expand Up @@ -380,8 +380,8 @@ def all_in_scope_exts_with_param(param)
end

if found
# Only add extensions that exist in this portfolio.
exts << ext
# Only add extensions that exist in this portfolio.
exts << ext
end
end

Expand Down
11 changes: 10 additions & 1 deletion lib/idl.rb
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,16 @@ def compile_expression(expression, symtab, pass_error: false)

ast = m.to_ast
ast.set_input_file("[EXPRESSION]", 0)
ast.freeze_tree(symtab)
value_result = ast.value_try do
ast.freeze_tree(symtab)
end
if value_result == :unknown_value
raise AstNode::TypeError, "Bad literal value" if pass_error

warn "Compiling #{expression}"
warn "Bad literal value"
exit 1
end
begin
ast.type_check(symtab)
rescue AstNode::TypeError => e
Expand Down
4 changes: 3 additions & 1 deletion lib/idl/ast.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4357,8 +4357,10 @@ def type(symtab)
signed = ::Regexp.last_match(4)
width = width(symtab)
type_error("integer width must be positive") unless width.is_a?(Integer) && width.positive?
qualifiers = signed == "s" ? [:signed, :const] : [:const]
@type = Type.new(:bits, width: width, qualifiers:)
@type = Type.new(:bits, width:, qualifiers:)
when /^0([bdx]?)([0-9a-fA-F]*)(s?)$/
# C++-style literal
signed = ::Regexp.last_match(3)
Expand Down
9 changes: 3 additions & 6 deletions lib/idl/tests/test_expressions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,10 @@ def test_that_integer_literals_give_correct_values
assert_equal(-13, ast.value(@symtab))

idl = "-4'sb1101"
ast = @compiler.compile_expression(idl, @symtab)
assert_equal 3, ast.value(@symtab)
assert_raises(Idl::AstNode::TypeError) { @compiler.compile_expression(idl, @symtab, pass_error: true) }

idl = "4'sb1101"
ast = @compiler.compile_expression(idl, @symtab)
assert_equal(-3, ast.value(@symtab))
assert_raises(Idl::AstNode::TypeError) { @compiler.compile_expression(idl, @symtab, pass_error: true) }

idl = "32'h80000000"
ast = @compiler.compile_expression(idl, @symtab)
Expand All @@ -124,7 +122,7 @@ def test_that_integer_literals_give_correct_values
assert_equal 13, ast.value(@symtab)

# compilation error: 300 does not fit in 8 bits
idl = "'h1_0000_0000"
idl = "8'h1_0000_0000"
assert_raises(Idl::AstNode::TypeError) { @compiler.compile_expression(idl, @symtab, pass_error: true) }

# 3 decimal: the literal is 13, unsigned, in 4-bits. when negated, the sign bit is lost
Expand All @@ -144,5 +142,4 @@ def test_that_integer_literals_give_correct_values
idl = "4'hff"
assert_raises(Idl::AstNode::TypeError) { @compiler.compile_expression(idl, @symtab, pass_error: true) }
end

end
Loading

0 comments on commit a417f66

Please sign in to comment.