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