summaryrefslogtreecommitdiff
path: root/aisa/simple-models.cpp
diff options
context:
space:
mode:
authorJulian Blake Kongslie2022-07-02 13:45:09 -0700
committerJulian Blake Kongslie2022-07-02 13:45:09 -0700
commitc72951a36d6cb9775dc1ecd9bc26bc13e796f10c (patch)
tree5a8fe196beba5c7c674d1b3d627c9a0beac849f5 /aisa/simple-models.cpp
parentTrivial code reorg. (diff)
downloadissim-c72951a36d6cb9775dc1ecd9bc26bc13e796f10c.tar.xz
Dropping the async interface, and adding some real uarch.
Diffstat (limited to 'aisa/simple-models.cpp')
-rw-r--r--aisa/simple-models.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/aisa/simple-models.cpp b/aisa/simple-models.cpp
new file mode 100644
index 0000000..b69dcb7
--- /dev/null
+++ b/aisa/simple-models.cpp
@@ -0,0 +1,49 @@
1#include <algorithm>
2#include <deque>
3#include <memory>
4#include <optional>
5#include <utility>
6#include <vector>
7
8#include "aisa/aisa.h"
9#include "aisa/simple-models.h"
10
11namespace aisa {
12
13 bool TaskStack::pop_task()
14 {
15 if (tasks.empty())
16 return false;
17 tasks.pop_back();
18 return true;
19 }
20
21 bool TaskStack::push_task(std::unique_ptr<const Task> &&task)
22 {
23 tasks.emplace_back(std::move(task));
24 return true;
25 }
26
27 std::optional<const Task *> TaskStack::top_task()
28 {
29 if (tasks.empty())
30 return {};
31 return tasks.back().get();
32 }
33
34 std::optional<regval_t> VectorRF::load_reg(regnum_t rn) const
35 {
36 if (rf.size() <= rn)
37 return {};
38 return rf[rn];
39 }
40
41 bool VectorRF::store_reg(regnum_t rn, regval_t rv)
42 {
43 if (rf.size() <= rn)
44 rf.resize(rn + 1);
45 rf[rn] = rv;
46 return true;
47 }
48
49}