From 2d6d6a8da1dd89a606bff4099e7b84404deb6e07 Mon Sep 17 00:00:00 2001 From: "N. Engelhardt" Date: Mon, 2 Oct 2023 17:29:09 +0200 Subject: [PATCH] fix handling a_width != y_width --- kernel/celledges.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/kernel/celledges.cc b/kernel/celledges.cc index 0288b62e2..fc381f35c 100644 --- a/kernel/celledges.cc +++ b/kernel/celledges.cc @@ -174,24 +174,25 @@ void demux_op(AbstractCellEdgesDatabase *db, RTLIL::Cell *cell) void shift_op(AbstractCellEdgesDatabase *db, RTLIL::Cell *cell) { - int width = GetSize(cell->getPort(ID::A)); + int a_width = GetSize(cell->getPort(ID::A)); int b_width = GetSize(cell->getPort(ID::B)); + int y_width = GetSize(cell->getPort(ID::Y)); - for (int i = 0; i < width; i++){ + for (int i = 0; i < y_width; i++){ for (int k = 0; k < b_width; k++) db->add_edge(cell, ID::B, k, ID::Y, i, -1); if (cell->type.in(ID($shl), ID($sshl))) { - for (int k = i; k >= 0; k--) + for (int k = min(i, a_width); k >= 0; k--) db->add_edge(cell, ID::A, k, ID::Y, i, -1); } if (cell->type.in(ID($shr), ID($sshr))) - for (int k = i; k < width; k++) + for (int k = i; k < a_width; k++) db->add_edge(cell, ID::A, k, ID::Y, i, -1); if (cell->type.in(ID($shift), ID($shiftx))) - for (int k = 0; k < width; k++) + for (int k = 0; k < a_width; k++) db->add_edge(cell, ID::A, k, ID::Y, i, -1); } }