Fix HLE LWMutex setting - Implement dynamic initialization of HLE functions

This commit is contained in:
Eladash 2021-07-31 20:29:36 +03:00 committed by Ivan
parent 6527eef655
commit a0c1b250b6
5 changed files with 70 additions and 18 deletions

View file

@ -60,6 +60,19 @@ ppu_static_module::ppu_static_module(const char* name)
ppu_module_manager::register_module(this);
}
void ppu_static_module::add_init_func(void(*func)(ppu_static_module*))
{
m_on_init.emplace_back(func);
}
void ppu_static_module::initialize()
{
for (auto func : m_on_init)
{
func(this);
}
}
void ppu_module_manager::register_module(ppu_static_module* _module)
{
ppu_module_manager::s_module_map.emplace(_module->name, _module);
@ -96,6 +109,14 @@ const ppu_static_module* ppu_module_manager::get_module(const std::string& name)
return found != map.end() ? found->second : nullptr;
}
void ppu_module_manager::initialize_modules()
{
for (auto& _module : s_module_map)
{
_module.second->initialize();
}
}
// Global linkage information
struct ppu_linkage_info
{
@ -136,6 +157,8 @@ static void ppu_initialize_modules(ppu_linkage_info* link)
return;
}
ppu_module_manager::initialize_modules();
const std::initializer_list<const ppu_static_module*> registered
{
&ppu_module_manager::cellAdec,