store_set.hh revision 2292
111723Sar4jc@virginia.edu/* 211723Sar4jc@virginia.edu * Copyright (c) 2004-2005 The Regents of The University of Michigan 311723Sar4jc@virginia.edu * All rights reserved. 412808Srobert.scheffel1@tu-dresden.de * 511723Sar4jc@virginia.edu * Redistribution and use in source and binary forms, with or without 611723Sar4jc@virginia.edu * modification, are permitted provided that the following conditions are 711723Sar4jc@virginia.edu * met: redistributions of source code must retain the above copyright 811723Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer; 911723Sar4jc@virginia.edu * redistributions in binary form must reproduce the above copyright 1011723Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer in the 1111723Sar4jc@virginia.edu * documentation and/or other materials provided with the distribution; 1211723Sar4jc@virginia.edu * neither the name of the copyright holders nor the names of its 1311723Sar4jc@virginia.edu * contributors may be used to endorse or promote products derived from 1411723Sar4jc@virginia.edu * this software without specific prior written permission. 1511723Sar4jc@virginia.edu * 1611723Sar4jc@virginia.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1711723Sar4jc@virginia.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1811723Sar4jc@virginia.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1911723Sar4jc@virginia.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011723Sar4jc@virginia.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111723Sar4jc@virginia.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2211723Sar4jc@virginia.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2311723Sar4jc@virginia.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2411723Sar4jc@virginia.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2511723Sar4jc@virginia.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2611723Sar4jc@virginia.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711723Sar4jc@virginia.edu */ 2811723Sar4jc@virginia.edu 2911723Sar4jc@virginia.edu#ifndef __CPU_O3_STORE_SET_HH__ 3011723Sar4jc@virginia.edu#define __CPU_O3_STORE_SET_HH__ 3112808Srobert.scheffel1@tu-dresden.de 3211723Sar4jc@virginia.edu#include <list> 3311723Sar4jc@virginia.edu#include <map> 3411723Sar4jc@virginia.edu#include <utility> 3512848Sar4jc@virginia.edu#include <vector> 3612848Sar4jc@virginia.edu 3712808Srobert.scheffel1@tu-dresden.de#include "arch/isa_traits.hh" 3811723Sar4jc@virginia.edu#include "cpu/inst_seq.hh" 3912808Srobert.scheffel1@tu-dresden.de 4011723Sar4jc@virginia.edustruct ltseqnum { 4111723Sar4jc@virginia.edu bool operator()(const InstSeqNum &lhs, const InstSeqNum &rhs) const 4211723Sar4jc@virginia.edu { 4311723Sar4jc@virginia.edu return lhs > rhs; 4412848Sar4jc@virginia.edu } 4512848Sar4jc@virginia.edu}; 4611723Sar4jc@virginia.edu 4711723Sar4jc@virginia.educlass StoreSet 4812848Sar4jc@virginia.edu{ 4911723Sar4jc@virginia.edu public: 5011723Sar4jc@virginia.edu typedef unsigned SSID; 5111723Sar4jc@virginia.edu 5211723Sar4jc@virginia.edu public: 5311723Sar4jc@virginia.edu StoreSet() { }; 5411723Sar4jc@virginia.edu 5511723Sar4jc@virginia.edu StoreSet(int SSIT_size, int LFST_size); 5612848Sar4jc@virginia.edu 5712848Sar4jc@virginia.edu ~StoreSet(); 5811723Sar4jc@virginia.edu 5912848Sar4jc@virginia.edu void init(int SSIT_size, int LFST_size); 6012848Sar4jc@virginia.edu 6112848Sar4jc@virginia.edu void violation(Addr store_PC, Addr load_PC); 6212848Sar4jc@virginia.edu 6312848Sar4jc@virginia.edu void insertLoad(Addr load_PC, InstSeqNum load_seq_num); 6412848Sar4jc@virginia.edu 6512848Sar4jc@virginia.edu void insertStore(Addr store_PC, InstSeqNum store_seq_num, 6612848Sar4jc@virginia.edu unsigned tid); 6712848Sar4jc@virginia.edu 6812848Sar4jc@virginia.edu InstSeqNum checkInst(Addr PC); 6912848Sar4jc@virginia.edu 7012848Sar4jc@virginia.edu void issued(Addr issued_PC, InstSeqNum issued_seq_num, bool is_store); 7112848Sar4jc@virginia.edu 7212848Sar4jc@virginia.edu void squash(InstSeqNum squashed_num, unsigned tid); 7312848Sar4jc@virginia.edu 7412849Sar4jc@virginia.edu void clear(); 7512848Sar4jc@virginia.edu 7612848Sar4jc@virginia.edu private: 7712848Sar4jc@virginia.edu inline int calcIndex(Addr PC) 7812848Sar4jc@virginia.edu { return (PC >> offsetBits) & indexMask; } 7912848Sar4jc@virginia.edu 8012849Sar4jc@virginia.edu inline SSID calcSSID(Addr PC) 8112848Sar4jc@virginia.edu { return ((PC ^ (PC >> 10)) % LFSTSize); } 8212848Sar4jc@virginia.edu 8312848Sar4jc@virginia.edu std::vector<SSID> SSIT; 8412848Sar4jc@virginia.edu 8512848Sar4jc@virginia.edu std::vector<bool> validSSIT; 8612848Sar4jc@virginia.edu 8712848Sar4jc@virginia.edu std::vector<InstSeqNum> LFST; 8812848Sar4jc@virginia.edu 8912849Sar4jc@virginia.edu std::vector<bool> validLFST; 9012848Sar4jc@virginia.edu 9112848Sar4jc@virginia.edu std::map<InstSeqNum, int, ltseqnum> storeList; 9212848Sar4jc@virginia.edu 9312848Sar4jc@virginia.edu typedef std::map<InstSeqNum, int, ltseqnum>::iterator SeqNumMapIt; 9412848Sar4jc@virginia.edu 9512848Sar4jc@virginia.edu int SSITSize; 9612848Sar4jc@virginia.edu 9712848Sar4jc@virginia.edu int LFSTSize; 9812848Sar4jc@virginia.edu 9912849Sar4jc@virginia.edu int indexMask; 10012848Sar4jc@virginia.edu 10112848Sar4jc@virginia.edu // HACK: Hardcoded for now. 10212848Sar4jc@virginia.edu int offsetBits; 10312848Sar4jc@virginia.edu}; 10412848Sar4jc@virginia.edu 10512848Sar4jc@virginia.edu#endif // __CPU_O3_STORE_SET_HH__ 10612848Sar4jc@virginia.edu