summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Fabrice Bellet <fabrice@bellet.info>2014-12-12 13:47:25 +0100
committer Olivier Galibert <galibert@pobox.com>2014-12-18 08:27:14 +0100
commitd77c58794b44f88d00b894b9dda77b08c3f6b1b5 (patch)
tree33297dc3e0ced29c93d0eb9a21feb31c2143390f
parent47ba3927dbe2a98c95c21182e1b9cad6db920f00 (diff)
debug: better handling of duplicate memory access
Don't remove and reinsert nodes that correspond to a duplicate memory access, because tree rebalancing kills performances. Update the node's element content instead.
-rw-r--r--src/emu/debug/debugcpu.c8
-rw-r--r--src/emu/debug/debugcpu.h5
2 files changed, 8 insertions, 5 deletions
diff --git a/src/emu/debug/debugcpu.c b/src/emu/debug/debugcpu.c
index da35ad32ab3..2ee63de182a 100644
--- a/src/emu/debug/debugcpu.c
+++ b/src/emu/debug/debugcpu.c
@@ -1995,11 +1995,11 @@ void device_debug::memory_write_hook(address_space &space, offs_t address, UINT6
if (m_track_mem)
{
dasm_memory_access newAccess(space.spacenum(), address, data, history_pc(0));
- if (!m_track_mem_set.insert(newAccess))
- {
- m_track_mem_set.remove(newAccess);
+ dasm_memory_access* trackedAccess = m_track_mem_set.find(newAccess);
+ if (trackedAccess)
+ trackedAccess->m_pc = newAccess.m_pc;
+ else
m_track_mem_set.insert(newAccess);
- }
}
watchpoint_check(space, WATCHPOINT_WRITE, address, data, mem_mask);
}
diff --git a/src/emu/debug/debugcpu.h b/src/emu/debug/debugcpu.h
index c28a56ac549..a6dabf44fae 100644
--- a/src/emu/debug/debugcpu.h
+++ b/src/emu/debug/debugcpu.h
@@ -418,7 +418,10 @@ private:
{
if ((m_address == rhs.m_address) && (m_address_space == rhs.m_address_space))
return m_data < rhs.m_data;
- return (m_address < rhs.m_address) && (m_address_space == rhs.m_address_space);
+ else if (m_address_space == rhs.m_address_space)
+ return m_address < rhs.m_address;
+ else
+ return m_address_space < rhs.m_address_space;
}
// Stores the PC for a given address, memory region, and data value