#pragma once struct RecompilerSwitchTable { uint32_t r; std::vector labels; }; struct RecompilerMidAsmHook { std::string name; std::vector 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 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 functions; std::unordered_map invalidInstructions; std::unordered_map midAsmHooks; void Load(const std::string_view& configFilePath); };