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