decode_cache.hh revision 9022
12736Sktlim@umich.edu/* 22736Sktlim@umich.edu * Copyright (c) 2011 Google 32736Sktlim@umich.edu * All rights reserved. 42736Sktlim@umich.edu * 52736Sktlim@umich.edu * Redistribution and use in source and binary forms, with or without 62736Sktlim@umich.edu * modification, are permitted provided that the following conditions are 72736Sktlim@umich.edu * met: redistributions of source code must retain the above copyright 82736Sktlim@umich.edu * notice, this list of conditions and the following disclaimer; 92736Sktlim@umich.edu * redistributions in binary form must reproduce the above copyright 102736Sktlim@umich.edu * notice, this list of conditions and the following disclaimer in the 112736Sktlim@umich.edu * documentation and/or other materials provided with the distribution; 122736Sktlim@umich.edu * neither the name of the copyright holders nor the names of its 132736Sktlim@umich.edu * contributors may be used to endorse or promote products derived from 142736Sktlim@umich.edu * this software without specific prior written permission. 152736Sktlim@umich.edu * 162736Sktlim@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172736Sktlim@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182736Sktlim@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192736Sktlim@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202736Sktlim@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212736Sktlim@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222736Sktlim@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232736Sktlim@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242736Sktlim@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252736Sktlim@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262736Sktlim@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272736Sktlim@umich.edu * 282736Sktlim@umich.edu * Authors: Gabe Black 292736Sktlim@umich.edu */ 302736Sktlim@umich.edu 312736Sktlim@umich.edu#ifndef __CPU_DECODE_CACHE_HH__ 322736Sktlim@umich.edu#define __CPU_DECODE_CACHE_HH__ 332736Sktlim@umich.edu 342736Sktlim@umich.edu#include "arch/isa_traits.hh" 352736Sktlim@umich.edu#include "arch/types.hh" 362736Sktlim@umich.edu#include "base/hashmap.hh" 372736Sktlim@umich.edu#include "config/the_isa.hh" 382736Sktlim@umich.edu#include "cpu/static_inst.hh" 392736Sktlim@umich.edu 402736Sktlim@umich.edunamespace TheISA 412736Sktlim@umich.edu{ 422736Sktlim@umich.edu class Decoder; 432736Sktlim@umich.edu} 442736Sktlim@umich.edu 452736Sktlim@umich.educlass DecodeCache 462736Sktlim@umich.edu{ 472736Sktlim@umich.edu private: 482736Sktlim@umich.edu typedef TheISA::ExtMachInst ExtMachInst; 492736Sktlim@umich.edu 502736Sktlim@umich.edu /// Hash of decoded instructions. 512736Sktlim@umich.edu typedef m5::hash_map<ExtMachInst, StaticInstPtr> InstMap; 522736Sktlim@umich.edu InstMap instMap; 532736Sktlim@umich.edu struct DecodePage { 542736Sktlim@umich.edu StaticInstPtr insts[TheISA::PageBytes]; 552736Sktlim@umich.edu }; 562736Sktlim@umich.edu 572736Sktlim@umich.edu /// A store of DecodePages. Basically a slightly smarter hash_map. 582736Sktlim@umich.edu class DecodePages 592736Sktlim@umich.edu { 602736Sktlim@umich.edu protected: 612736Sktlim@umich.edu typedef typename m5::hash_map<Addr, DecodePage *> PageMap; 622736Sktlim@umich.edu typedef typename PageMap::iterator PageIt; 632736Sktlim@umich.edu PageIt recent[2]; 642736Sktlim@umich.edu PageMap pageMap; 652736Sktlim@umich.edu 662736Sktlim@umich.edu /// Update the small cache of recent lookups. 672736Sktlim@umich.edu /// @param recentest The most recent result; 682736Sktlim@umich.edu void update(PageIt recentest); 692736Sktlim@umich.edu void addPage(Addr addr, DecodePage *page); 702736Sktlim@umich.edu 712736Sktlim@umich.edu public: 722736Sktlim@umich.edu /// Constructor 732736Sktlim@umich.edu DecodePages(); 742736Sktlim@umich.edu 752736Sktlim@umich.edu /// Attempt to find the DecodePage which goes with a particular 762736Sktlim@umich.edu /// address. First check the small cache of recent results, then 772736Sktlim@umich.edu /// actually look in the hash_map. 782736Sktlim@umich.edu /// @param addr The address to look up. 792736Sktlim@umich.edu DecodePage *getPage(Addr addr); 802736Sktlim@umich.edu } decodePages; 812736Sktlim@umich.edu 822736Sktlim@umich.edu public: 832736Sktlim@umich.edu /// Decode a machine instruction. 842736Sktlim@umich.edu /// @param mach_inst The binary instruction to decode. 852736Sktlim@umich.edu /// @retval A pointer to the corresponding StaticInst object. 862736Sktlim@umich.edu StaticInstPtr decode(TheISA::Decoder * const decoder, 872736Sktlim@umich.edu ExtMachInst mach_inst, Addr addr); 882736Sktlim@umich.edu}; 892736Sktlim@umich.edu 902736Sktlim@umich.edu#endif // __CPU_DECODE_CACHE_HH__ 912736Sktlim@umich.edu