diff options
author | Korey Sewell <ksewell@umich.edu> | 2010-03-23 00:29:10 -0400 |
---|---|---|
committer | Korey Sewell <ksewell@umich.edu> | 2010-03-23 00:29:10 -0400 |
commit | d484e1b334c6fd3f2721a2a4628c2324ed14fd08 (patch) | |
tree | c95594df5ecae29b11262967f3f8b99fca82ca5d /src/mem/ruby/system/MemoryVector.hh | |
parent | 70308bc835035b940efb36d7f335643dfaa39851 (diff) | |
parent | a0651b8f6127c8b7994a165b525e93d87c470d20 (diff) | |
download | gem5-d484e1b334c6fd3f2721a2a4628c2324ed14fd08.tar.xz |
m5merge(2): another merge of regression stats
Diffstat (limited to 'src/mem/ruby/system/MemoryVector.hh')
-rw-r--r-- | src/mem/ruby/system/MemoryVector.hh | 164 |
1 files changed, 84 insertions, 80 deletions
diff --git a/src/mem/ruby/system/MemoryVector.hh b/src/mem/ruby/system/MemoryVector.hh index e450059fd..15cea168d 100644 --- a/src/mem/ruby/system/MemoryVector.hh +++ b/src/mem/ruby/system/MemoryVector.hh @@ -26,8 +26,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef MEMORYVECTOR_H -#define MEMORYVECTOR_H +#ifndef __MEM_RUBY_SYSTEM_MEMORYVECTOR_HH__ +#define __MEM_RUBY_SYSTEM_MEMORYVECTOR_HH__ #include "mem/ruby/common/Address.hh" @@ -36,117 +36,121 @@ class DirectoryMemory; /** * MemoryVector holds memory data (DRAM only) */ -class MemoryVector { - public: - MemoryVector(); - MemoryVector(uint32 size); - ~MemoryVector(); - friend class DirectoryMemory; +class MemoryVector +{ + public: + MemoryVector(); + MemoryVector(uint32 size); + ~MemoryVector(); + friend class DirectoryMemory; - void setSize(uint32 size); // destructive + void setSize(uint32 size); // destructive - void write(const Address & paddr, uint8* data, int len); - uint8* read(const Address & paddr, uint8* data, int len); + void write(const Address & paddr, uint8* data, int len); + uint8* read(const Address & paddr, uint8* data, int len); -private: - uint8* getBlockPtr(const PhysAddress & addr); + private: + uint8* getBlockPtr(const PhysAddress & addr); - uint32 m_size; - uint8** m_pages; - uint32 m_num_pages; - const uint32 m_page_offset_mask; + uint32 m_size; + uint8** m_pages; + uint32 m_num_pages; + const uint32 m_page_offset_mask; }; inline MemoryVector::MemoryVector() - : m_page_offset_mask(4095) + : m_page_offset_mask(4095) { - m_size = 0; - m_num_pages = 0; - m_pages = NULL; + m_size = 0; + m_num_pages = 0; + m_pages = NULL; } inline MemoryVector::MemoryVector(uint32 size) - : m_page_offset_mask(4095) + : m_page_offset_mask(4095) { - setSize(size); + setSize(size); } inline MemoryVector::~MemoryVector() { - for (int i=0; i<m_num_pages; i++) { - if (m_pages[i] != 0) { - delete [] m_pages[i]; + for (int i = 0; i < m_num_pages; i++) { + if (m_pages[i] != 0) { + delete [] m_pages[i]; + } } - } - delete [] m_pages; + delete [] m_pages; } -inline -void MemoryVector::setSize(uint32 size) +inline void +MemoryVector::setSize(uint32 size) { - if (m_pages != NULL){ - for (int i=0; i<m_num_pages; i++) { - if (m_pages[i] != 0) { - delete [] m_pages[i]; - } + if (m_pages != NULL){ + for (int i = 0; i < m_num_pages; i++) { + if (m_pages[i] != 0) { + delete [] m_pages[i]; + } + } + delete [] m_pages; } - delete [] m_pages; - } - m_size = size; - assert(size%4096 == 0); - m_num_pages = size >> 12; - m_pages = new uint8*[m_num_pages]; - memset(m_pages, 0, m_num_pages * sizeof(uint8*)); + m_size = size; + assert(size%4096 == 0); + m_num_pages = size >> 12; + m_pages = new uint8*[m_num_pages]; + memset(m_pages, 0, m_num_pages * sizeof(uint8*)); } -inline -void MemoryVector::write(const Address & paddr, uint8* data, int len) +inline void +MemoryVector::write(const Address & paddr, uint8* data, int len) { - assert(paddr.getAddress() + len <= m_size); - uint32 page_num = paddr.getAddress() >> 12; - if (m_pages[page_num] == 0) { - bool all_zeros = true; - for (int i=0;i<len;i++) { - if (data[i] != 0) { - all_zeros = false; - break; - } + assert(paddr.getAddress() + len <= m_size); + uint32 page_num = paddr.getAddress() >> 12; + if (m_pages[page_num] == 0) { + bool all_zeros = true; + for (int i = 0; i < len;i++) { + if (data[i] != 0) { + all_zeros = false; + break; + } + } + if (all_zeros) + return; + m_pages[page_num] = new uint8[4096]; + memset(m_pages[page_num], 0, 4096); + uint32 offset = paddr.getAddress() & m_page_offset_mask; + memcpy(&m_pages[page_num][offset], data, len); + } else { + memcpy(&m_pages[page_num][paddr.getAddress()&m_page_offset_mask], + data, len); } - if (all_zeros) return; - m_pages[page_num] = new uint8[4096]; - memset(m_pages[page_num], 0, 4096); - uint32 offset = paddr.getAddress() & m_page_offset_mask; - memcpy(&m_pages[page_num][offset], data, len); - } else { - memcpy(&m_pages[page_num][paddr.getAddress()&m_page_offset_mask], data, len); - } } -inline -uint8* MemoryVector::read(const Address & paddr, uint8* data, int len) +inline uint8* +MemoryVector::read(const Address & paddr, uint8* data, int len) { - assert(paddr.getAddress() + len <= m_size); - uint32 page_num = paddr.getAddress() >> 12; - if (m_pages[page_num] == 0) { - memset(data, 0, len); - } else { - memcpy(data, &m_pages[page_num][paddr.getAddress()&m_page_offset_mask], len); - } - return data; + assert(paddr.getAddress() + len <= m_size); + uint32 page_num = paddr.getAddress() >> 12; + if (m_pages[page_num] == 0) { + memset(data, 0, len); + } else { + memcpy(data, &m_pages[page_num][paddr.getAddress()&m_page_offset_mask], + len); + } + return data; } -inline -uint8* MemoryVector::getBlockPtr(const PhysAddress & paddr) +inline uint8* +MemoryVector::getBlockPtr(const PhysAddress & paddr) { - uint32 page_num = paddr.getAddress() >> 12; - if (m_pages[page_num] == 0) { - m_pages[page_num] = new uint8[4096]; - memset(m_pages[page_num], 0, 4096); - } - return &m_pages[page_num][paddr.getAddress()&m_page_offset_mask]; + uint32 page_num = paddr.getAddress() >> 12; + if (m_pages[page_num] == 0) { + m_pages[page_num] = new uint8[4096]; + memset(m_pages[page_num], 0, 4096); + } + return &m_pages[page_num][paddr.getAddress()&m_page_offset_mask]; } -#endif // MEMORYVECTOR_H +#endif // __MEM_RUBY_SYSTEM_MEMORYVECTOR_HH__ |