File tree Expand file tree Collapse file tree 2 files changed +16
-4
lines changed
Expand file tree Collapse file tree 2 files changed +16
-4
lines changed Original file line number Diff line number Diff line change @@ -402,10 +402,20 @@ void sim_t::set_rom()
402402}
403403
404404char * sim_t::addr_to_mem (reg_t paddr) {
405- auto desc = bus.find_device (paddr >> PGSHIFT << PGSHIFT, PGSIZE);
406- if (auto mem = dynamic_cast <abstract_mem_t *>(desc.second ))
407- return mem->contents (paddr - desc.first );
408- return NULL ;
405+ auto page_offset = paddr % PGSIZE;
406+ auto page_addr = paddr - page_offset;
407+
408+ if (auto it = addr_to_mem_cache.find (page_addr); it != addr_to_mem_cache.end ())
409+ return it->second + page_offset;
410+
411+ auto desc = bus.find_device (page_addr, PGSIZE);
412+ if (auto mem = dynamic_cast <abstract_mem_t *>(desc.second )) {
413+ auto res = mem->contents (page_addr - desc.first );
414+ addr_to_mem_cache.insert ({page_addr, res});
415+ return res + page_offset;
416+ }
417+
418+ return nullptr ;
409419}
410420
411421const char * sim_t::get_symbol (uint64_t paddr)
Original file line number Diff line number Diff line change 1313#include < fesvr/htif.h>
1414#include < vector>
1515#include < map>
16+ #include < unordered_map>
1617#include < string>
1718#include < memory>
1819#include < sys/types.h>
@@ -73,6 +74,7 @@ class sim_t : public htif_t, public simif_t
7374 std::vector<std::pair<reg_t , abstract_mem_t *>> mems;
7475 std::vector<processor_t *> procs;
7576 std::map<size_t , processor_t *> harts;
77+ std::unordered_map<reg_t , char *> addr_to_mem_cache;
7678 std::pair<reg_t , reg_t > initrd_range;
7779 std::string dts;
7880 std::string dtb;
You can’t perform that action at this time.
0 commit comments