mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-13 04:28:18 +00:00
Fix btor back-end shift handling
This commit is contained in:
parent
133a0f4978
commit
cc119b5232
|
@ -114,7 +114,7 @@ struct BtorWorker
|
||||||
cell_recursion_guard.insert(cell);
|
cell_recursion_guard.insert(cell);
|
||||||
btorf_push(log_id(cell));
|
btorf_push(log_id(cell));
|
||||||
|
|
||||||
if (cell->type.in("$add", "$sub", "$and", "$or", "$xor", "$xnor", "$shl", "$sshl", "$shr", "$sshr",
|
if (cell->type.in("$add", "$sub", "$and", "$or", "$xor", "$xnor", "$shl", "$sshl", "$shr", "$sshr", "$shift", "$shiftx",
|
||||||
"$_AND_", "$_NAND_", "$_OR_", "$_NOR_", "$_XOR_", "$_XNOR_"))
|
"$_AND_", "$_NAND_", "$_OR_", "$_NOR_", "$_XOR_", "$_XNOR_"))
|
||||||
{
|
{
|
||||||
string btor_op;
|
string btor_op;
|
||||||
|
@ -123,6 +123,7 @@ struct BtorWorker
|
||||||
if (cell->type.in("$shl", "$sshl")) btor_op = "sll";
|
if (cell->type.in("$shl", "$sshl")) btor_op = "sll";
|
||||||
if (cell->type == "$shr") btor_op = "srl";
|
if (cell->type == "$shr") btor_op = "srl";
|
||||||
if (cell->type == "$sshr") btor_op = "sra";
|
if (cell->type == "$sshr") btor_op = "sra";
|
||||||
|
// if (cell->type.in("$shift", "$shiftx")) btor_op = "shift";
|
||||||
if (cell->type.in("$and", "$_AND_")) btor_op = "and";
|
if (cell->type.in("$and", "$_AND_")) btor_op = "and";
|
||||||
if (cell->type.in("$or", "$_OR_")) btor_op = "or";
|
if (cell->type.in("$or", "$_OR_")) btor_op = "or";
|
||||||
if (cell->type.in("$xor", "$_XOR_")) btor_op = "xor";
|
if (cell->type.in("$xor", "$_XOR_")) btor_op = "xor";
|
||||||
|
@ -138,10 +139,11 @@ struct BtorWorker
|
||||||
bool a_signed = cell->hasParam("\\A_SIGNED") ? cell->getParam("\\A_SIGNED").as_bool() : false;
|
bool a_signed = cell->hasParam("\\A_SIGNED") ? cell->getParam("\\A_SIGNED").as_bool() : false;
|
||||||
bool b_signed = cell->hasParam("\\B_SIGNED") ? cell->getParam("\\B_SIGNED").as_bool() : false;
|
bool b_signed = cell->hasParam("\\B_SIGNED") ? cell->getParam("\\B_SIGNED").as_bool() : false;
|
||||||
|
|
||||||
if (cell->type.in("$shl", "$shr")) {
|
if (cell->type.in("$shl", "$sshl", "$shr", "$sshr"))
|
||||||
a_signed = false;
|
|
||||||
b_signed = false;
|
b_signed = false;
|
||||||
}
|
|
||||||
|
if (cell->type == "$sshr" && !a_signed)
|
||||||
|
btor_op = "srl";
|
||||||
|
|
||||||
int sid = get_bv_sid(width);
|
int sid = get_bv_sid(width);
|
||||||
int nid_a = get_sig_nid(cell->getPort("\\A"), width, a_signed);
|
int nid_a = get_sig_nid(cell->getPort("\\A"), width, a_signed);
|
||||||
|
|
|
@ -6,7 +6,7 @@ rm -rf test_cells.tmp
|
||||||
mkdir -p test_cells.tmp
|
mkdir -p test_cells.tmp
|
||||||
cd test_cells.tmp
|
cd test_cells.tmp
|
||||||
|
|
||||||
../../../yosys -p 'test_cell -n 5 -w test all /$alu /$fa /$lcu /$lut /$sop /$macc /$mul /$div /$mod /$shl /$shr /$sshl /$sshr /$shift /$shiftx'
|
../../../yosys -p 'test_cell -n 5 -w test all /$alu /$fa /$lcu /$lut /$sop /$macc /$mul /$div /$mod /$shift /$shiftx'
|
||||||
|
|
||||||
for fn in test_*.il; do
|
for fn in test_*.il; do
|
||||||
../../../yosys -p "
|
../../../yosys -p "
|
||||||
|
|
Loading…
Reference in a new issue