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