From fa39227416379527290b5d49fbb77d32890daa52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Povi=C5=A1er?= <povik@cutebit.org>
Date: Wed, 11 Sep 2024 11:01:38 +0200
Subject: [PATCH] aiger2: Support `$pos`

---
 backends/aiger2/aiger.cc | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/backends/aiger2/aiger.cc b/backends/aiger2/aiger.cc
index 64cde2de4..89a23ff3f 100644
--- a/backends/aiger2/aiger.cc
+++ b/backends/aiger2/aiger.cc
@@ -38,7 +38,7 @@ PRIVATE_NAMESPACE_BEGIN
 // TODO
 //#define ARITH_OPS ID($add), ID($sub), ID($lt), ID($le), ID($ge), ID($gt), ID($neg)
 
-#define KNOWN_OPS BITWISE_OPS, REDUCE_OPS, LOGIC_OPS, GATE_OPS /*, ARITH_OPS*/
+#define KNOWN_OPS BITWISE_OPS, REDUCE_OPS, LOGIC_OPS, GATE_OPS, ID($pos) /*, ARITH_OPS*/
 
 template<typename Writer, typename Lit>
 struct Index {
@@ -203,7 +203,7 @@ struct Index {
 				return OR(a, b);
 			else
 				log_abort();
-		} else if (cell->type.in(BITWISE_OPS, GATE_OPS)) {
+		} else if (cell->type.in(BITWISE_OPS, GATE_OPS, ID($pos))) {
 			SigSpec aport = cell->getPort(ID::A);
 			Lit a;
 			if (obit < aport.size()) {
@@ -215,7 +215,7 @@ struct Index {
 					a = Writer::CONST_FALSE;
 			}
 
-			if (cell->type.in(ID($buf), ID($_BUF_))) {
+			if (cell->type.in(ID($buf), ID($pos), ID($_BUF_))) {
 				return a;
 			} else if (cell->type.in(ID($not), ID($_NOT_))) {
 				return NOT(a);