diff options
Diffstat (limited to 'aisa/simple-models.h')
| -rw-r--r-- | aisa/simple-models.h | 39 |
1 files changed, 5 insertions, 34 deletions
diff --git a/aisa/simple-models.h b/aisa/simple-models.h index 62b5388..a94f010 100644 --- a/aisa/simple-models.h +++ b/aisa/simple-models.h | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | #include <map> | 7 | #include <map> |
| 8 | #include <memory> | 8 | #include <memory> |
| 9 | #include <optional> | 9 | #include <optional> |
| 10 | #include <utility> | ||
| 11 | #include <vector> | 10 | #include <vector> |
| 12 | 11 | ||
| 13 | #include "aisa/aisa.h" | 12 | #include "aisa/aisa.h" |
| @@ -51,45 +50,17 @@ namespace aisa { | |||
| 51 | struct TaskStack { | 50 | struct TaskStack { |
| 52 | std::deque<std::unique_ptr<const Task>> tasks; | 51 | std::deque<std::unique_ptr<const Task>> tasks; |
| 53 | 52 | ||
| 54 | bool pop_task() | 53 | bool pop_task(); |
| 55 | { | 54 | bool push_task(std::unique_ptr<const Task> &&task); |
| 56 | if (tasks.empty()) | ||
| 57 | return false; | ||
| 58 | tasks.pop_back(); | ||
| 59 | return true; | ||
| 60 | } | ||
| 61 | |||
| 62 | bool push_task(std::unique_ptr<const Task> &&task) | ||
| 63 | { | ||
| 64 | tasks.emplace_back(std::move(task)); | ||
| 65 | return true; | ||
| 66 | } | ||
| 67 | 55 | ||
| 68 | std::optional<const Task *> top_task() | 56 | std::optional<const Task *> top_task(); |
| 69 | { | ||
| 70 | if (tasks.empty()) | ||
| 71 | return {}; | ||
| 72 | return tasks.back().get(); | ||
| 73 | } | ||
| 74 | }; | 57 | }; |
| 75 | 58 | ||
| 76 | struct VectorRF { | 59 | struct VectorRF { |
| 77 | std::vector<std::optional<regval_t>> rf; | 60 | std::vector<std::optional<regval_t>> rf; |
| 78 | 61 | ||
| 79 | std::optional<regval_t> load_reg(regnum_t rn) const | 62 | std::optional<regval_t> load_reg(regnum_t rn) const; |
| 80 | { | 63 | bool store_reg(regnum_t rn, regval_t rv); |
| 81 | if (rf.size() <= rn) | ||
| 82 | return {}; | ||
| 83 | return rf[rn]; | ||
| 84 | } | ||
| 85 | |||
| 86 | bool store_reg(regnum_t rn, regval_t rv) | ||
| 87 | { | ||
| 88 | if (rf.size() <= rn) | ||
| 89 | rf.resize(rn + 1); | ||
| 90 | rf[rn] = rv; | ||
| 91 | return true; | ||
| 92 | } | ||
| 93 | }; | 64 | }; |
| 94 | 65 | ||
| 95 | } | 66 | } |
