#pragma once struct RecompilerSwitchTable { uint32_t r; std::vector<uint32_t> labels; }; struct RecompilerMidAsmHook { std::string name; std::vector<std::string> registers; bool ret = false; bool returnOnTrue = false; bool returnOnFalse = false; uint32_t jumpAddress = 0; uint32_t jumpAddressOnTrue = 0; uint32_t jumpAddressOnFalse = 0; }; struct RecompilerConfig { std::string directoryPath; std::string filePath; std::string outDirectoryPath; std::string switchTableFilePath; std::unordered_map<uint32_t, RecompilerSwitchTable> switchTables; bool skipLr = false; bool ctrAsLocalVariable = false; bool xerAsLocalVariable = false; bool reservedRegisterAsLocalVariable = false; bool skipMsr = false; bool crRegistersAsLocalVariables = false; bool nonArgumentRegistersAsLocalVariables = false; bool nonVolatileRegistersAsLocalVariables = false; uint32_t restGpr14Address = 0; uint32_t saveGpr14Address = 0; uint32_t restFpr14Address = 0; uint32_t saveFpr14Address = 0; uint32_t restVmx14Address = 0; uint32_t saveVmx14Address = 0; uint32_t restVmx64Address = 0; uint32_t saveVmx64Address = 0; uint32_t longJmpAddress = 0; uint32_t setJmpAddress = 0; std::unordered_map<uint32_t, uint32_t> functions; std::unordered_map<uint32_t, uint32_t> invalidInstructions; std::unordered_map<uint32_t, RecompilerMidAsmHook> midAsmHooks; void Load(const std::string_view& configFilePath); };