X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Fruby%2Fcommon%2FDataBlock.cc;h=c71449dd028426b5ec46f3f375f4d458aab9ede7;hb=637c6c7e3214cd2991aa4caf1a7082bb075357d5;hp=75ede7f4fe35fab80c787de42662abad5d507b22;hpb=a7904e2cf341d5452c5622adfcbdcd268d4ab7d1;p=gem5.git diff --git a/src/mem/ruby/common/DataBlock.cc b/src/mem/ruby/common/DataBlock.cc index 75ede7f4f..c71449dd0 100644 --- a/src/mem/ruby/common/DataBlock.cc +++ b/src/mem/ruby/common/DataBlock.cc @@ -1,4 +1,3 @@ - /* * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood * All rights reserved. @@ -28,17 +27,66 @@ */ #include "mem/ruby/common/DataBlock.hh" +#include "mem/ruby/system/System.hh" + +DataBlock::DataBlock(const DataBlock &cp) +{ + 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) { - 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; - } - return *this; + return *this; }