110970Sdavid.hashe@amd.com/*
210970Sdavid.hashe@amd.com * Copyright (c) 2013 Advanced Micro Devices, Inc
310970Sdavid.hashe@amd.com * All rights reserved.
410970Sdavid.hashe@amd.com *
510970Sdavid.hashe@amd.com * Redistribution and use in source and binary forms, with or without
610970Sdavid.hashe@amd.com * modification, are permitted provided that the following conditions are
710970Sdavid.hashe@amd.com * met: redistributions of source code must retain the above copyright
810970Sdavid.hashe@amd.com * notice, this list of conditions and the following disclaimer;
910970Sdavid.hashe@amd.com * redistributions in binary form must reproduce the above copyright
1010970Sdavid.hashe@amd.com * notice, this list of conditions and the following disclaimer in the
1110970Sdavid.hashe@amd.com * documentation and/or other materials provided with the distribution;
1210970Sdavid.hashe@amd.com * neither the name of the copyright holders nor the names of its
1310970Sdavid.hashe@amd.com * contributors may be used to endorse or promote products derived from
1410970Sdavid.hashe@amd.com * this software without specific prior written permission.
1510970Sdavid.hashe@amd.com *
1610970Sdavid.hashe@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1710970Sdavid.hashe@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1810970Sdavid.hashe@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1910970Sdavid.hashe@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2010970Sdavid.hashe@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2110970Sdavid.hashe@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2210970Sdavid.hashe@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2310970Sdavid.hashe@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2410970Sdavid.hashe@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2510970Sdavid.hashe@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2610970Sdavid.hashe@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2710970Sdavid.hashe@amd.com *
2810970Sdavid.hashe@amd.com * Author: Derek Hower
2910970Sdavid.hashe@amd.com */
3010970Sdavid.hashe@amd.com
3110970Sdavid.hashe@amd.com#include "mem/ruby/structures/AbstractReplacementPolicy.hh"
3210970Sdavid.hashe@amd.com
3312334Sgabeblack@google.com#include "base/logging.hh"
3411800Sbrandon.potter@amd.com
3510970Sdavid.hashe@amd.comAbstractReplacementPolicy::AbstractReplacementPolicy(const Params * p)
3610970Sdavid.hashe@amd.com  : SimObject(p)
3710970Sdavid.hashe@amd.com{
3810970Sdavid.hashe@amd.com    m_num_sets = p->size/p->block_size/p->assoc;
3910970Sdavid.hashe@amd.com    m_assoc = p->assoc;
4010970Sdavid.hashe@amd.com    m_last_ref_ptr = new Tick*[m_num_sets];
4111321Ssteve.reinhardt@amd.com    for (unsigned i = 0; i < m_num_sets; i++){
4210970Sdavid.hashe@amd.com        m_last_ref_ptr[i] = new Tick[m_assoc];
4311321Ssteve.reinhardt@amd.com        for (unsigned j = 0; j < m_assoc; j++){
4410970Sdavid.hashe@amd.com            m_last_ref_ptr[i][j] = 0;
4510970Sdavid.hashe@amd.com        }
4610970Sdavid.hashe@amd.com    }
4710970Sdavid.hashe@amd.com}
4810970Sdavid.hashe@amd.com
4910970Sdavid.hashe@amd.comAbstractReplacementPolicy *
5010970Sdavid.hashe@amd.comReplacementPolicyParams::create()
5110970Sdavid.hashe@amd.com{
5210970Sdavid.hashe@amd.com    fatal("Cannot create an AbstractReplacementPolicy");
5310970Sdavid.hashe@amd.com    return NULL;
5410970Sdavid.hashe@amd.com}
5510970Sdavid.hashe@amd.com
5610970Sdavid.hashe@amd.com
5710970Sdavid.hashe@amd.com
5810970Sdavid.hashe@amd.comAbstractReplacementPolicy::~AbstractReplacementPolicy()
5910970Sdavid.hashe@amd.com{
6010970Sdavid.hashe@amd.com    if (m_last_ref_ptr != NULL){
6110970Sdavid.hashe@amd.com        for (unsigned i = 0; i < m_num_sets; i++){
6210970Sdavid.hashe@amd.com            if (m_last_ref_ptr[i] != NULL){
6310970Sdavid.hashe@amd.com                delete[] m_last_ref_ptr[i];
6410970Sdavid.hashe@amd.com            }
6510970Sdavid.hashe@amd.com        }
6610970Sdavid.hashe@amd.com        delete[] m_last_ref_ptr;
6710970Sdavid.hashe@amd.com    }
6810970Sdavid.hashe@amd.com}
6910970Sdavid.hashe@amd.com
7010970Sdavid.hashe@amd.comTick
7111061Snilay@cs.wisc.eduAbstractReplacementPolicy::getLastAccess(int64_t set, int64_t way)
7210970Sdavid.hashe@amd.com{
7310970Sdavid.hashe@amd.com    return m_last_ref_ptr[set][way];
7410970Sdavid.hashe@amd.com}
75