|
|
|
@ -32,27 +32,26 @@ |
|
|
|
#include "dynarmic/frontend/A64/translate/a64_translate.h"
|
|
|
|
#include "dynarmic/frontend/A64/translate/impl/impl.h"
|
|
|
|
#include "dynarmic/interface/A32/a32.h"
|
|
|
|
#include "dynarmic/interface/A32/config.h"
|
|
|
|
#include "dynarmic/interface/A32/disassembler.h"
|
|
|
|
#include "dynarmic/ir/basic_block.h"
|
|
|
|
#include "dynarmic/ir/opt_passes.h"
|
|
|
|
|
|
|
|
using namespace Dynarmic; |
|
|
|
|
|
|
|
const char* GetNameOfA32Instruction(u32 instruction) { |
|
|
|
if (auto vfp_decoder = A32::DecodeVFP<A32::TranslatorVisitor>(instruction)) { |
|
|
|
return vfp_decoder->get().GetName(); |
|
|
|
} else if (auto asimd_decoder = A32::DecodeASIMD<A32::TranslatorVisitor>(instruction)) { |
|
|
|
return asimd_decoder->get().GetName(); |
|
|
|
} else if (auto decoder = A32::DecodeArm<A32::TranslatorVisitor>(instruction)) { |
|
|
|
return decoder->get().GetName(); |
|
|
|
} |
|
|
|
std::string_view GetNameOfA32Instruction(u32 instruction) { |
|
|
|
//if (auto const vfp_decoder = A32::DecodeVFP<A32::TranslatorVisitor>(instruction))
|
|
|
|
// return *A32::GetNameVFP<A32::TranslatorVisitor>(instruction);
|
|
|
|
//else if (auto const asimd_decoder = A32::DecodeASIMD<A32::TranslatorVisitor>(instruction))
|
|
|
|
// return *A32::GetNameASIMD<A32::TranslatorVisitor>(instruction);
|
|
|
|
//else if (auto const decoder = A32::DecodeArm<A32::TranslatorVisitor>(instruction))
|
|
|
|
// return *A32::GetNameARM<A32::TranslatorVisitor>(instruction);
|
|
|
|
return "<null>"; |
|
|
|
} |
|
|
|
|
|
|
|
const char* GetNameOfA64Instruction(u32 instruction) { |
|
|
|
if (auto decoder = A64::Decode<A64::TranslatorVisitor>(instruction)) { |
|
|
|
return decoder->get().GetName(); |
|
|
|
} |
|
|
|
std::string_view GetNameOfA64Instruction(u32 instruction) { |
|
|
|
//if (auto const decoder = A64::Decode<A64::TranslatorVisitor>(instruction))
|
|
|
|
// return *A64::GetName<A64::TranslatorVisitor>(instruction);
|
|
|
|
return "<null>"; |
|
|
|
} |
|
|
|
|
|
|
|
@ -66,7 +65,7 @@ void PrintA32Instruction(u32 instruction) { |
|
|
|
fmt::print("should_continue: {}\n\n", should_continue); |
|
|
|
fmt::print("IR:\n"); |
|
|
|
fmt::print("{}\n", IR::DumpBlock(ir_block)); |
|
|
|
Optimization::Optimize(ir_block, conf, {}); |
|
|
|
Optimization::Optimize(ir_block, A32::UserConfig{}, {}); |
|
|
|
fmt::print("Optimized IR:\n"); |
|
|
|
fmt::print("{}\n", IR::DumpBlock(ir_block)); |
|
|
|
} |
|
|
|
@ -81,7 +80,7 @@ void PrintA64Instruction(u32 instruction) { |
|
|
|
fmt::print("should_continue: {}\n\n", should_continue); |
|
|
|
fmt::print("IR:\n"); |
|
|
|
fmt::print("{}\n", IR::DumpBlock(ir_block)); |
|
|
|
Optimization::Optimize(ir_block, conf, {}); |
|
|
|
Optimization::Optimize(ir_block, A64::UserConfig{}, {}); |
|
|
|
fmt::print("Optimized IR:\n"); |
|
|
|
fmt::print("{}\n", IR::DumpBlock(ir_block)); |
|
|
|
} |
|
|
|
@ -99,7 +98,7 @@ void PrintThumbInstruction(u32 instruction) { |
|
|
|
fmt::print("should_continue: {}\n\n", should_continue); |
|
|
|
fmt::print("IR:\n"); |
|
|
|
fmt::print("{}\n", IR::DumpBlock(ir_block)); |
|
|
|
Optimization::Optimize(ir_block, conf, {}); |
|
|
|
Optimization::Optimize(ir_block, A32::UserConfig{}, {}); |
|
|
|
fmt::print("Optimized IR:\n"); |
|
|
|
fmt::print("{}\n", IR::DumpBlock(ir_block)); |
|
|
|
} |
|
|
|
|