diff --git a/UI/DevScreens.cpp b/UI/DevScreens.cpp index bc8ec402f..5e3528c96 100644 --- a/UI/DevScreens.cpp +++ b/UI/DevScreens.cpp @@ -27,6 +27,7 @@ #include "UI/DevScreens.h" #include "UI/GameSettingsScreen.h" #include "Common/LogManager.h" +#include "Core/MemMap.h" #include "Core/Config.h" #include "Core/MIPS/MIPSTables.h" #include "Core/MIPS/JitCommon/JitCommon.h" @@ -264,6 +265,7 @@ void JitCompareScreen::CreateViews() { leftColumn->Add(new Choice("Current"))->OnClick.Handle(this, &JitCompareScreen::OnCurrentBlock); leftColumn->Add(new Choice("Random"))->OnClick.Handle(this, &JitCompareScreen::OnRandomBlock); + leftColumn->Add(new Choice("Random VFPU"))->OnClick.Handle(this, &JitCompareScreen::OnRandomVFPUBlock); leftColumn->Add(new Choice(d->T("Back")))->OnClick.Handle(this, &UIScreen::OnBack); blockName_ = leftColumn->Add(new TextView("no block")); } @@ -347,6 +349,33 @@ UI::EventReturn JitCompareScreen::OnRandomBlock(UI::EventParams &e) { return UI::EVENT_DONE; } +UI::EventReturn JitCompareScreen::OnRandomVFPUBlock(UI::EventParams &e) { + JitBlockCache *blockCache = MIPSComp::jit->GetBlockCache(); + int numBlocks = blockCache->GetNumBlocks(); + if (numBlocks > 0) { + bool anyVFPU = false; + int tries = 0; + while (!anyVFPU && tries < 10000) { + currentBlock_ = rand() % numBlocks; + const JitBlock *b = blockCache->GetBlock(currentBlock_); + for (u32 addr = b->originalAddress; addr <= b->originalAddress + b->originalSize; addr += 4) { + MIPSOpcode opcode = Memory::Read_Instruction(addr); + if (MIPSGetInfo(opcode) & IS_VFPU) { + char temp[256]; + MIPSDisAsm(opcode, addr, temp); + INFO_LOG(HLE, "Stopping VFPU instruction: %s", temp) + anyVFPU = true; + break; + } + } + tries++; + } + } + UpdateDisasm(); + return UI::EVENT_DONE; +} + + UI::EventReturn JitCompareScreen::OnCurrentBlock(UI::EventParams &e) { JitBlockCache *blockCache = MIPSComp::jit->GetBlockCache(); std::vector blockNum; diff --git a/UI/DevScreens.h b/UI/DevScreens.h index 26b56bb29..ed634236d 100644 --- a/UI/DevScreens.h +++ b/UI/DevScreens.h @@ -75,6 +75,7 @@ public: private: void UpdateDisasm(); UI::EventReturn OnRandomBlock(UI::EventParams &e); + UI::EventReturn OnRandomVFPUBlock(UI::EventParams &e); UI::EventReturn OnCurrentBlock(UI::EventParams &e); int currentBlock_;