106 bool is_entrypoint =
false);
133 void RegisterModule(
const std::string& module_id, u32 code_base, RegisterFn register_func,
134 std::span<const u8> recompiled_code = {});
148 bool Run(
ThreadState* thread_state, u32 address, std::span<const u64> args);
149 u64 RunInterrupt(
ThreadState* thread_state, u32 address, u64 args[],
size_t arg_count);
156 u32 next_thunk_address;
160 ModuleTable* FindModuleByAddress(u32 guest_address);
164 std::unordered_map<u32, ::PPCFunc*> function_table_;
166 std::vector<ModuleTable> module_tables_;
169 u32 entrypoint_code_base_ = 0;
171 bool registering_ =
false;
172 std::vector<u32> registered_addresses_;
174 struct ModuleRegistration {
176 std::vector<u32> addresses;
179 std::unordered_map<std::string, ModuleRegistration> module_addresses_;
182 mutable std::recursive_mutex dispatch_mutex_;
183 std::atomic<u64> graphics_interrupt_{0};
187 mutable std::mutex recompiled_code_mutex_;
188 std::vector<std::pair<std::string, std::span<const u8>>> recompiled_code_;