From bbaf58c9fd0f485266d86868dc35f1d2be3589cd Mon Sep 17 00:00:00 2001 From: Julian Blake Kongslie Date: Sun, 26 Jun 2022 16:24:13 -0700 Subject: Significant changes, and a working "ISA" that just computes fib(n). --- aisa/aisa.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) (limited to 'aisa/aisa.h') diff --git a/aisa/aisa.h b/aisa/aisa.h index 3c260c1..4488529 100644 --- a/aisa/aisa.h +++ b/aisa/aisa.h @@ -1,20 +1,67 @@ #pragma once #include +#include #include +#include #include #include namespace aisa { + using addr_t = std::uint64_t; + using byte_t = std::uint8_t; using regnum_t = std::uint_fast64_t; using regval_t = std::uint64_t; + struct Task; + + struct ISA { + virtual ~ISA() { } + + virtual std::pair, regval_t> initial_task() const = 0; + }; + + struct Step; + + struct Task { + regnum_t environment; + + virtual ~Task() { } + + virtual std::string disasm() const = 0; + + virtual std::optional, regval_t>> step(regval_t environment_val) const { return {}; } + }; + + struct MemInfo { + addr_t physical_addr; + addr_t size; + }; + + struct Wires { + std::vector source_vals; + std::vector memory_val; + bool aborted = false; + std::vector destination_vals; + std::optional, regval_t>> new_task; + }; + + enum class MOp { + NONE, + LOAD, + STORE, + }; + struct Step { std::optional> predicate; std::vector source_regs; std::vector destination_regs; + virtual ~Step() { } + + virtual std::string disasm(const Wires *w = nullptr) const = 0; + std::optional predicate_reg() const { if (predicate.has_value()) @@ -29,7 +76,10 @@ namespace aisa { return {}; } - virtual std::vector compute_destinations(const std::vector &source_vals) const = 0; + MOp mop = MOp::NONE; + + virtual MemInfo meminfo(const Wires &wires) const { return {}; } + virtual void evaluate(Wires &wires) const { }; }; } -- cgit v1.2.3