mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 18:28:35 +12:00
PPU analyser optimizations
This commit is contained in:
parent
d856dc89a8
commit
dceba8a92b
1 changed files with 7 additions and 9 deletions
|
@ -545,6 +545,7 @@ void ppu_module::analyse(u32 lib_toc, u32 entry)
|
||||||
|
|
||||||
// Known functions
|
// Known functions
|
||||||
std::map<u32, ppu_function> fmap;
|
std::map<u32, ppu_function> fmap;
|
||||||
|
std::set<u32> known_functions;
|
||||||
|
|
||||||
// Function analysis workload
|
// Function analysis workload
|
||||||
std::vector<std::reference_wrapper<ppu_function>> func_queue;
|
std::vector<std::reference_wrapper<ppu_function>> func_queue;
|
||||||
|
@ -614,15 +615,8 @@ void ppu_module::analyse(u32 lib_toc, u32 entry)
|
||||||
// Get next reliable function address
|
// Get next reliable function address
|
||||||
auto get_limit = [&](u32 addr) -> u32
|
auto get_limit = [&](u32 addr) -> u32
|
||||||
{
|
{
|
||||||
for (auto it = fmap.lower_bound(addr), end = fmap.end(); it != end; it++)
|
auto it = known_functions.lower_bound(addr);
|
||||||
{
|
return it == known_functions.end() ? end : *it;
|
||||||
if (test(it->second.attr, ppu_attr::known_addr))
|
|
||||||
{
|
|
||||||
return it->first;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return end;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Find references indiscriminately
|
// Find references indiscriminately
|
||||||
|
@ -705,6 +699,7 @@ void ppu_module::analyse(u32 lib_toc, u32 entry)
|
||||||
TOCs.emplace(toc);
|
TOCs.emplace(toc);
|
||||||
auto& func = add_func(addr, addr_heap.count(ptr.addr()) ? toc : 0, 0);
|
auto& func = add_func(addr, addr_heap.count(ptr.addr()) ? toc : 0, 0);
|
||||||
func.attr += ppu_attr::known_addr;
|
func.attr += ppu_attr::known_addr;
|
||||||
|
known_functions.emplace(addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -835,6 +830,7 @@ void ppu_module::analyse(u32 lib_toc, u32 entry)
|
||||||
//func.attr += ppu_attr::known_addr;
|
//func.attr += ppu_attr::known_addr;
|
||||||
//func.attr += ppu_attr::known_size;
|
//func.attr += ppu_attr::known_size;
|
||||||
//func.size = size;
|
//func.size = size;
|
||||||
|
//known_functions.emplace(func);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -999,6 +995,7 @@ void ppu_module::analyse(u32 lib_toc, u32 entry)
|
||||||
func.size = 0x20;
|
func.size = 0x20;
|
||||||
func.blocks.emplace(func.addr, func.size);
|
func.blocks.emplace(func.addr, func.size);
|
||||||
func.attr += ppu_attr::known_addr;
|
func.attr += ppu_attr::known_addr;
|
||||||
|
known_functions.emplace(func.addr);
|
||||||
func.attr += ppu_attr::known_size;
|
func.attr += ppu_attr::known_size;
|
||||||
|
|
||||||
// Look for another imports to fill gaps (hack)
|
// Look for another imports to fill gaps (hack)
|
||||||
|
@ -1020,6 +1017,7 @@ void ppu_module::analyse(u32 lib_toc, u32 entry)
|
||||||
next.attr += ppu_attr::known_addr;
|
next.attr += ppu_attr::known_addr;
|
||||||
next.attr += ppu_attr::known_size;
|
next.attr += ppu_attr::known_size;
|
||||||
p2 += 8;
|
p2 += 8;
|
||||||
|
known_functions.emplace(next.addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue