LRUPolicy.hh revision 7039
12810Srdreslin@umich.edu/* 211375Sandreas.hansson@arm.com * Copyright (c) 2007 Mark D. Hill and David A. Wood 311051Sandreas.hansson@arm.com * All rights reserved. 411051Sandreas.hansson@arm.com * 511051Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 611051Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 711051Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 811051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 911051Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 1011051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1111051Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 1211051Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 1311051Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 1411051Sandreas.hansson@arm.com * this software without specific prior written permission. 1511051Sandreas.hansson@arm.com * 162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu */ 282810Srdreslin@umich.edu 292810Srdreslin@umich.edu#ifndef __MEM_RUBY_SYSTEM_LRUPOLICY_HH__ 302810Srdreslin@umich.edu#define __MEM_RUBY_SYSTEM_LRUPOLICY_HH__ 312810Srdreslin@umich.edu 322810Srdreslin@umich.edu#include "mem/ruby/system/AbstractReplacementPolicy.hh" 332810Srdreslin@umich.edu 342810Srdreslin@umich.edu/* Simple true LRU replacement policy */ 352810Srdreslin@umich.edu 362810Srdreslin@umich.educlass LRUPolicy : public AbstractReplacementPolicy 372810Srdreslin@umich.edu{ 382810Srdreslin@umich.edu public: 392810Srdreslin@umich.edu LRUPolicy(Index num_sets, Index assoc); 402810Srdreslin@umich.edu ~LRUPolicy(); 412810Srdreslin@umich.edu 4211051Sandreas.hansson@arm.com void touch(Index set, Index way, Time time); 4311051Sandreas.hansson@arm.com Index getVictim(Index set) const; 442810Srdreslin@umich.edu}; 4511051Sandreas.hansson@arm.com 4611051Sandreas.hansson@arm.cominline 472810Srdreslin@umich.eduLRUPolicy::LRUPolicy(Index num_sets, Index assoc) 482810Srdreslin@umich.edu : AbstractReplacementPolicy(num_sets, assoc) 492810Srdreslin@umich.edu{ 502810Srdreslin@umich.edu} 5111051Sandreas.hansson@arm.com 522810Srdreslin@umich.eduinline 532810Srdreslin@umich.eduLRUPolicy::~LRUPolicy() 5411051Sandreas.hansson@arm.com{ 552810Srdreslin@umich.edu} 5611051Sandreas.hansson@arm.com 5711051Sandreas.hansson@arm.cominline void 5811051Sandreas.hansson@arm.comLRUPolicy::touch(Index set, Index index, Time time) 5911051Sandreas.hansson@arm.com{ 6011051Sandreas.hansson@arm.com assert(index >= 0 && index < m_assoc); 6111288Ssteve.reinhardt@amd.com assert(set >= 0 && set < m_num_sets); 6211051Sandreas.hansson@arm.com 6311051Sandreas.hansson@arm.com m_last_ref_ptr[set][index] = time; 6411051Sandreas.hansson@arm.com} 6511051Sandreas.hansson@arm.com 6611051Sandreas.hansson@arm.cominline Index 6711053Sandreas.hansson@arm.comLRUPolicy::getVictim(Index set) const 6811053Sandreas.hansson@arm.com{ 6911051Sandreas.hansson@arm.com // assert(m_assoc != 0); 7011051Sandreas.hansson@arm.com Time time, smallest_time; 7111051Sandreas.hansson@arm.com Index smallest_index; 7211197Sandreas.hansson@arm.com 7311197Sandreas.hansson@arm.com smallest_index = 0; 7411199Sandreas.hansson@arm.com smallest_time = m_last_ref_ptr[set][0]; 7511197Sandreas.hansson@arm.com 7611197Sandreas.hansson@arm.com for (unsigned i = 0; i < m_assoc; i++) { 7711197Sandreas.hansson@arm.com time = m_last_ref_ptr[set][i]; 7811051Sandreas.hansson@arm.com // assert(m_cache[cacheSet][i].m_Permission != 7911051Sandreas.hansson@arm.com // AccessPermission_NotPresent); 8011051Sandreas.hansson@arm.com 8111051Sandreas.hansson@arm.com if (time < smallest_time) { 8211051Sandreas.hansson@arm.com smallest_index = i; 8311051Sandreas.hansson@arm.com smallest_time = time; 8411051Sandreas.hansson@arm.com } 8511051Sandreas.hansson@arm.com } 8611051Sandreas.hansson@arm.com 8711051Sandreas.hansson@arm.com // DEBUG_EXPR(CACHE_COMP, MedPrio, cacheSet); 8811051Sandreas.hansson@arm.com // DEBUG_EXPR(CACHE_COMP, MedPrio, smallest_index); 8911051Sandreas.hansson@arm.com // DEBUG_EXPR(CACHE_COMP, MedPrio, m_cache[cacheSet][smallest_index]); 9011051Sandreas.hansson@arm.com // DEBUG_EXPR(CACHE_COMP, MedPrio, *this); 9111051Sandreas.hansson@arm.com 9211051Sandreas.hansson@arm.com return smallest_index; 9311051Sandreas.hansson@arm.com} 9411051Sandreas.hansson@arm.com 9511051Sandreas.hansson@arm.com#endif // __MEM_RUBY_SYSTEM_LRUPOLICY_HH__ 9611051Sandreas.hansson@arm.com