51 m_map.insert(AddressMap::value_type(address, dflt));
53 AddressMap::iterator
i = r.first;
62 if (type == AccessType_Write)
74 assert(m_map.count(address));
80 assert(entry.m_starving.isElement(unlocker));
81 assert(entry.m_marked.isSubset(entry.m_starving));
83 entry.m_marked.remove(unlocker);
84 entry.m_request_to_write.remove(unlocker);
85 assert(entry.m_marked.isSubset(entry.m_starving));
88 if (entry.m_starving.isEmpty()) {
89 assert(entry.m_marked.isEmpty());
100 AddressMap::const_iterator
i = m_map.find(address);
101 if (i == m_map.end()) {
121 AddressMap::const_iterator
i = m_map.find(address);
122 assert(i != m_map.end());
131 AddressMap::const_iterator
i = m_map.find(address);
132 assert(i != m_map.end());
134 if (entry.m_request_to_write.
135 isElement(entry.m_starving.smallestElement())) {
136 return AccessType_Write;
138 return AccessType_Read;
146 AddressMap::iterator
i = m_map.find(address);
147 if (i == m_map.end())
165 return m_map.count(address) > 0;
172 AddressMap::const_iterator
i = m_map.find(address);
173 if (i == m_map.end())
184 AddressMap::const_iterator
i = m_map.find(address);
185 if (i == m_map.end())
NetDest m_request_to_write
void persistentRequestUnlock(Addr address, MachineID unlocker)
bool okToIssueStarving(Addr address, MachineID machID) const
MachineID smallestElement() const
Overload hash function for BasicBlockRange type.
void add(MachineID newElement)
bool isSubset(const NetDest &test) const
void remove(MachineID oldElement)
void print(std::ostream &out) const
bool isElement(MachineID element) const
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
int countReadStarvingForAddress(Addr addr) const
Addr makeLineAddress(Addr addr)
bool isLocked(Addr addr) const
MachineID findSmallest(Addr address) const
void markEntries(Addr address)
int countStarvingForAddress(Addr addr) const
AccessType typeOfSmallest(Addr address) const
void persistentRequestLock(Addr address, MachineID locker, AccessType type)