SubBlock.cc revision 11049
1196Sstever@eecs.umich.edu/* 22Ssraasch@umich.edu * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 3196Sstever@eecs.umich.edu * All rights reserved. 42Ssraasch@umich.edu * 52Ssraasch@umich.edu * Redistribution and use in source and binary forms, with or without 6196Sstever@eecs.umich.edu * modification, are permitted provided that the following conditions are 7196Sstever@eecs.umich.edu * met: redistributions of source code must retain the above copyright 8196Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 9196Sstever@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 10196Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 11196Sstever@eecs.umich.edu * documentation and/or other materials provided with the distribution; 12196Sstever@eecs.umich.edu * neither the name of the copyright holders nor the names of its 13196Sstever@eecs.umich.edu * contributors may be used to endorse or promote products derived from 14196Sstever@eecs.umich.edu * this software without specific prior written permission. 15196Sstever@eecs.umich.edu * 162Ssraasch@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17196Sstever@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18196Sstever@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19196Sstever@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20196Sstever@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21196Sstever@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22196Sstever@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23196Sstever@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24196Sstever@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25196Sstever@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26196Sstever@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27196Sstever@eecs.umich.edu */ 282665Ssaidi@eecs.umich.edu 292665Ssaidi@eecs.umich.edu#include "base/stl_helpers.hh" 302665Ssaidi@eecs.umich.edu#include "mem/ruby/common/SubBlock.hh" 31196Sstever@eecs.umich.edu 32196Sstever@eecs.umich.eduusing m5::stl_helpers::operator<<; 332Ssraasch@umich.edu 34196Sstever@eecs.umich.eduSubBlock::SubBlock(Addr addr, int size) 35196Sstever@eecs.umich.edu{ 36196Sstever@eecs.umich.edu m_address = addr; 37196Sstever@eecs.umich.edu resize(size); 38196Sstever@eecs.umich.edu for (int i = 0; i < size; i++) { 39196Sstever@eecs.umich.edu setByte(i, 0); 40196Sstever@eecs.umich.edu } 41196Sstever@eecs.umich.edu} 422783Sktlim@umich.edu 432Ssraasch@umich.eduvoid 442Ssraasch@umich.eduSubBlock::internalMergeFrom(const DataBlock& data) 45196Sstever@eecs.umich.edu{ 466115Ssteve.reinhardt@amd.com int size = getSize(); 47354Sstever@eecs.umich.edu assert(size > 0); 48354Sstever@eecs.umich.edu int offset = getOffset(m_address); 49354Sstever@eecs.umich.edu for (int i = 0; i < size; i++) { 50354Sstever@eecs.umich.edu this->setByte(i, data.getByte(offset + i)); 51354Sstever@eecs.umich.edu } 52354Sstever@eecs.umich.edu} 53354Sstever@eecs.umich.edu 54354Sstever@eecs.umich.eduvoid 55354Sstever@eecs.umich.eduSubBlock::internalMergeTo(DataBlock& data) const 56354Sstever@eecs.umich.edu{ 57354Sstever@eecs.umich.edu int size = getSize(); 58196Sstever@eecs.umich.edu assert(size > 0); 59196Sstever@eecs.umich.edu int offset = getOffset(m_address); 60354Sstever@eecs.umich.edu for (int i = 0; i < size; i++) { 61354Sstever@eecs.umich.edu // This will detect crossing a cache line boundary 62354Sstever@eecs.umich.edu data.setByte(offset + i, this->getByte(i)); 63354Sstever@eecs.umich.edu } 64354Sstever@eecs.umich.edu} 65354Sstever@eecs.umich.edu 662Ssraasch@umich.eduvoid 67354Sstever@eecs.umich.eduSubBlock::print(std::ostream& out) const 68354Sstever@eecs.umich.edu{ 69354Sstever@eecs.umich.edu out << "[" << m_address << ", " << getSize() << ", " << m_data << "]"; 70354Sstever@eecs.umich.edu} 71354Sstever@eecs.umich.edu 72354Sstever@eecs.umich.edu 73354Sstever@eecs.umich.edu 74354Sstever@eecs.umich.edu