From 4e6ca7760f801ce5ea16c6ea9be3ad4a86aa3b1d Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sat, 21 Feb 2015 12:15:41 +0100 Subject: Replaced ezDefaultSAT with ezSatPtr --- kernel/register.cc | 14 ++++++++++++++ kernel/satgen.h | 32 +++++++++++++++++++++++++++++++- kernel/yosys.h | 1 + 3 files changed, 46 insertions(+), 1 deletion(-) (limited to 'kernel') diff --git a/kernel/register.cc b/kernel/register.cc index cdba4c36f..af1cb77b5 100644 --- a/kernel/register.cc +++ b/kernel/register.cc @@ -18,6 +18,8 @@ */ #include "kernel/yosys.h" +#include "kernel/satgen.h" + #include #include #include @@ -691,6 +693,18 @@ struct EchoPass : public Pass { log("echo %s\n", echo_mode ? "on" : "off"); } } EchoPass; + +SatSolver *yosys_satsolver_list; +SatSolver *yosys_satsolver; + +struct MinisatSatSolver : public SatSolver { + MinisatSatSolver() : SatSolver("minisat") { + yosys_satsolver = this; + } + virtual ezSAT *create() YS_OVERRIDE { + return new ezMiniSAT(); + } +} MinisatSatSolver; YOSYS_NAMESPACE_END diff --git a/kernel/satgen.h b/kernel/satgen.h index 2f5efe674..093d248d4 100644 --- a/kernel/satgen.h +++ b/kernel/satgen.h @@ -29,7 +29,37 @@ YOSYS_NAMESPACE_BEGIN -typedef ezMiniSAT ezDefaultSAT; +// defined in kernel/register.cc +extern struct SatSolver *yosys_satsolver_list; +extern struct SatSolver *yosys_satsolver; + +struct SatSolver +{ + string name; + SatSolver *next; + virtual ezSAT *create() = 0; + + SatSolver(string name) : name(name) { + next = yosys_satsolver_list; + yosys_satsolver_list = this; + } + + virtual ~SatSolver() { + auto p = &yosys_satsolver_list; + while (*p) { + if (*p == this) + *p = next; + else + p = &(*p)->next; + } + if (yosys_satsolver == this) + yosys_satsolver = yosys_satsolver_list; + } +}; + +struct ezSatPtr : public std::unique_ptr { + ezSatPtr() : unique_ptr(yosys_satsolver->create()) { } +}; struct SatGen { diff --git a/kernel/yosys.h b/kernel/yosys.h index 47275ecd4..467d2074f 100644 --- a/kernel/yosys.h +++ b/kernel/yosys.h @@ -49,6 +49,7 @@ #include #include #include +#include #include #include -- cgit v1.2.3