diff options
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 |
commit | d77c58794b44f88d00b894b9dda77b08c3f6b1b5 (patch) | |
tree | 33297dc3e0ced29c93d0eb9a21feb31c2143390f | |
parent | 47ba3927dbe2a98c95c21182e1b9cad6db920f00 (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.c | 8 | ||||
-rw-r--r-- | src/emu/debug/debugcpu.h | 5 |
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 |