replaceable_entry.hh revision 14131
12810Srdreslin@umich.edu/** 212348Snikos.nikoleris@arm.com * Copyright (c) 2018 Inria 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 * Authors: Daniel Carvalho 292810Srdreslin@umich.edu */ 302810Srdreslin@umich.edu 312810Srdreslin@umich.edu#ifndef __MEM_CACHE_REPLACEMENT_POLICIES_REPLACEABLE_ENTRY_HH__ 322810Srdreslin@umich.edu#define __MEM_CACHE_REPLACEMENT_POLICIES_REPLACEABLE_ENTRY_HH__ 332810Srdreslin@umich.edu 342810Srdreslin@umich.edu#include <cstdint> 352810Srdreslin@umich.edu#include <memory> 362810Srdreslin@umich.edu 372810Srdreslin@umich.edu/** 382810Srdreslin@umich.edu * The replacement data needed by replacement policies. Each replacement policy 392810Srdreslin@umich.edu * should have its own implementation of replacement data. 402810Srdreslin@umich.edu */ 412810Srdreslin@umich.edustruct ReplacementData {}; 4211051Sandreas.hansson@arm.com 4311051Sandreas.hansson@arm.com/** 442810Srdreslin@umich.edu * A replaceable entry is a basic entry in a 2d table-like structure that needs 4511051Sandreas.hansson@arm.com * to have replacement functionality. This entry is located in a specific row 4611051Sandreas.hansson@arm.com * and column of the table (set and way in cache nomenclature), which are 4712349Snikos.nikoleris@arm.com * stored within the entry itself. 482810Srdreslin@umich.edu * 492810Srdreslin@umich.edu * It contains the replacement data pointer, which must be instantiated by the 502810Srdreslin@umich.edu * replacement policy before being used. 512810Srdreslin@umich.edu * @sa Replacement Policies 5211051Sandreas.hansson@arm.com */ 532810Srdreslin@umich.educlass ReplaceableEntry 542810Srdreslin@umich.edu{ 5511051Sandreas.hansson@arm.com private: 562810Srdreslin@umich.edu /** 5712334Sgabeblack@google.com * Set to which this entry belongs. 5811051Sandreas.hansson@arm.com */ 5911051Sandreas.hansson@arm.com uint32_t _set; 6011051Sandreas.hansson@arm.com 6111051Sandreas.hansson@arm.com /** 6211288Ssteve.reinhardt@amd.com * Way (relative position within the set) to which this entry belongs. 6311051Sandreas.hansson@arm.com */ 6411051Sandreas.hansson@arm.com uint32_t _way; 6511051Sandreas.hansson@arm.com 6611051Sandreas.hansson@arm.com public: 6711051Sandreas.hansson@arm.com ReplaceableEntry() = default; 6811053Sandreas.hansson@arm.com virtual ~ReplaceableEntry() = default; 6911053Sandreas.hansson@arm.com 7011051Sandreas.hansson@arm.com /** 7111051Sandreas.hansson@arm.com * Replacement data associated to this entry. 7211051Sandreas.hansson@arm.com * It must be instantiated by the replacement policy before being used. 7311197Sandreas.hansson@arm.com */ 7411197Sandreas.hansson@arm.com std::shared_ptr<ReplacementData> replacementData; 7511199Sandreas.hansson@arm.com 7611197Sandreas.hansson@arm.com /** 7712084Sspwilson2@wisc.edu * Set both the set and way. Should be called only once. 7812084Sspwilson2@wisc.edu * 7911197Sandreas.hansson@arm.com * @param set The set of this entry. 8011051Sandreas.hansson@arm.com * @param way The way of this entry. 8111051Sandreas.hansson@arm.com */ 8211051Sandreas.hansson@arm.com virtual void 8311051Sandreas.hansson@arm.com setPosition(const uint32_t set, const uint32_t way) 8411051Sandreas.hansson@arm.com { 8511051Sandreas.hansson@arm.com _set = set; 8611051Sandreas.hansson@arm.com _way = way; 8711051Sandreas.hansson@arm.com } 8811051Sandreas.hansson@arm.com 8911051Sandreas.hansson@arm.com /** 9011051Sandreas.hansson@arm.com * Get set number. 9111051Sandreas.hansson@arm.com * 9211051Sandreas.hansson@arm.com * @return The set to which this entry belongs. 9311051Sandreas.hansson@arm.com */ 9411051Sandreas.hansson@arm.com uint32_t getSet() const { return _set; } 9511051Sandreas.hansson@arm.com 9611051Sandreas.hansson@arm.com /** 9711051Sandreas.hansson@arm.com * Get way number. 9811051Sandreas.hansson@arm.com * 9911051Sandreas.hansson@arm.com * @return The way to which this entry belongs. 10011051Sandreas.hansson@arm.com */ 10111051Sandreas.hansson@arm.com uint32_t getWay() const { return _way; } 10211051Sandreas.hansson@arm.com}; 10311051Sandreas.hansson@arm.com 10411051Sandreas.hansson@arm.com#endif // __MEM_CACHE_REPLACEMENT_POLICIES_REPLACEABLE_ENTRY_HH_ 10511051Sandreas.hansson@arm.com