From 2f5d710441dc001bee7e50c5091f4191704beb81 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 7 Sep 2023 11:09:33 -0400 Subject: [PATCH] Keep map small. --- Analyser/Static/Disassembler/Z80.cpp | 15 ++++++++++++--- Analyser/Static/MSX/StaticAnalyser.cpp | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Analyser/Static/Disassembler/Z80.cpp b/Analyser/Static/Disassembler/Z80.cpp index 92c6e53d0..d824f195b 100644 --- a/Analyser/Static/Disassembler/Z80.cpp +++ b/Analyser/Static/Disassembler/Z80.cpp @@ -546,8 +546,17 @@ struct Z80Disassembler { disassembly.disassembly.internal_calls.insert(entry_point); Accessor accessor(memory, address_mapper, entry_point); - auto &touched = disassembly.touched[entry_point]; - touched = entry_point; + uint16_t *touched = nullptr; + auto lower_bound = disassembly.touched.lower_bound(entry_point); + if(lower_bound != disassembly.touched.begin()) { + --lower_bound; + if(lower_bound->second == entry_point) { + touched = &lower_bound->second; + } + } else { + touched = &disassembly.touched[entry_point]; + *touched = entry_point; + } while(!accessor.at_end()) { Instruction instruction; @@ -562,7 +571,7 @@ struct Z80Disassembler { disassembly.disassembly.instructions_by_address[instruction.address] = instruction; // Apply all touches. - touched = accessor.address(); + *touched = accessor.address(); // Update access tables. int access_type = diff --git a/Analyser/Static/MSX/StaticAnalyser.cpp b/Analyser/Static/MSX/StaticAnalyser.cpp index 9bf91d7cb..2b8f6415d 100644 --- a/Analyser/Static/MSX/StaticAnalyser.cpp +++ b/Analyser/Static/MSX/StaticAnalyser.cpp @@ -115,7 +115,7 @@ static Analyser::Static::TargetList CartridgeTargetsFrom( // be at play; disassemble to try to figure it out. std::vector first_8k; first_8k.insert(first_8k.begin(), segment.data.begin(), segment.data.begin() + 8192); - Analyser::Static::Z80::Disassembly disassembly = + const Analyser::Static::Z80::Disassembly disassembly = Analyser::Static::Z80::Disassemble( first_8k, Analyser::Static::Disassembler::OffsetMapper(start_address),