store_set.hh revision 1062
111348Sandreas.sandberg@arm.com#ifndef __STORE_SET_HH__
211470Sandreas.sandberg@arm.com#define __STORE_SET_HH__
311348Sandreas.sandberg@arm.com
411348Sandreas.sandberg@arm.com#include <vector>
511348Sandreas.sandberg@arm.com
611348Sandreas.sandberg@arm.com#include "arch/alpha/isa_traits.hh"
711348Sandreas.sandberg@arm.com#include "cpu/inst_seq.hh"
811348Sandreas.sandberg@arm.com
911348Sandreas.sandberg@arm.comclass StoreSet
1011348Sandreas.sandberg@arm.com{
1111348Sandreas.sandberg@arm.com  public:
1211348Sandreas.sandberg@arm.com    typedef unsigned SSID;
1311348Sandreas.sandberg@arm.com
1411348Sandreas.sandberg@arm.com  public:
1511348Sandreas.sandberg@arm.com    StoreSet(int SSIT_size, int LFST_size);
1611348Sandreas.sandberg@arm.com
1711348Sandreas.sandberg@arm.com    void violation(Addr store_PC, Addr load_PC);
1811348Sandreas.sandberg@arm.com
1911348Sandreas.sandberg@arm.com    void insertLoad(Addr load_PC, InstSeqNum load_seq_num);
2011348Sandreas.sandberg@arm.com
2111348Sandreas.sandberg@arm.com    void insertStore(Addr store_PC, InstSeqNum store_seq_num);
2211348Sandreas.sandberg@arm.com
2311348Sandreas.sandberg@arm.com    InstSeqNum checkInst(Addr PC);
2411348Sandreas.sandberg@arm.com
2511348Sandreas.sandberg@arm.com    void issued(Addr issued_PC, InstSeqNum issued_seq_num, bool is_store);
2611348Sandreas.sandberg@arm.com
2711348Sandreas.sandberg@arm.com    void squash(InstSeqNum squashed_num);
2811348Sandreas.sandberg@arm.com
2911348Sandreas.sandberg@arm.com    void clear();
3011348Sandreas.sandberg@arm.com
3111348Sandreas.sandberg@arm.com  private:
3211348Sandreas.sandberg@arm.com    inline int calcIndex(Addr PC)
3311348Sandreas.sandberg@arm.com    { return (PC >> offset_bits) & index_mask; }
3411348Sandreas.sandberg@arm.com
3511348Sandreas.sandberg@arm.com    inline SSID calcSSID(Addr PC)
3611348Sandreas.sandberg@arm.com    { return ((PC ^ (PC >> 10)) % LFST_size); }
3711348Sandreas.sandberg@arm.com
3811348Sandreas.sandberg@arm.com    SSID *SSIT;
3911348Sandreas.sandberg@arm.com
4011348Sandreas.sandberg@arm.com    std::vector<bool> validSSIT;
4111348Sandreas.sandberg@arm.com
4211348Sandreas.sandberg@arm.com    InstSeqNum *LFST;
4311348Sandreas.sandberg@arm.com
4411348Sandreas.sandberg@arm.com    std::vector<bool> validLFST;
4511348Sandreas.sandberg@arm.com
4611348Sandreas.sandberg@arm.com    int *SSCounters;
4711348Sandreas.sandberg@arm.com
4811348Sandreas.sandberg@arm.com    int SSIT_size;
4911348Sandreas.sandberg@arm.com
5011348Sandreas.sandberg@arm.com    int LFST_size;
5111348Sandreas.sandberg@arm.com
5211348Sandreas.sandberg@arm.com    int index_mask;
5311348Sandreas.sandberg@arm.com
5411348Sandreas.sandberg@arm.com    // HACK: Hardcoded for now.
5511348Sandreas.sandberg@arm.com    int offset_bits;
5611348Sandreas.sandberg@arm.com};
5711348Sandreas.sandberg@arm.com
5811348Sandreas.sandberg@arm.com#endif // __STORE_SET_HH__
5911348Sandreas.sandberg@arm.com