From fef4b7ba63fc42cca7e85c1129897e896209ad7c Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Sun, 19 Mar 2023 22:10:03 +0900 Subject: [PATCH] [VM][MEMORY] . --- source/src/vm/memory.cpp | 5 +++-- source/src/vm/memory.h | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/source/src/vm/memory.cpp b/source/src/vm/memory.cpp index b85b6080e..a0e963342 100644 --- a/source/src/vm/memory.cpp +++ b/source/src/vm/memory.cpp @@ -15,6 +15,7 @@ #define ADDR_MASK (space - 1) #define BANK_MASK (bank_size - 1) + void MEMORY::initialize() { __UNLIKELY_IF((rd_table == NULL) || (wr_table == NULL)) { @@ -559,7 +560,7 @@ void MEMORY::copy_table_w(uint32_t to, uint32_t start, uint32_t end) const uint32_t start_bank = start >> addr_shift; const uint32_t end_bank = end >> addr_shift; uint32_t to_bank = to >> addr_shift; - const uint64_t blocks = space / bank_size; + const uint64_t blocks = space >> addr_shift; for(uint64_t i = start_bank; i <= end_bank; i++) { if(to_bank >= blocks) break; @@ -578,7 +579,7 @@ void MEMORY::copy_table_r(uint32_t to, uint32_t start, uint32_t end) const uint32_t start_bank = start >> addr_shift; const uint32_t end_bank = end >> addr_shift; uint32_t to_bank = to >> addr_shift; - const uint64_t blocks = space / bank_size; + const uint64_t blocks = space >> addr_shift; for(uint64_t i = start_bank; i <= end_bank; i++) { if(to_bank >= blocks) break; diff --git a/source/src/vm/memory.h b/source/src/vm/memory.h index 135df067a..21f5344e5 100644 --- a/source/src/vm/memory.h +++ b/source/src/vm/memory.h @@ -64,7 +64,9 @@ public: // unique functions inline int get_bank(uint32_t addr) const { - return (addr & (space - 1)) >> addr_shift; + const uint64_t _mask = space - 1; + + return (uint32_t)(((uint64_t)addr & _mask) >> addr_shift); } inline int bus_access_times_16(uint32_t addr) const { @@ -136,7 +138,7 @@ public: bank_t *rd_table; bank_t *wr_table; - uint32_t space; + uint64_t space; uint32_t bank_size; int bus_width; }; -- 2.11.0