mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 06:03:23 +00:00
Respect \A_SIGNED for $shift
This reflects the behaviour of $shr/$shl, which sign-extend their A operands to the size of their output, then do a logical shift (shift in 0-bits).
This commit is contained in:
parent
22765ef0a5
commit
928fd40c2e
7 changed files with 61 additions and 65 deletions
|
@ -750,21 +750,19 @@ bool dump_cell_expr(std::ostream &f, std::string indent, RTLIL::Cell *cell)
|
|||
f << stringf(" = ");
|
||||
if (cell->getParam(ID::B_SIGNED).as_bool())
|
||||
{
|
||||
f << stringf("$signed(");
|
||||
dump_sigspec(f, cell->getPort(ID::B));
|
||||
f << stringf(")");
|
||||
dump_cell_expr_port(f, cell, "B", true);
|
||||
f << stringf(" < 0 ? ");
|
||||
dump_sigspec(f, cell->getPort(ID::A));
|
||||
dump_cell_expr_port(f, cell, "A", true);
|
||||
f << stringf(" << - ");
|
||||
dump_sigspec(f, cell->getPort(ID::B));
|
||||
f << stringf(" : ");
|
||||
dump_sigspec(f, cell->getPort(ID::A));
|
||||
dump_cell_expr_port(f, cell, "A", true);
|
||||
f << stringf(" >> ");
|
||||
dump_sigspec(f, cell->getPort(ID::B));
|
||||
}
|
||||
else
|
||||
{
|
||||
dump_sigspec(f, cell->getPort(ID::A));
|
||||
dump_cell_expr_port(f, cell, "A", true);
|
||||
f << stringf(" >> ");
|
||||
dump_sigspec(f, cell->getPort(ID::B));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue