From d77c58794b44f88d00b894b9dda77b08c3f6b1b5 Mon Sep 17 00:00:00 2001 From: Fabrice Bellet Date: Fri, 12 Dec 2014 13:47:25 +0100 Subject: [PATCH] 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. --- src/emu/debug/debugcpu.c | 8 ++++---- 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