SubBlock.cc revision 6145
112841Sgabeblack@google.com
212841Sgabeblack@google.com/*
312841Sgabeblack@google.com * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
412841Sgabeblack@google.com * All rights reserved.
512841Sgabeblack@google.com *
612841Sgabeblack@google.com * Redistribution and use in source and binary forms, with or without
712841Sgabeblack@google.com * modification, are permitted provided that the following conditions are
812841Sgabeblack@google.com * met: redistributions of source code must retain the above copyright
912841Sgabeblack@google.com * notice, this list of conditions and the following disclaimer;
1012841Sgabeblack@google.com * redistributions in binary form must reproduce the above copyright
1112841Sgabeblack@google.com * notice, this list of conditions and the following disclaimer in the
1212841Sgabeblack@google.com * documentation and/or other materials provided with the distribution;
1312841Sgabeblack@google.com * neither the name of the copyright holders nor the names of its
1412841Sgabeblack@google.com * contributors may be used to endorse or promote products derived from
1512841Sgabeblack@google.com * this software without specific prior written permission.
1612841Sgabeblack@google.com *
1712841Sgabeblack@google.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1812841Sgabeblack@google.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1912841Sgabeblack@google.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2012841Sgabeblack@google.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2112841Sgabeblack@google.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2212841Sgabeblack@google.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2312841Sgabeblack@google.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2412841Sgabeblack@google.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2512841Sgabeblack@google.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2612841Sgabeblack@google.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2712841Sgabeblack@google.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2812841Sgabeblack@google.com */
2912841Sgabeblack@google.com
3012841Sgabeblack@google.com/*
3112841Sgabeblack@google.com * $Id$
3212841Sgabeblack@google.com */
3313201Sgabeblack@google.com
3412841Sgabeblack@google.com#include "SubBlock.hh"
3512841Sgabeblack@google.com
3612841Sgabeblack@google.comSubBlock::SubBlock(const Address& addr, int size)
3712841Sgabeblack@google.com{
3812841Sgabeblack@google.com  m_address = addr;
3912853Sgabeblack@google.com  setSize(size);
4012841Sgabeblack@google.com  for(int i=0; i<size; i++) {
4112841Sgabeblack@google.com    setByte(i, 0);
4212841Sgabeblack@google.com  }
4312841Sgabeblack@google.com}
4412853Sgabeblack@google.com
4512841Sgabeblack@google.comSubBlock::SubBlock(const Address& addr, const Address& logicalAddress, int size)
4612841Sgabeblack@google.com{
4712841Sgabeblack@google.com  m_address = addr;
4812841Sgabeblack@google.com  m_logicalAddress = logicalAddress;
4913201Sgabeblack@google.com  setSize(size);
5012841Sgabeblack@google.com  for(int i=0; i<size; i++) {
5112841Sgabeblack@google.com    setByte(i, 0);
5212841Sgabeblack@google.com  }
5312841Sgabeblack@google.com}
5412841Sgabeblack@google.com
5512841Sgabeblack@google.comvoid SubBlock::internalMergeFrom(const DataBlock& data)
5612841Sgabeblack@google.com{
5712841Sgabeblack@google.com  int size = getSize();
5812841Sgabeblack@google.com  assert(size > 0);
5912841Sgabeblack@google.com  int offset = m_address.getOffset();
6012841Sgabeblack@google.com  for(int i=0; i<size; i++) {
6112841Sgabeblack@google.com    this->setByte(i, data.getByte(offset+i));
6212841Sgabeblack@google.com  }
6312841Sgabeblack@google.com}
6413201Sgabeblack@google.com
6512841Sgabeblack@google.comvoid SubBlock::internalMergeTo(DataBlock& data) const
6612841Sgabeblack@google.com{
6712841Sgabeblack@google.com  int size = getSize();
6813201Sgabeblack@google.com  assert(size > 0);
6912841Sgabeblack@google.com  int offset = m_address.getOffset();
7012841Sgabeblack@google.com  for(int i=0; i<size; i++) {
7112841Sgabeblack@google.com    data.setByte(offset+i, this->getByte(i)); // This will detect crossing a cache line boundary
7212841Sgabeblack@google.com  }
7312841Sgabeblack@google.com}
74
75void SubBlock::print(ostream& out) const
76{
77  out << "[" << m_address << ", " << getSize() << ", " << m_data << "]";
78}
79
80
81
82