diff options
author | Parshintsev Anatoly <anatoly.parshintsev@syntacore.com> | 2022-12-29 14:09:08 +0300 |
---|---|---|
committer | Parshintsev Anatoly <anatoly.parshintsev@syntacore.com> | 2023-01-09 19:16:44 +0300 |
commit | fcf61f000804a05bc06d708152c15a527c6461cb (patch) | |
tree | c17255e731841ff597bb3dcf689863e895bc6741 /spike_main | |
parent | 1e6869c17e23a47f9cf62a21eecda32027acebd5 (diff) | |
download | riscv-isa-sim-fcf61f000804a05bc06d708152c15a527c6461cb.zip riscv-isa-sim-fcf61f000804a05bc06d708152c15a527c6461cb.tar.gz riscv-isa-sim-fcf61f000804a05bc06d708152c15a527c6461cb.tar.bz2 |
simplify merge_mem_regions by utilizing get_inclusive_end() of mem_cfg_t
this is to properly handle potential 64-bit overflow in (base + size)
expression
Diffstat (limited to 'spike_main')
-rw-r--r-- | spike_main/spike.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/spike_main/spike.cc b/spike_main/spike.cc index 59dbbf3..5a3d995 100644 --- a/spike_main/spike.cc +++ b/spike_main/spike.cc @@ -139,9 +139,9 @@ static mem_cfg_t merge_mem_regions(const mem_cfg_t& L, const mem_cfg_t& R) // one can merge only intersecting regions 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.get_size() - 1, R.get_base() + R.get_size() - 1); - const reg_t merged_size = merged_end_incl - merged_base + 1; + const auto merged_base = std::min(L.get_base(), R.get_base()); + const auto merged_end_incl = std::max(L.get_inclusive_end(), R.get_inclusive_end()); + const auto merged_size = merged_end_incl - merged_base + 1; return mem_cfg_t(merged_base, merged_size); } |