From 69dc836977e20108f0a1c8bc62abd1c22733f71d Mon Sep 17 00:00:00 2001 From: Merry Date: Tue, 13 Feb 2024 02:21:22 +0000 Subject: [PATCH] backend/arm64: A64: Implement DumpDisassembly --- src/dynarmic/backend/arm64/a64_interface.cpp | 2 +- src/dynarmic/backend/arm64/address_space.cpp | 11 +++++++++++ src/dynarmic/backend/arm64/address_space.h | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/dynarmic/backend/arm64/a64_interface.cpp b/src/dynarmic/backend/arm64/a64_interface.cpp index b80e8b39..7d771678 100644 --- a/src/dynarmic/backend/arm64/a64_interface.cpp +++ b/src/dynarmic/backend/arm64/a64_interface.cpp @@ -149,7 +149,7 @@ struct Jit::Impl final { } void DumpDisassembly() const { - ASSERT_FALSE("Unimplemented"); + current_address_space.DumpDisassembly(); } std::vector Disassemble() const { diff --git a/src/dynarmic/backend/arm64/address_space.cpp b/src/dynarmic/backend/arm64/address_space.cpp index 10df477d..2c7ae777 100644 --- a/src/dynarmic/backend/arm64/address_space.cpp +++ b/src/dynarmic/backend/arm64/address_space.cpp @@ -3,6 +3,10 @@ * SPDX-License-Identifier: 0BSD */ +#include + +#include + #include "dynarmic/backend/arm64/a64_address_space.h" #include "dynarmic/backend/arm64/a64_jitstate.h" #include "dynarmic/backend/arm64/abi.h" @@ -11,6 +15,7 @@ #include "dynarmic/backend/arm64/stack_layout.h" #include "dynarmic/common/cast_util.h" #include "dynarmic/common/fp/fpcr.h" +#include "dynarmic/common/llvm_disassemble.h" #include "dynarmic/interface/exclusive_monitor.h" namespace Dynarmic::Backend::Arm64 { @@ -92,6 +97,12 @@ void AddressSpace::ClearCache() { code.set_offset(prelude_info.end_of_prelude); } +void AddressSpace::DumpDisassembly() const { + for (u32* ptr = mem.ptr(); ptr < code.xptr(); ptr++) { + std::printf("%s", Common::DisassembleAArch64(*ptr, mcl::bit_cast(ptr)).c_str()); + } +} + size_t AddressSpace::GetRemainingSize() { return code_cache_size - static_cast(code.offset()); } diff --git a/src/dynarmic/backend/arm64/address_space.h b/src/dynarmic/backend/arm64/address_space.h index a5fe7513..835566bd 100644 --- a/src/dynarmic/backend/arm64/address_space.h +++ b/src/dynarmic/backend/arm64/address_space.h @@ -43,6 +43,8 @@ public: void ClearCache(); + void DumpDisassembly() const; + protected: virtual EmitConfig GetEmitConfig() = 0; virtual void RegisterNewBasicBlock(const IR::Block& block, const EmittedBlockInfo& block_info) = 0;