base.cc revision 10623:b9646f4546ad
17191Sgblack@eecs.umich.edu/* 27191Sgblack@eecs.umich.edu * Copyright (c) 2013-2014 ARM Limited 37191Sgblack@eecs.umich.edu * All rights reserved. 47191Sgblack@eecs.umich.edu * 57191Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 67191Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual 77191Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating 87191Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software 97191Sgblack@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 107191Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 117191Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 127191Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form. 137191Sgblack@eecs.umich.edu * 147191Sgblack@eecs.umich.edu * Copyright (c) 2005 The Regents of The University of Michigan 157191Sgblack@eecs.umich.edu * All rights reserved. 167191Sgblack@eecs.umich.edu * 177191Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 187191Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 197191Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 207191Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 217191Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 227191Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 237191Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 247191Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 257191Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 267191Sgblack@eecs.umich.edu * this software without specific prior written permission. 277191Sgblack@eecs.umich.edu * 287191Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 297191Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 307191Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 317191Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 327191Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 337191Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 347191Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 357191Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 367191Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 377191Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 387191Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 397191Sgblack@eecs.umich.edu * 407191Sgblack@eecs.umich.edu * Authors: Ron Dreslinski 417191Sgblack@eecs.umich.edu * Mitch Hayenga 427191Sgblack@eecs.umich.edu */ 437191Sgblack@eecs.umich.edu 447191Sgblack@eecs.umich.edu/** 457191Sgblack@eecs.umich.edu * @file 467191Sgblack@eecs.umich.edu * Hardware Prefetcher Definition. 477308Sgblack@eecs.umich.edu */ 487191Sgblack@eecs.umich.edu 497316Sgblack@eecs.umich.edu#include <list> 507316Sgblack@eecs.umich.edu 517316Sgblack@eecs.umich.edu#include "mem/cache/prefetch/base.hh" 527316Sgblack@eecs.umich.edu#include "mem/cache/base.hh" 537316Sgblack@eecs.umich.edu#include "sim/system.hh" 547316Sgblack@eecs.umich.edu 557191Sgblack@eecs.umich.eduBasePrefetcher::BasePrefetcher(const BasePrefetcherParams *p) 567191Sgblack@eecs.umich.edu : ClockedObject(p), cache(nullptr), blkSize(0), system(p->sys), 577435Sgblack@eecs.umich.edu onMiss(p->on_miss), onRead(p->on_read), 587191Sgblack@eecs.umich.edu onWrite(p->on_write), onData(p->on_data), onInst(p->on_inst), 597191Sgblack@eecs.umich.edu masterId(system->getMasterId(name())), 607435Sgblack@eecs.umich.edu pageBytes(system->getPageBytes()) 617191Sgblack@eecs.umich.edu{ 627191Sgblack@eecs.umich.edu} 637248Sgblack@eecs.umich.edu 647191Sgblack@eecs.umich.eduvoid 657192Sgblack@eecs.umich.eduBasePrefetcher::setCache(BaseCache *_cache) 667192Sgblack@eecs.umich.edu{ 677192Sgblack@eecs.umich.edu assert(!cache); 687192Sgblack@eecs.umich.edu cache = _cache; 697192Sgblack@eecs.umich.edu blkSize = cache->getBlockSize(); 707192Sgblack@eecs.umich.edu} 717192Sgblack@eecs.umich.edu 727192Sgblack@eecs.umich.eduvoid 737192Sgblack@eecs.umich.eduBasePrefetcher::regStats() 747191Sgblack@eecs.umich.edu{ 757191Sgblack@eecs.umich.edu pfIssued 767191Sgblack@eecs.umich.edu .name(name() + ".num_hwpf_issued") 777192Sgblack@eecs.umich.edu .desc("number of hwpf issued") 787192Sgblack@eecs.umich.edu ; 797192Sgblack@eecs.umich.edu} 807192Sgblack@eecs.umich.edu 817192Sgblack@eecs.umich.edubool 827192Sgblack@eecs.umich.eduBasePrefetcher::observeAccess(const PacketPtr &pkt) const 837192Sgblack@eecs.umich.edu{ 847192Sgblack@eecs.umich.edu Addr addr = pkt->getAddr(); 857192Sgblack@eecs.umich.edu bool fetch = pkt->req->isInstFetch(); 867192Sgblack@eecs.umich.edu bool read= pkt->isRead(); 877192Sgblack@eecs.umich.edu bool is_secure = pkt->isSecure(); 887192Sgblack@eecs.umich.edu 897192Sgblack@eecs.umich.edu if (pkt->req->isUncacheable()) return false; 907192Sgblack@eecs.umich.edu if (fetch && !onInst) return false; 917192Sgblack@eecs.umich.edu if (!fetch && !onData) return false; 927192Sgblack@eecs.umich.edu if (!fetch && read && !onRead) return false; 937192Sgblack@eecs.umich.edu if (!fetch && !read && !onWrite) return false; 947192Sgblack@eecs.umich.edu 957192Sgblack@eecs.umich.edu if (onMiss) { 967192Sgblack@eecs.umich.edu return !inCache(addr, is_secure) && 977191Sgblack@eecs.umich.edu !inMissQueue(addr, is_secure); 987191Sgblack@eecs.umich.edu } 997191Sgblack@eecs.umich.edu 1007191Sgblack@eecs.umich.edu return true; 1017191Sgblack@eecs.umich.edu} 1027191Sgblack@eecs.umich.edu 1037191Sgblack@eecs.umich.edubool 1047191Sgblack@eecs.umich.eduBasePrefetcher::inCache(Addr addr, bool is_secure) const 1057191Sgblack@eecs.umich.edu{ 1067191Sgblack@eecs.umich.edu if (cache->inCache(addr, is_secure)) { 1077191Sgblack@eecs.umich.edu return true; 1087191Sgblack@eecs.umich.edu } 1097191Sgblack@eecs.umich.edu return false; 1107191Sgblack@eecs.umich.edu} 1117191Sgblack@eecs.umich.edu 1127191Sgblack@eecs.umich.edubool 1137248Sgblack@eecs.umich.eduBasePrefetcher::inMissQueue(Addr addr, bool is_secure) const 1147191Sgblack@eecs.umich.edu{ 1157192Sgblack@eecs.umich.edu if (cache->inMissQueue(addr, is_secure)) { 1167192Sgblack@eecs.umich.edu return true; 1177192Sgblack@eecs.umich.edu } 1187192Sgblack@eecs.umich.edu return false; 1197192Sgblack@eecs.umich.edu} 1207192Sgblack@eecs.umich.edu 1217192Sgblack@eecs.umich.edubool 1227192Sgblack@eecs.umich.eduBasePrefetcher::samePage(Addr a, Addr b) const 1237192Sgblack@eecs.umich.edu{ 1247192Sgblack@eecs.umich.edu return roundDown(a, pageBytes) == roundDown(b, pageBytes); 1257192Sgblack@eecs.umich.edu} 1267192Sgblack@eecs.umich.edu 1277192Sgblack@eecs.umich.edu 1287192Sgblack@eecs.umich.edu