aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParshintsev Anatoly <anatoly.parshintsev@syntacore.com>2022-12-29 13:46:56 +0300
committerParshintsev Anatoly <anatoly.parshintsev@syntacore.com>2023-01-09 19:16:44 +0300
commite402a8353d2c4f358198c3bb3de38d40f60c730b (patch)
treeb962179b2be75a485e26b42f0bc966b930ea5d63
parenta606da640b9e5c57bdcc76ef5ec491e7cd54e8a5 (diff)
downloadspike-e402a8353d2c4f358198c3bb3de38d40f60c730b.zip
spike-e402a8353d2c4f358198c3bb3de38d40f60c730b.tar.gz
spike-e402a8353d2c4f358198c3bb3de38d40f60c730b.tar.bz2
implement get_size() getter for mem_cfg_t object
NFT. We also mark `base` and `size` fields as private.
-rw-r--r--ci-tests/testlib.c2
-rw-r--r--riscv/cfg.h5
-rw-r--r--spike_main/spike.cc14
3 files changed, 13 insertions, 8 deletions
diff --git a/ci-tests/testlib.c b/ci-tests/testlib.c
index 243104b..d06277f 100644
--- a/ci-tests/testlib.c
+++ b/ci-tests/testlib.c
@@ -7,7 +7,7 @@ static std::vector<std::pair<reg_t, mem_t*>> make_mems(const std::vector<mem_cfg
std::vector<std::pair<reg_t, mem_t*>> mems;
mems.reserve(layout.size());
for (const auto &cfg : layout) {
- mems.push_back(std::make_pair(cfg.get_base(), new mem_t(cfg.size)));
+ mems.push_back(std::make_pair(cfg.get_base(), new mem_t(cfg.get_size())));
}
return mems;
}
diff --git a/riscv/cfg.h b/riscv/cfg.h
index 1cdeb37..dba0b37 100644
--- a/riscv/cfg.h
+++ b/riscv/cfg.h
@@ -45,6 +45,11 @@ public:
return base;
}
+ reg_t get_size() const {
+ return size;
+ }
+
+private:
reg_t base;
reg_t size;
};
diff --git a/spike_main/spike.cc b/spike_main/spike.cc
index edaee07..8012489 100644
--- a/spike_main/spike.cc
+++ b/spike_main/spike.cc
@@ -121,15 +121,15 @@ static void read_file_bytes(const char *filename,size_t fileoff,
bool sort_mem_region(const mem_cfg_t &a, const mem_cfg_t &b)
{
if (a.get_base() == b.get_base())
- return (a.size < b.size);
+ return (a.get_size() < b.get_size());
else
return (a.get_base() < b.get_base());
}
static bool check_mem_overlap(const mem_cfg_t& L, const mem_cfg_t& R)
{
- const reg_t L_end = L.get_base() + L.size - 1;
- const reg_t R_end = R.get_base() + R.size - 1;
+ const auto L_end = L.get_base() + L.get_size() - 1;
+ const auto R_end = R.get_base() + R.get_size() - 1;
return std::max(L.get_base(), R.get_base()) <= std::min(L_end, R_end);
}
@@ -140,7 +140,7 @@ static mem_cfg_t merge_mem_regions(const mem_cfg_t& L, const mem_cfg_t& R)
assert(check_mem_overlap(L, R));
const reg_t merged_base = std::min(L.get_base(), R.get_base());
- const reg_t merged_end_incl = std::max(L.get_base() + L.size - 1, R.get_base() + R.size - 1);
+ const reg_t merged_end_incl = std::max(L.get_base() + L.get_size() - 1, R.get_base() + R.get_size() - 1);
const reg_t merged_size = merged_end_incl - merged_base + 1;
return mem_cfg_t(merged_base, merged_size);
@@ -216,7 +216,7 @@ static std::vector<mem_cfg_t> parse_mem_layout(const char* arg)
const unsigned long long max_allowed_pa = (1ull << MAX_PADDR_BITS) - 1ull;
assert(max_allowed_pa <= std::numeric_limits<reg_t>::max());
mem_cfg_t mem_region(base, size);
- auto last_pa_region = mem_region.get_base() + mem_region.size - 1;
+ auto last_pa_region = mem_region.get_base() + mem_region.get_size() - 1;
if (last_pa_region > max_allowed_pa) {
int bits_required = 64 - clz(last_pa_region);
fprintf(stderr, "Unsupported memory region "
@@ -224,7 +224,7 @@ static std::vector<mem_cfg_t> parse_mem_layout(const char* arg)
" which requires %d bits of physical address\n"
" The largest accessible physical address "
"is 0x%llX (defined by MAX_PADDR_BITS constant, which is %d)\n",
- mem_region.get_base(), mem_region.size, bits_required,
+ mem_region.get_base(), mem_region.get_size(), bits_required,
max_allowed_pa, MAX_PADDR_BITS);
exit(EXIT_FAILURE);
}
@@ -249,7 +249,7 @@ static std::vector<std::pair<reg_t, mem_t*>> make_mems(const std::vector<mem_cfg
std::vector<std::pair<reg_t, mem_t*>> mems;
mems.reserve(layout.size());
for (const auto &cfg : layout) {
- mems.push_back(std::make_pair(cfg.get_base(), new mem_t(cfg.size)));
+ mems.push_back(std::make_pair(cfg.get_base(), new mem_t(cfg.get_size())));
}
return mems;
}