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