50,51d49
< m_use_map = p->use_map;
< m_map_levels = p->map_levels;
58a57,60
> m_entries = new AbstractEntry*[m_num_entries];
> for (int i = 0; i < m_num_entries; i++)
> m_entries[i] = NULL;
> m_ram = g_system_ptr->getMemoryVector();
60,69d61
< if (m_use_map) {
< m_sparseMemory = new SparseMemory(m_map_levels);
< g_system_ptr->registerSparseMemory(m_sparseMemory);
< } else {
< m_entries = new AbstractEntry*[m_num_entries];
< for (int i = 0; i < m_num_entries; i++)
< m_entries[i] = NULL;
< m_ram = g_system_ptr->getMemoryVector();
< }
<
83,87c75,77
< if (m_entries != NULL) {
< for (uint64 i = 0; i < m_num_entries; i++) {
< if (m_entries[i] != NULL) {
< delete m_entries[i];
< }
---
> for (uint64 i = 0; i < m_num_entries; i++) {
> if (m_entries[i] != NULL) {
> delete m_entries[i];
89,91d78
< delete [] m_entries;
< } else if (m_use_map) {
< delete m_sparseMemory;
92a80
> delete [] m_entries;
133,139c121,123
< if (m_use_map) {
< return m_sparseMemory->lookup(address);
< } else {
< uint64_t idx = mapAddressToLocalIdx(address);
< assert(idx < m_num_entries);
< return m_entries[idx];
< }
---
> uint64_t idx = mapAddressToLocalIdx(address);
> assert(idx < m_num_entries);
> return m_entries[idx];
149,158c133,137
< if (m_use_map) {
< m_sparseMemory->add(address, entry);
< entry->changePermission(AccessPermission_Read_Write);
< } else {
< idx = mapAddressToLocalIdx(address);
< assert(idx < m_num_entries);
< entry->getDataBlk().assign(m_ram->getBlockPtr(address));
< entry->changePermission(AccessPermission_Read_Only);
< m_entries[idx] = entry;
< }
---
> idx = mapAddressToLocalIdx(address);
> assert(idx < m_num_entries);
> entry->getDataBlk().assign(m_ram->getBlockPtr(address));
> entry->changePermission(AccessPermission_Read_Only);
> m_entries[idx] = entry;
164,189d142
< DirectoryMemory::invalidateBlock(PhysAddress address)
< {
< if (m_use_map) {
< assert(m_sparseMemory->exist(address));
< m_sparseMemory->remove(address);
< }
< #if 0
< else {
< assert(isPresent(address));
<
< int64 index = address.memoryModuleIndex();
<
< if (index < 0 || index > m_size) {
< ERROR_MSG("Directory Memory Assertion: "
< "accessing memory out of range.");
< }
<
< if (m_entries[index] != NULL){
< delete m_entries[index];
< m_entries[index] = NULL;
< }
< }
< #endif
< }
<
< void
195,202d147
< DirectoryMemory::regStats()
< {
< if (m_use_map) {
< m_sparseMemory->regStats(name());
< }
< }
<
< void