From c72951a36d6cb9775dc1ecd9bc26bc13e796f10c Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sat, 2 Jul 2022 13:45:09 -0700 Subject: Dropping the async interface, and adding some real uarch. --- fib/fib.cpp | 51 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 14 deletions(-) (limited to 'fib/fib.cpp') diff --git a/fib/fib.cpp b/fib/fib.cpp index 8ff7718..8e0cdf2 100644 --- a/fib/fib.cpp +++ b/fib/fib.cpp @@ -225,12 +225,39 @@ namespace fib { std::optional, aisa::regval_t>> step(aisa::regval_t env) const override { switch (env) { - case 0: return {{std::make_unique>(Reg::A, Reg::PC), env+1}}; - case 1: return {{std::make_unique(Reg::PC, Reg::PC, 1), env+1}}; - case 2: return {{std::make_unique>(Reg::B, Reg::PC), env+1}}; - case 3: return {{std::make_unique(Reg::AREG, Reg::PC, 1), env+1}}; - case 4: return {{std::make_unique(Reg::Q, Reg::A, Reg::B), env+1}}; - case 5: return {{std::make_unique>(Reg::AREG, Reg::Q), env+1}}; + case 0: return {{std::make_unique(Reg::AREG, Reg::PC), env+1}}; + case 1: return {{std::make_unique>(Reg::A, Reg::AREG), env+1}}; + case 2: return {{std::make_unique(Reg::AREG, Reg::AREG, 1), env+1}}; + case 3: return {{std::make_unique>(Reg::B, Reg::AREG), env+1}}; + case 4: return {{std::make_unique(Reg::AREG, Reg::AREG, 1), env+1}}; + case 5: return {{std::make_unique(Reg::Q, Reg::A, Reg::B), env+1}}; + case 6: return {{std::make_unique>(Reg::AREG, Reg::Q), env+1}}; + } + + return {}; + } + }; + + template struct TaskInit : public aisa::Task { + TaskInit() + { + environment = Reg::ENV_INIT; + } + + std::string disasm() const override + { + return "init"; + } + + std::optional, aisa::regval_t>> step(aisa::regval_t env) const override + { + switch(env) { + case 0: return {{std::make_unique(Reg::AREG, 0), env+1}}; + case 1: return {{std::make_unique(Reg::ATMP, 0), env+1}}; + case 2: return {{std::make_unique>(Reg::AREG, Reg::ATMP), env+1}}; + case 3: return {{std::make_unique(Reg::AREG, 1), env+1}}; + case 4: return {{std::make_unique(Reg::ATMP, 1), env+1}}; + case 5: return {{std::make_unique>(Reg::AREG, Reg::ATMP), env+1}}; } return {}; @@ -251,14 +278,10 @@ namespace fib { std::optional, aisa::regval_t>> step(aisa::regval_t env) const override { switch (env) { - case 0: return {{std::make_unique(Reg::PC, 0), env+1}}; - case 1: return {{std::make_unique(Reg::AREG, 0), env+1}}; - case 2: return {{std::make_unique(Reg::ATMP, 0), env+1}}; - case 3: return {{std::make_unique>(Reg::AREG, Reg::ATMP), env+1}}; - case 4: return {{std::make_unique(Reg::AREG, 1), env+1}}; - case 5: return {{std::make_unique(Reg::ATMP, 1), env+1}}; - case 6: return {{std::make_unique>(Reg::AREG, Reg::ATMP), env+1}}; - case 7: return {{std::make_unique>>(), env}}; + case 0: return {{std::make_unique>>(), env+1}}; + case 1: return {{std::make_unique(Reg::PC, 0), env+1}}; + case 2: return {{std::make_unique>>(), env+1}}; + case 3: return {{std::make_unique(Reg::PC, Reg::PC, 1), env-1}}; } return {}; -- cgit v1.2.3