diff --git a/docs/Deps.md b/docs/Deps.md
index 162b83b5d6..2ff41cdb54 100644
--- a/docs/Deps.md
+++ b/docs/Deps.md
@@ -72,9 +72,6 @@ Certain other dependencies will be fetched by CPM regardless. System packages *c
On amd64:
* [xbyak](https://github.com/herumi/xbyak) - 7.22 or earlier is recommended
-* [zycore](https://github.com/zyantific/zycore-c)
-* [zydis](https://github.com/zyantific/zydis) 4+
-* Note: zydis and zycore-c MUST match. Using one as a system dependency and the other as a bundled dependency WILL break things
On aarch64 OR if `DYNARMIC_TESTS` is on:
* [oaknut](https://github.com/merryhime/oaknut) 2.0.1+
@@ -94,7 +91,7 @@ Click on the arrows to expand.
Arch Linux
```sh
-sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glslang libzip lz4 mbedtls ninja nlohmann-json openssl opus qt6-base qt6-multimedia sdl2 zlib zstd zip unzip zydis zycore vulkan-headers vulkan-utility-libraries libusb spirv-tools spirv-headers
+sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glslang libzip lz4 mbedtls ninja nlohmann-json openssl opus qt6-base qt6-multimedia sdl2 zlib zstd zip unzip vulkan-headers vulkan-utility-libraries libusb spirv-tools spirv-headers
```
* Building with QT Web Engine requires `qt6-webengine` as well.
@@ -106,7 +103,7 @@ sudo pacman -Syu --needed base-devel boost catch2 cmake enet ffmpeg fmt git glsl
Ubuntu, Debian, Mint Linux
```sh
-sudo apt-get install autoconf cmake g++ gcc git glslang-tools libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qt6-base-private-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev pkg-config zlib1g-dev libva-dev libvdpau-dev qt6-tools-dev libzydis-dev zydis-tools libzycore-dev libvulkan-dev spirv-tools spirv-headers libusb-1.0-0-dev libxbyak-dev libboost-dev libboost-fiber-dev libboost-context-dev libsdl2-dev libopus-dev libasound2t64 vulkan-utility-libraries-dev
+sudo apt-get install autoconf cmake g++ gcc git glslang-tools libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qt6-base-private-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev pkg-config zlib1g-dev libva-dev libvdpau-dev qt6-tools-dev libvulkan-dev spirv-tools spirv-headers libusb-1.0-0-dev libxbyak-dev libboost-dev libboost-fiber-dev libboost-context-dev libsdl2-dev libopus-dev libasound2t64 vulkan-utility-libraries-dev
```
* Ubuntu 22.04, Linux Mint 20, or Debian 12 or later is required.
@@ -189,7 +186,7 @@ brew install molten-vk vulkan-loader
FreeBSD
-As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/jwt-cpp devel/unordered-dense devel/zydis`
+As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/jwt-cpp devel/unordered-dense`
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
@@ -237,7 +234,7 @@ Then install the libraries: `sudo pkg install qt6 boost glslang libzip library/l
* Download and install all dependencies:
```
BASE="git make autoconf libtool automake-wrapper jq patch"
-MINGW="SDL2 cmake python-pip qt6-base toolchain ffmpeg boost catch fmt lz4 nlohmann-json openssl zlib zstd enet opus mbedtls vulkan-devel libusb vulkan-memory-allocator unordered_dense zydis clang ccache"
+MINGW="SDL2 cmake python-pip qt6-base toolchain ffmpeg boost catch fmt lz4 nlohmann-json openssl zlib zstd enet opus mbedtls vulkan-devel libusb vulkan-memory-allocator unordered_dense clang ccache"
packages="$BASE"
for pkg in $MINGW; do
@@ -260,7 +257,7 @@ pacman -Syu --needed --noconfirm $packages
HaikuOS
```sh
-pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt6_devel qt6_5compat_devel zydis_devel libusb1_devel libz_devel glslang mbedtls3
+pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt6_devel qt6_5compat_devel libusb1_devel libz_devel glslang mbedtls3
```
[Caveats](./Caveats.md#haikuos).
diff --git a/shell.nix b/shell.nix
index d4a67d8f97..549c91959d 100644
--- a/shell.nix
+++ b/shell.nix
@@ -10,7 +10,7 @@ pkgs.mkShellNoCC {
openssl boost fmt nlohmann_json lz4 zlib zstd
enet libopus vulkan-headers vulkan-utility-libraries
spirv-tools spirv-headers simpleini vulkan-memory-allocator
- vulkan-loader unzip mbedtls zydis glslang python3 httplib
+ vulkan-loader unzip mbedtls glslang python3 httplib
cpp-jwt ffmpeg-headless libusb1 cubeb
qt6.full # eden
SDL2 # eden-cli
diff --git a/src/dynarmic/CMakeLists.txt b/src/dynarmic/CMakeLists.txt
index 66f9b1f5cd..f0c2e7b188 100644
--- a/src/dynarmic/CMakeLists.txt
+++ b/src/dynarmic/CMakeLists.txt
@@ -137,8 +137,6 @@ endif()
if ("x86_64" IN_LIST ARCHITECTURE)
find_package(xbyak 7 CONFIG)
- find_package(zycore REQUIRED)
- find_package(zydis 4 REQUIRED)
endif()
if (DYNARMIC_USE_LLVM)
diff --git a/src/dynarmic/CMakeModules/dynarmicConfig.cmake.in b/src/dynarmic/CMakeModules/dynarmicConfig.cmake.in
index 51bb2dda16..ce14607c89 100644
--- a/src/dynarmic/CMakeModules/dynarmicConfig.cmake.in
+++ b/src/dynarmic/CMakeModules/dynarmicConfig.cmake.in
@@ -20,7 +20,6 @@ if (NOT @BUILD_SHARED_LIBS@)
if ("x86_64" IN_LIST ARCHITECTURE)
find_dependency(xbyak 7)
- find_dependency(Zydis 4)
endif()
if (@DYNARMIC_USE_LLVM@)
diff --git a/src/dynarmic/README.md b/src/dynarmic/README.md
index 6976f29c34..38248a0dc2 100644
--- a/src/dynarmic/README.md
+++ b/src/dynarmic/README.md
@@ -389,30 +389,3 @@ THE POSSIBILITY OF SUCH DAMAGE.
損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、
一切責任を負わないものとします。
```
-
-### zydis
-
-```
-The MIT License (MIT)
-
-Copyright (c) 2014-2020 Florian Bernd
-Copyright (c) 2014-2020 Joel Höner
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-```
diff --git a/src/dynarmic/externals/CMakeLists.txt b/src/dynarmic/externals/CMakeLists.txt
index ea666ddc52..1956499464 100644
--- a/src/dynarmic/externals/CMakeLists.txt
+++ b/src/dynarmic/externals/CMakeLists.txt
@@ -32,17 +32,3 @@ AddJsonPackage(
NAME mcl
BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS}
)
-
-# TODO(crueter): maybe it's just Gentoo but zydis system package really sucks
-if ("x86_64" IN_LIST ARCHITECTURE)
- set(CMAKE_DISABLE_FIND_PACKAGE_Doxygen ON)
- AddJsonPackage(
- NAME zycore
- BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS}
- )
-
- AddJsonPackage(
- NAME zydis
- BUNDLED_PACKAGE ${DYNARMIC_USE_BUNDLED_EXTERNALS}
- )
-endif()
diff --git a/src/dynarmic/externals/cpmfile.json b/src/dynarmic/externals/cpmfile.json
index f1fd47d556..584e1f9115 100644
--- a/src/dynarmic/externals/cpmfile.json
+++ b/src/dynarmic/externals/cpmfile.json
@@ -17,24 +17,5 @@
"patches": [
"0001-assert-macro.patch"
]
- },
- "zycore": {
- "package": "zycore",
- "repo": "zyantific/zycore-c",
- "sha": "75a36c45ae",
- "hash": "e1cf9bdd3163b6429eba94d0f9f82e343de33b77a838748f598c719913c9f91c502b818e37b716e174b55a3a26cdf39d665c4b50a548255973ac287c0e554fb6"
- },
- "zydis": {
- "package": "zydis",
- "version": "4",
- "repo": "zyantific/zydis",
- "sha": "c2d2bab025",
- "hash": "3808773593536f78d3ddaf4cf712101d3fb6d981c6cc55555ad686a9adbe3397a727f62f561e8d8755bdcd88a763777da30281cc2924fc160b0386c3f99f5bd9",
- "options": [
- "ZYDIS_BUILD_TOOLS OFF",
- "ZYDIS_BUILD_EXAMPLES OFF",
- "ZYDIS_BUILD_DOXYGEN OFF",
- "ZYAN_SYSTEM_ZYCORE ON"
- ]
}
}
diff --git a/src/dynarmic/src/dynarmic/CMakeLists.txt b/src/dynarmic/src/dynarmic/CMakeLists.txt
index 1c92e236c9..5d52637ec3 100644
--- a/src/dynarmic/src/dynarmic/CMakeLists.txt
+++ b/src/dynarmic/src/dynarmic/CMakeLists.txt
@@ -144,11 +144,7 @@ if ("x86_64" IN_LIST ARCHITECTURE)
target_compile_definitions(dynarmic PRIVATE XBYAK_STRICT_CHECK_MEM_REG_SIZE=0)
target_compile_definitions(dynarmic PRIVATE XBYAK_OLD_DISP_CHECK=1)
- target_link_libraries(dynarmic
- PRIVATE
- xbyak::xbyak
- Zydis::Zydis
- )
+ target_link_libraries(dynarmic PRIVATE xbyak::xbyak)
target_architecture_specific_sources(dynarmic "x86_64"
backend/x64/abi.cpp
@@ -192,8 +188,6 @@ if ("x86_64" IN_LIST ARCHITECTURE)
backend/x64/verbose_debugging_output.h
common/spin_lock_x64.cpp
common/spin_lock_x64.h
- common/x64_disassemble.cpp
- common/x64_disassemble.h
# A32
backend/x64/a32_emit_x64.cpp
backend/x64/a32_emit_x64.h
diff --git a/src/dynarmic/src/dynarmic/backend/arm64/a32_interface.cpp b/src/dynarmic/src/dynarmic/backend/arm64/a32_interface.cpp
index a22f296e94..a27740008b 100644
--- a/src/dynarmic/src/dynarmic/backend/arm64/a32_interface.cpp
+++ b/src/dynarmic/src/dynarmic/backend/arm64/a32_interface.cpp
@@ -125,10 +125,6 @@ struct Jit::Impl final {
current_state.exclusive_state = false;
}
- void DumpDisassembly() const {
- ASSERT_FALSE("Unimplemented");
- }
-
private:
void PerformRequestedCacheInvalidation(HaltReason hr) {
if (Has(hr, HaltReason::CacheInvalidation)) {
@@ -235,8 +231,4 @@ void Jit::ClearExclusiveState() {
impl->ClearExclusiveState();
}
-void Jit::DumpDisassembly() const {
- impl->DumpDisassembly();
-}
-
} // namespace Dynarmic::A32
diff --git a/src/dynarmic/src/dynarmic/backend/arm64/a64_interface.cpp b/src/dynarmic/src/dynarmic/backend/arm64/a64_interface.cpp
index 96170f08a8..c49312d458 100644
--- a/src/dynarmic/src/dynarmic/backend/arm64/a64_interface.cpp
+++ b/src/dynarmic/src/dynarmic/backend/arm64/a64_interface.cpp
@@ -151,12 +151,8 @@ struct Jit::Impl final {
return is_executing;
}
- void DumpDisassembly() const {
- current_address_space.DumpDisassembly();
- }
-
- std::vector Disassemble() const {
- ASSERT_FALSE("Unimplemented");
+ std::string Disassemble() const {
+ UNREACHABLE();
}
private:
@@ -315,11 +311,7 @@ bool Jit::IsExecuting() const {
return impl->IsExecuting();
}
-void Jit::DumpDisassembly() const {
- impl->DumpDisassembly();
-}
-
-std::vector Jit::Disassemble() const {
+std::string Jit::Disassemble() const {
return impl->Disassemble();
}
diff --git a/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp b/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp
index 5006e9e27a..8e8c8e5255 100644
--- a/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp
+++ b/src/dynarmic/src/dynarmic/backend/arm64/address_space.cpp
@@ -100,12 +100,6 @@ 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, std::bit_cast(ptr)).c_str());
- }
-}
-
size_t AddressSpace::GetRemainingSize() {
return code_cache_size - static_cast(code.offset());
}
diff --git a/src/dynarmic/src/dynarmic/backend/arm64/address_space.h b/src/dynarmic/src/dynarmic/backend/arm64/address_space.h
index 25b1ab4b04..d7d8cf38b6 100644
--- a/src/dynarmic/src/dynarmic/backend/arm64/address_space.h
+++ b/src/dynarmic/src/dynarmic/backend/arm64/address_space.h
@@ -44,9 +44,6 @@ public:
void InvalidateBasicBlocks(const ankerl::unordered_dense::set& descriptors);
void ClearCache();
-
- void DumpDisassembly() const;
-
protected:
virtual EmitConfig GetEmitConfig() = 0;
virtual void RegisterNewBasicBlock(const IR::Block& block, const EmittedBlockInfo& block_info) = 0;
diff --git a/src/dynarmic/src/dynarmic/backend/riscv64/a32_interface.cpp b/src/dynarmic/src/dynarmic/backend/riscv64/a32_interface.cpp
index 7ad0fd90b0..c567f4ae30 100644
--- a/src/dynarmic/src/dynarmic/backend/riscv64/a32_interface.cpp
+++ b/src/dynarmic/src/dynarmic/backend/riscv64/a32_interface.cpp
@@ -119,10 +119,6 @@ struct Jit::Impl final {
current_state.exclusive_state = false;
}
- void DumpDisassembly() const {
- UNIMPLEMENTED();
- }
-
private:
void RequestCacheInvalidation() {
// ASSERT_FALSE("Unimplemented");
@@ -213,8 +209,4 @@ void Jit::ClearExclusiveState() {
impl->ClearExclusiveState();
}
-void Jit::DumpDisassembly() const {
- impl->DumpDisassembly();
-}
-
} // namespace Dynarmic::A32
diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp
index a1fca21f47..db7fef5334 100644
--- a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp
+++ b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
/* This file is part of the dynarmic project.
* Copyright (c) 2022 MerryMage
* SPDX-License-Identifier: 0BSD
@@ -19,7 +22,6 @@
#include "dynarmic/backend/x64/emit_x64_memory.h"
#include "dynarmic/backend/x64/exclusive_monitor_friend.h"
#include "dynarmic/backend/x64/perf_map.h"
-#include "dynarmic/common/x64_disassemble.h"
#include "dynarmic/interface/exclusive_monitor.h"
namespace Dynarmic::Backend::X64 {
diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp b/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp
index 0de8aedc12..645845c58d 100644
--- a/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp
+++ b/src/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp
@@ -16,6 +16,7 @@
#include
#include
#include "dynarmic/common/common_types.h"
+#include "dynarmic/common/llvm_disassemble.h"
#include "dynarmic/backend/x64/a32_emit_x64.h"
#include "dynarmic/backend/x64/a32_jitstate.h"
@@ -24,7 +25,6 @@
#include "dynarmic/backend/x64/devirtualize.h"
#include "dynarmic/backend/x64/jitstate_info.h"
#include "dynarmic/common/atomic.h"
-#include "dynarmic/common/x64_disassemble.h"
#include "dynarmic/frontend/A32/translate/a32_translate.h"
#include "dynarmic/interface/A32/a32.h"
#include "dynarmic/ir/basic_block.h"
@@ -176,14 +176,10 @@ struct Jit::Impl {
return jit_state.SetFpscr(value);
}
- void DumpDisassembly() const {
+ std::string Disassemble() const {
const size_t size = reinterpret_cast(block_of_code.getCurr()) - reinterpret_cast(block_of_code.GetCodeBegin());
- Common::DumpDisassembledX64(block_of_code.GetCodeBegin(), size);
- }
-
- std::vector Disassemble() const {
- const size_t size = reinterpret_cast(block_of_code.getCurr()) - reinterpret_cast(block_of_code.GetCodeBegin());
- return Common::DisassembleX64(block_of_code.GetCodeBegin(), size);
+ auto const* p = reinterpret_cast(block_of_code.GetCodeBegin());
+ return Common::DisassembleX64(p, p + size);
}
private:
@@ -327,8 +323,4 @@ void Jit::ClearExclusiveState() {
impl->ClearExclusiveState();
}
-void Jit::DumpDisassembly() const {
- impl->DumpDisassembly();
-}
-
} // namespace Dynarmic::A32
diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp
index 8fd6777542..8ae5b30172 100644
--- a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp
+++ b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
/* This file is part of the dynarmic project.
* Copyright (c) 2022 MerryMage
* SPDX-License-Identifier: 0BSD
@@ -20,7 +23,6 @@
#include "dynarmic/backend/x64/exclusive_monitor_friend.h"
#include "dynarmic/backend/x64/perf_map.h"
#include "dynarmic/common/spin_lock_x64.h"
-#include "dynarmic/common/x64_disassemble.h"
#include "dynarmic/interface/exclusive_monitor.h"
namespace Dynarmic::Backend::X64 {
diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp b/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp
index e23fc782ad..b895e42251 100644
--- a/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp
+++ b/src/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp
@@ -12,6 +12,7 @@
#include
#include "dynarmic/common/assert.h"
+#include "dynarmic/common/llvm_disassemble.h"
#include
#include
@@ -21,7 +22,6 @@
#include "dynarmic/backend/x64/devirtualize.h"
#include "dynarmic/backend/x64/jitstate_info.h"
#include "dynarmic/common/atomic.h"
-#include "dynarmic/common/x64_disassemble.h"
#include "dynarmic/frontend/A64/translate/a64_translate.h"
#include "dynarmic/interface/A64/a64.h"
#include "dynarmic/ir/basic_block.h"
@@ -231,14 +231,10 @@ public:
return is_executing;
}
- void DumpDisassembly() const {
+ std::string Disassemble() const {
const size_t size = reinterpret_cast(block_of_code.getCurr()) - reinterpret_cast(block_of_code.GetCodeBegin());
- Common::DumpDisassembledX64(block_of_code.GetCodeBegin(), size);
- }
-
- std::vector Disassemble() const {
- const size_t size = reinterpret_cast(block_of_code.getCurr()) - reinterpret_cast(block_of_code.GetCodeBegin());
- return Common::DisassembleX64(block_of_code.GetCodeBegin(), size);
+ auto const* p = reinterpret_cast(block_of_code.GetCodeBegin());
+ return Common::DisassembleX64(p, p + size);
}
private:
@@ -427,11 +423,7 @@ bool Jit::IsExecuting() const {
return impl->IsExecuting();
}
-void Jit::DumpDisassembly() const {
- return impl->DumpDisassembly();
-}
-
-std::vector Jit::Disassemble() const {
+std::string Jit::Disassemble() const {
return impl->Disassemble();
}
diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc
index 04eeadb4d6..e2ae38c203 100644
--- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc
+++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.cpp.inc
@@ -40,11 +40,9 @@ FakeCall AxxEmitX64::FastmemCallback(u64 rip_) {
}
return result;
} else {
- fmt::print("dynarmic: Segfault happened within JITted code at rip = {:016x}\n", rip_);
- fmt::print("Segfault wasn't at a fastmem patch location!\n");
- fmt::print("Now dumping code.......\n\n");
- Common::DumpDisassembledX64((void*)(rip_ & ~u64(0xFFF)), 0x1000);
- ASSERT_FALSE("iter != fastmem_patch_info.end()");
+ fmt::print("dynarmic: Segfault happened within JITted code at rip = {:016x}\n"
+ "Segfault wasn't at a fastmem patch location!\n", rip_);
+ UNREACHABLE(); //("iter != fastmem_patch_info.end()");
}
}
diff --git a/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp b/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp
index be8278dc27..068c531f70 100644
--- a/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp
+++ b/src/dynarmic/src/dynarmic/common/llvm_disassemble.cpp
@@ -24,9 +24,8 @@
namespace Dynarmic::Common {
std::string DisassembleX64(const void* begin, const void* end) {
- std::string result;
-
#ifdef DYNARMIC_USE_LLVM
+ std::string result;
LLVMInitializeX86TargetInfo();
LLVMInitializeX86TargetMC();
LLVMInitializeX86Disassembler();
@@ -51,18 +50,17 @@ std::string DisassembleX64(const void* begin, const void* end) {
}
LLVMDisasmDispose(llvm_ctx);
+ return result;
#else
- result += fmt::format("(recompile with DYNARMIC_USE_LLVM=ON to disassemble the generated x86_64 code)\n");
- result += fmt::format("start: {:016x}, end: {:016x}\n", std::bit_cast(begin), std::bit_cast(end));
+ return fmt::format(
+ "(recompile with DYNARMIC_USE_LLVM=ON to disassemble the generated x86_64 code)\n"
+ "start: {:016x}, end: {:016x}\n", std::bit_cast(begin), std::bit_cast(end));
#endif
-
- return result;
}
std::string DisassembleAArch32([[maybe_unused]] bool is_thumb, [[maybe_unused]] u32 pc, [[maybe_unused]] const u8* instructions, [[maybe_unused]] size_t length) {
- std::string result;
-
#ifdef DYNARMIC_USE_LLVM
+ std::string result;
LLVMInitializeARMTargetInfo();
LLVMInitializeARMTargetMC();
LLVMInitializeARMDisassembler();
@@ -97,16 +95,14 @@ std::string DisassembleAArch32([[maybe_unused]] bool is_thumb, [[maybe_unused]]
}
LLVMDisasmDispose(llvm_ctx);
+ return result;
#else
- result += fmt::format("(disassembly disabled)\n");
+ return fmt::format("(disassembly disabled)\n");
#endif
-
- return result;
}
std::string DisassembleAArch64([[maybe_unused]] u32 instruction, [[maybe_unused]] u64 pc) {
std::string result;
-
#ifdef DYNARMIC_USE_LLVM
LLVMInitializeAArch64TargetInfo();
LLVMInitializeAArch64TargetMC();
@@ -121,11 +117,10 @@ std::string DisassembleAArch64([[maybe_unused]] u32 instruction, [[maybe_unused]
result += '\n';
LLVMDisasmDispose(llvm_ctx);
+ return result;
#else
- result += fmt::format("(disassembly disabled)\n");
+ return fmt::format("(disassembly disabled)\n");
#endif
-
- return result;
}
} // namespace Dynarmic::Common
diff --git a/src/dynarmic/src/dynarmic/common/x64_disassemble.cpp b/src/dynarmic/src/dynarmic/common/x64_disassemble.cpp
deleted file mode 100644
index af37c93c02..0000000000
--- a/src/dynarmic/src/dynarmic/common/x64_disassemble.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-/* This file is part of the dynarmic project.
- * Copyright (c) 2021 MerryMage
- * SPDX-License-Identifier: 0BSD
- */
-
-#include "dynarmic/common/x64_disassemble.h"
-
-#include
-#include
-#include "dynarmic/common/common_types.h"
-
-namespace Dynarmic::Common {
-
-void DumpDisassembledX64(const void* ptr, size_t size) {
- ZydisDecoder decoder;
- ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_STACK_WIDTH_64);
-
- ZydisFormatter formatter;
- ZydisFormatterInit(&formatter, ZYDIS_FORMATTER_STYLE_INTEL);
-
- size_t offset = 0;
- ZydisDecodedInstruction instruction;
- ZydisDecodedOperand operands[ZYDIS_MAX_OPERAND_COUNT];
- while (ZYAN_SUCCESS(ZydisDecoderDecodeFull(&decoder, static_cast(ptr) + offset, size - offset, &instruction, operands))) {
- fmt::print("{:016x} ", (u64)ptr + offset);
-
- char buffer[256];
- ZydisFormatterFormatInstruction(&formatter, &instruction, operands, instruction.operand_count_visible, buffer, sizeof(buffer), reinterpret_cast(ptr) + offset, ZYAN_NULL);
- puts(buffer);
-
- offset += instruction.length;
- }
-}
-
-std::vector DisassembleX64(const void* ptr, size_t size) {
- std::vector result;
- ZydisDecoder decoder;
- ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_STACK_WIDTH_64);
-
- ZydisFormatter formatter;
- ZydisFormatterInit(&formatter, ZYDIS_FORMATTER_STYLE_INTEL);
-
- size_t offset = 0;
- ZydisDecodedInstruction instruction;
- ZydisDecodedOperand operands[ZYDIS_MAX_OPERAND_COUNT];
- while (ZYAN_SUCCESS(ZydisDecoderDecodeFull(&decoder, static_cast(ptr) + offset, size - offset, &instruction, operands))) {
- char buffer[256];
- ZydisFormatterFormatInstruction(&formatter, &instruction, operands, instruction.operand_count_visible, buffer, sizeof(buffer), reinterpret_cast(ptr) + offset, ZYAN_NULL);
-
- result.push_back(fmt::format("{:016x} {}", (u64)ptr + offset, buffer));
-
- offset += instruction.length;
- }
-
- return result;
-}
-} // namespace Dynarmic::Common
diff --git a/src/dynarmic/src/dynarmic/common/x64_disassemble.h b/src/dynarmic/src/dynarmic/common/x64_disassemble.h
deleted file mode 100644
index 0f56464175..0000000000
--- a/src/dynarmic/src/dynarmic/common/x64_disassemble.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-/* This file is part of the dynarmic project.
- * Copyright (c) 2021 MerryMage
- * SPDX-License-Identifier: 0BSD
- */
-
-#pragma once
-
-#include
-#include
-
-#include "dynarmic/common/common_types.h"
-
-namespace Dynarmic::Common {
-
-void DumpDisassembledX64(const void* ptr, size_t size);
-/**
- * Disassemble `size' bytes from `ptr' and return the disassembled lines as a vector
- * of strings.
- */
-std::vector DisassembleX64(const void* ptr, size_t size);
-} // namespace Dynarmic::Common
diff --git a/src/dynarmic/src/dynarmic/interface/A32/a32.h b/src/dynarmic/src/dynarmic/interface/A32/a32.h
index e1c5b40fd3..bc30b59c1e 100644
--- a/src/dynarmic/src/dynarmic/interface/A32/a32.h
+++ b/src/dynarmic/src/dynarmic/interface/A32/a32.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
/* This file is part of the dynarmic project.
* Copyright (c) 2016 MerryMage
* SPDX-License-Identifier: 0BSD
@@ -89,14 +92,9 @@ public:
return is_executing;
}
- /// Debugging: Dump a disassembly all compiled code to the console.
- void DumpDisassembly() const;
-
- /**
- * Disassemble the instructions following the current pc and return
- * the resulting instructions as a vector of their string representations.
- */
- std::vector Disassemble() const;
+ /// @brief Disassemble the instructions following the current pc and return
+ /// the resulting instructions as a vector of their string representations.
+ std::string Disassemble() const;
private:
bool is_executing = false;
diff --git a/src/dynarmic/src/dynarmic/interface/A64/a64.h b/src/dynarmic/src/dynarmic/interface/A64/a64.h
index a150da8448..e8d2352702 100644
--- a/src/dynarmic/src/dynarmic/interface/A64/a64.h
+++ b/src/dynarmic/src/dynarmic/interface/A64/a64.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
/* This file is part of the dynarmic project.
* Copyright (c) 2018 MerryMage
* SPDX-License-Identifier: 0BSD
@@ -119,14 +122,9 @@ public:
*/
bool IsExecuting() const;
- /// Debugging: Dump a disassembly all of compiled code to the console.
- void DumpDisassembly() const;
-
- /*
- * Disassemble the instructions following the current pc and return
- * the resulting instructions as a vector of their string representations.
- */
- std::vector Disassemble() const;
+ /// @brief Disassemble the instructions following the current pc and return
+ /// the resulting instructions as a vector of their string representations.
+ std::string Disassemble() const;
private:
struct Impl;
diff --git a/src/dynarmic/tests/A32/fuzz_arm.cpp b/src/dynarmic/tests/A32/fuzz_arm.cpp
index bef473a491..e405d63f3b 100644
--- a/src/dynarmic/tests/A32/fuzz_arm.cpp
+++ b/src/dynarmic/tests/A32/fuzz_arm.cpp
@@ -417,7 +417,7 @@ static void RunTestInstance(Dynarmic::A32::Jit& jit,
fmt::print("\n");
fmt::print("x86_64:\n");
- jit.DumpDisassembly();
+ fmt::print("{}", jit.Disassemble());
fmt::print("Interrupts:\n");
for (const auto& i : uni_env.interrupts) {
diff --git a/src/dynarmic/tests/A32/fuzz_thumb.cpp b/src/dynarmic/tests/A32/fuzz_thumb.cpp
index 7f64cb0ccb..af9181bcca 100644
--- a/src/dynarmic/tests/A32/fuzz_thumb.cpp
+++ b/src/dynarmic/tests/A32/fuzz_thumb.cpp
@@ -183,7 +183,7 @@ static void RunInstance(size_t run_number, ThumbTestEnv& test_env, A32Unicorn |