mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Clean up DisassembleBlock and JitInterface::GetHostCode
This commit is contained in:
@ -16,6 +16,8 @@
|
||||
#include <disasm.h> // Bochs
|
||||
#endif
|
||||
|
||||
#include "Common/Assert.h"
|
||||
#include "Common/VariantUtil.h"
|
||||
#include "Core/PowerPC/JitInterface.h"
|
||||
|
||||
#if defined(HAVE_LLVM)
|
||||
@ -169,21 +171,39 @@ std::unique_ptr<HostDisassembler> GetNewDisassembler(const std::string& arch)
|
||||
return std::make_unique<HostDisassembler>();
|
||||
}
|
||||
|
||||
std::string DisassembleBlock(HostDisassembler* disasm, u32* address, u32* host_instructions_count,
|
||||
u32* code_size)
|
||||
DisassembleResult DisassembleBlock(HostDisassembler* disasm, u32 address)
|
||||
{
|
||||
const u8* code;
|
||||
int res = JitInterface::GetHostCode(address, &code, code_size);
|
||||
auto res = JitInterface::GetHostCode(address);
|
||||
|
||||
if (res == 1)
|
||||
{
|
||||
*host_instructions_count = 0;
|
||||
return "(No JIT active)";
|
||||
}
|
||||
else if (res == 2)
|
||||
{
|
||||
*host_instructions_count = 0;
|
||||
return "(No translation)";
|
||||
}
|
||||
return disasm->DisassembleHostBlock(code, *code_size, host_instructions_count, (u64)code);
|
||||
return std::visit(overloaded{[&](JitInterface::GetHostCodeError error) {
|
||||
DisassembleResult result;
|
||||
switch (error)
|
||||
{
|
||||
case JitInterface::GetHostCodeError::NoJitActive:
|
||||
result.text = "(No JIT active)";
|
||||
break;
|
||||
case JitInterface::GetHostCodeError::NoTranslation:
|
||||
result.text = "(No translation)";
|
||||
break;
|
||||
default:
|
||||
ASSERT(false);
|
||||
break;
|
||||
}
|
||||
result.entry_address = address;
|
||||
result.instruction_count = 0;
|
||||
result.code_size = 0;
|
||||
return result;
|
||||
},
|
||||
[&](JitInterface::GetHostCodeResult host_result) {
|
||||
DisassembleResult new_result;
|
||||
u32 instruction_count = 0;
|
||||
new_result.text = disasm->DisassembleHostBlock(
|
||||
host_result.code, host_result.code_size, &instruction_count,
|
||||
(u64)host_result.code);
|
||||
new_result.entry_address = host_result.entry_address;
|
||||
new_result.code_size = host_result.code_size;
|
||||
new_result.instruction_count = instruction_count;
|
||||
return new_result;
|
||||
}},
|
||||
res);
|
||||
}
|
||||
|
Reference in New Issue
Block a user