X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fruby%2Fcommon%2FDataBlock.cc;h=c71449dd028426b5ec46f3f375f4d458aab9ede7;hb=637c6c7e3214cd2991aa4caf1a7082bb075357d5;hp=8d3c812429deae08bbf36afe1d3c02e43717a97f;hpb=d484e1b334c6fd3f2721a2a4628c2324ed14fd08;p=gem5.git diff --git a/src/mem/ruby/common/DataBlock.cc b/src/mem/ruby/common/DataBlock.cc index 8d3c81242..c71449dd0 100644 --- a/src/mem/ruby/common/DataBlock.cc +++ b/src/mem/ruby/common/DataBlock.cc @@ -27,18 +27,66 @@ */ #include "mem/ruby/common/DataBlock.hh" +#include "mem/ruby/system/System.hh" -DataBlock & -DataBlock::operator=(const DataBlock & obj) +DataBlock::DataBlock(const DataBlock &cp) { - if (this == &obj) { - // assert(false); - } else { - if (!m_alloc) - m_data = new uint8[RubySystem::getBlockSizeBytes()]; - memcpy(m_data, obj.m_data, RubySystem::getBlockSizeBytes()); - m_alloc = true; + m_data = new uint8_t[RubySystem::getBlockSizeBytes()]; + memcpy(m_data, cp.m_data, RubySystem::getBlockSizeBytes()); + m_alloc = true; +} + +void +DataBlock::alloc() +{ + m_data = new uint8_t[RubySystem::getBlockSizeBytes()]; + m_alloc = true; + clear(); +} + +void +DataBlock::clear() +{ + memset(m_data, 0, RubySystem::getBlockSizeBytes()); +} + +bool +DataBlock::equal(const DataBlock& obj) const +{ + return !memcmp(m_data, obj.m_data, RubySystem::getBlockSizeBytes()); +} + +void +DataBlock::print(std::ostream& out) const +{ + using namespace std; + + int size = RubySystem::getBlockSizeBytes(); + out << "[ "; + for (int i = 0; i < size; i++) { + out << setw(2) << setfill('0') << hex << "0x" << (int)m_data[i] << " "; + out << setfill(' '); } + out << dec << "]" << flush; +} + +const uint8_t* +DataBlock::getData(int offset, int len) const +{ + assert(offset + len <= RubySystem::getBlockSizeBytes()); + return &m_data[offset]; +} +void +DataBlock::setData(uint8_t *data, int offset, int len) +{ + assert(offset + len <= RubySystem::getBlockSizeBytes()); + memcpy(&m_data[offset], data, len); +} + +DataBlock & +DataBlock::operator=(const DataBlock & obj) +{ + memcpy(m_data, obj.m_data, RubySystem::getBlockSizeBytes()); return *this; }