mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-27 02:45:52 +00:00
verilog: fix size and signedness of array querying functions
genrtlil.cc and simplify.cc had inconsistent and slightly broken handling of signedness for array querying functions. These functions are defined to return a signed result. Simplify always produced an unsigned and genrtlil always a signed 32-bit result ignoring the context. Includes tests for the the relvant edge cases for context dependent conversions.
This commit is contained in:
parent
ce24208a8b
commit
4bfaaea0d5
4 changed files with 56 additions and 3 deletions
|
@ -1089,8 +1089,7 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *foun
|
|||
break;
|
||||
}
|
||||
if (str == "\\$size" || str == "\\$bits" || str == "\\$high" || str == "\\$low" || str == "\\$left" || str == "\\$right") {
|
||||
width_hint = 32;
|
||||
sign_hint = true;
|
||||
width_hint = max(width_hint, 32);
|
||||
break;
|
||||
}
|
||||
if (current_scope.count(str))
|
||||
|
|
|
@ -3450,7 +3450,7 @@ skip_dynamic_range_lvalue_expansion:;
|
|||
else {
|
||||
result = width * mem_depth;
|
||||
}
|
||||
newNode = mkconst_int(result, false);
|
||||
newNode = mkconst_int(result, true);
|
||||
goto apply_newNode;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue