From df8f32b7ad8ef34052de499efe03d9f9f70cdb52 Mon Sep 17 00:00:00 2001 From: Bix Date: Thu, 24 Jul 2025 14:02:02 +0200 Subject: [PATCH 01/22] Set app name to "Eden Optimised" for Optimised build. (#101) This commit updates the 'genshinSpoof' build flavour to display "Eden Optimised" as the app name by setting 'resValue("string", "app_name_suffixed", "Eden Optimised")'. This helps differentiate the optimised spoofed build from other versions. Authored-by: Bix Signed-off-by: Bix Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/101 Co-authored-by: Bix Co-committed-by: Bix --- src/android/app/build.gradle.kts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index 8fc4a82088..89d819d900 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -60,7 +60,7 @@ android { // TODO If this is ever modified, change application_id in strings.xml applicationId = "dev.eden.eden_emulator" minSdk = 30 - targetSdk = 35 + targetSdk = 36 versionName = getGitVersion() versionCode = autoVersion @@ -150,7 +150,8 @@ android { create("genshinSpoof") { dimension = "version" - applicationId = "com.miHoYo.Yuanshen" + resValue("string", "app_name_suffixed", "Eden Optimised") + applicationId = "com.miHoYo.Yuanshen" } } } From 4ced8d23acdc286a19e450a394e396205c7145ac Mon Sep 17 00:00:00 2001 From: MaranBr Date: Thu, 24 Jul 2025 09:47:56 -0400 Subject: [PATCH 02/22] Fix typo --- src/video_core/host1x/codecs/decoder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/host1x/codecs/decoder.cpp b/src/video_core/host1x/codecs/decoder.cpp index 49a601969c..877219ec44 100755 --- a/src/video_core/host1x/codecs/decoder.cpp +++ b/src/video_core/host1x/codecs/decoder.cpp @@ -41,7 +41,7 @@ void Decoder::Decode() { if (!frame.get()) { LOG_ERROR(HW_GPU, - "Nvdec {} dailed to decode interlaced frame for top 0x{:X} bottom 0x{:X}", id, + "Nvdec {} failed to decode interlaced frame for top 0x{:X} bottom 0x{:X}", id, luma_top, luma_bottom); } From 4fc711587f90c331d68464cd05b27ef49ef313ea Mon Sep 17 00:00:00 2001 From: MaranBr Date: Thu, 24 Jul 2025 09:53:02 -0400 Subject: [PATCH 03/22] Fix headers --- src/video_core/host1x/codecs/decoder.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/video_core/host1x/codecs/decoder.cpp b/src/video_core/host1x/codecs/decoder.cpp index 877219ec44..391bfabc1e 100755 --- a/src/video_core/host1x/codecs/decoder.cpp +++ b/src/video_core/host1x/codecs/decoder.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later From 46ddbea71c6be735e9a1117432d1201bf3416daa Mon Sep 17 00:00:00 2001 From: SDK-Chan Date: Thu, 24 Jul 2025 16:34:18 +0200 Subject: [PATCH 04/22] [nvdrv] Unstub Allocate Object Context (#104) Adds proper checking to allocate object context, and saves each context separately, based on old stubs from Yuzu's, implemented now to resolve services and better handling of future issues. Co-authored-by: Shinmegumi Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/104 Co-authored-by: SDK-Chan Co-committed-by: SDK-Chan --- .../hle/service/nvdrv/devices/nvhost_gpu.cpp | 27 ++++++++++++++++--- .../hle/service/nvdrv/devices/nvhost_gpu.h | 6 ++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp index efc9cca1cc..63725e4055 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -192,11 +195,27 @@ NvResult nvhost_gpu::AllocGPFIFOEx2(IoctlAllocGpfifoEx2& params, DeviceFD fd) { } NvResult nvhost_gpu::AllocateObjectContext(IoctlAllocObjCtx& params) { - LOG_WARNING(Service_NVDRV, "(STUBBED) called, class_num={:X}, flags={:X}", params.class_num, - params.flags); + LOG_DEBUG(Service_NVDRV, "called, class_num={:X}, flags={:X}, obj_id={:X}", params.class_num, + params.flags, params.obj_id); - params.obj_id = 0x0; - return NvResult::Success; + if (!channel_state->initialized) { + LOG_CRITICAL(Service_NVDRV, "No address space bound to allocate a object context!"); + return NvResult::NotInitialized; + } + + switch (static_cast(params.class_num)) { + case CtxClasses::Ctx2D: + case CtxClasses::Ctx3D: + case CtxClasses::CtxCompute: + case CtxClasses::CtxKepler: + case CtxClasses::CtxDMA: + case CtxClasses::CtxChannelGPFIFO: + ctxObj_params.push_back(params); + return NvResult::Success; + default: + LOG_ERROR(Service_NVDRV, "Invalid class number for object context: {:X}", params.class_num); + return NvResult::BadParameter; + } } static boost::container::small_vector BuildWaitCommandList( diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.h b/src/core/hle/service/nvdrv/devices/nvhost_gpu.h index e0aeef9536..040de78734 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.h +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -54,7 +57,7 @@ public: private: friend class nvhost_as_gpu; - enum class CtxObjects : u32_le { + enum class CtxClasses : u32_le { Ctx2D = 0x902D, Ctx3D = 0xB197, CtxCompute = 0xB1C0, @@ -183,6 +186,7 @@ private: s32_le nvmap_fd{}; u64_le user_data{}; IoctlZCullBind zcull_params{}; + std::vector ctxObj_params{}; u32_le channel_priority{}; u32_le channel_timeslice{}; From 03ab350bc68802dca752555f0b60b52237e985f0 Mon Sep 17 00:00:00 2001 From: SDK-Chan Date: Thu, 24 Jul 2025 16:57:53 +0200 Subject: [PATCH 05/22] [nvdrv] Add AllocGPFIFOEX1 + modify GPFIFOEXs (#115) I noticed that AllocGPFIFOEX was missing from eden. It is the same as GPFIFOEX2, but is called separately, even on the real console. I updated the struct to match closely the one seen on switchbrew, and changed the STUBS, because according to sources they seem to be complete. My guess is that the STUBS were remained due to the unknowns back then. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/115 Co-authored-by: SDK-Chan Co-committed-by: SDK-Chan --- .../hle/service/nvdrv/devices/nvhost_gpu.cpp | 37 ++++++++++++++++--- .../hle/service/nvdrv/devices/nvhost_gpu.h | 23 +++--------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp index 63725e4055..d01642fe7c 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp @@ -78,6 +78,8 @@ NvResult nvhost_gpu::Ioctl1(DeviceFD fd, Ioctl command, std::span inpu return WrapFixed(this, &nvhost_gpu::SetErrorNotifier, input, output); case 0xd: return WrapFixed(this, &nvhost_gpu::SetChannelPriority, input, output); + case 0x18: + return WrapFixed(this, &nvhost_gpu::AllocGPFIFOEx, input, output, fd); case 0x1a: return WrapFixed(this, &nvhost_gpu::AllocGPFIFOEx2, input, output, fd); case 0x1b: @@ -170,12 +172,35 @@ NvResult nvhost_gpu::SetChannelPriority(IoctlChannelSetPriority& params) { return NvResult::Success; } -NvResult nvhost_gpu::AllocGPFIFOEx2(IoctlAllocGpfifoEx2& params, DeviceFD fd) { - LOG_WARNING(Service_NVDRV, - "(STUBBED) called, num_entries={:X}, flags={:X}, unk0={:X}, " - "unk1={:X}, unk2={:X}, unk3={:X}", - params.num_entries, params.flags, params.unk0, params.unk1, params.unk2, - params.unk3); +NvResult nvhost_gpu::AllocGPFIFOEx(IoctlAllocGpfifoEx& params, DeviceFD fd) { + LOG_DEBUG(Service_NVDRV, "called, num_entries={:X}, flags={:X}, reserved1={:X}, " + "reserved2={:X}, reserved3={:X}", + params.num_entries, params.flags, params.reserved[0], params.reserved[1], + params.reserved[2]); + + if (channel_state->initialized) { + LOG_CRITICAL(Service_NVDRV, "Already allocated!"); + return NvResult::AlreadyAllocated; + } + + u64 program_id{}; + if (auto* const session = core.GetSession(sessions[fd]); session != nullptr) { + program_id = session->process->GetProgramId(); + } + + system.GPU().InitChannel(*channel_state, program_id); + + params.fence_out = syncpoint_manager.GetSyncpointFence(channel_syncpoint); + + return NvResult::Success; +} + +NvResult nvhost_gpu::AllocGPFIFOEx2(IoctlAllocGpfifoEx& params, DeviceFD fd) { + LOG_DEBUG(Service_NVDRV, + "called, num_entries={:X}, flags={:X}, reserved1={:X}, " + "reserved2={:X}, reserved3={:X}", + params.num_entries, params.flags, params.reserved[0], params.reserved[1], + params.reserved[2]); if (channel_state->initialized) { LOG_CRITICAL(Service_NVDRV, "Already allocated!"); diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.h b/src/core/hle/service/nvdrv/devices/nvhost_gpu.h index 040de78734..a017cc50d0 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.h +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.h @@ -131,27 +131,13 @@ private: static_assert(sizeof(NvFence) == 8, "Fence is incorrect size"); struct IoctlAllocGpfifoEx { - u32_le num_entries{}; - u32_le flags{}; - u32_le unk0{}; - u32_le unk1{}; - u32_le unk2{}; - u32_le unk3{}; - u32_le unk4{}; - u32_le unk5{}; - }; - static_assert(sizeof(IoctlAllocGpfifoEx) == 32, "IoctlAllocGpfifoEx is incorrect size"); - - struct IoctlAllocGpfifoEx2 { u32_le num_entries{}; // in + u32_le num_jobs{}; // in u32_le flags{}; // in - u32_le unk0{}; // in (1 works) NvFence fence_out{}; // out - u32_le unk1{}; // in - u32_le unk2{}; // in - u32_le unk3{}; // in + std::array reserved{}; // in and ingored (for now) according to switch brew }; - static_assert(sizeof(IoctlAllocGpfifoEx2) == 32, "IoctlAllocGpfifoEx2 is incorrect size"); + static_assert(sizeof(IoctlAllocGpfifoEx) == 32, "IoctlAllocGpfifoEx2 is incorrect size"); struct IoctlAllocObjCtx { u32_le class_num{}; // 0x902D=2d, 0xB197=3d, 0xB1C0=compute, 0xA140=kepler, 0xB0B5=DMA, @@ -196,7 +182,8 @@ private: NvResult ZCullBind(IoctlZCullBind& params); NvResult SetErrorNotifier(IoctlSetErrorNotifier& params); NvResult SetChannelPriority(IoctlChannelSetPriority& params); - NvResult AllocGPFIFOEx2(IoctlAllocGpfifoEx2& params, DeviceFD fd); + NvResult AllocGPFIFOEx(IoctlAllocGpfifoEx& params, DeviceFD fd); + NvResult AllocGPFIFOEx2(IoctlAllocGpfifoEx& params, DeviceFD fd); NvResult AllocateObjectContext(IoctlAllocObjCtx& params); NvResult SubmitGPFIFOImpl(IoctlSubmitGpfifo& params, Tegra::CommandList&& entries); From d78289a742fdc7bfe05d6002b6f750cd5cbd53ca Mon Sep 17 00:00:00 2001 From: crueter Date: Thu, 24 Jul 2025 17:00:00 +0200 Subject: [PATCH 06/22] [android] Early release fences option (#95) Signed-off-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/95 --- .../features/settings/model/BooleanSetting.kt | 1 + .../features/settings/model/view/SettingsItem.kt | 7 +++++++ .../settings/ui/SettingsFragmentPresenter.kt | 1 + src/android/app/src/main/res/values/strings.xml | 15 +++++++++------ src/common/settings.h | 10 ++++++++++ src/video_core/fence_manager.h | 9 +++++++++ 6 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt index a558afab47..92a49a1de7 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt @@ -25,6 +25,7 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting { RENDERER_ASYNCHRONOUS_SHADERS("use_asynchronous_shaders"), RENDERER_FAST_GPU("use_fast_gpu_time"), RENDERER_REACTIVE_FLUSHING("use_reactive_flushing"), + RENDERER_EARLY_RELEASE_FENCES("early_release_fences"), RENDERER_DEBUG("debug"), RENDERER_PROVOKING_VERTEX("provoking_vertex"), RENDERER_DESCRIPTOR_INDEXING("descriptor_indexing"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index a269cab254..d4335ddcd8 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -666,6 +666,13 @@ abstract class SettingsItem( descriptionId = R.string.renderer_reactive_flushing_description ) ) + put( + SwitchSetting( + BooleanSetting.RENDERER_EARLY_RELEASE_FENCES, + titleId = R.string.renderer_early_release_fences, + descriptionId = R.string.renderer_early_release_fences_description + ) + ) put( SingleChoiceSetting( IntSetting.MAX_ANISOTROPY, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 31e2873b58..6ed7fee8a4 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -450,6 +450,7 @@ class SettingsFragmentPresenter( add(BooleanSetting.ENABLE_RAII.key) add(BooleanSetting.FRAME_INTERPOLATION.key) add(BooleanSetting.RENDERER_FAST_GPU.key) + add(BooleanSetting.RENDERER_EARLY_RELEASE_FENCES.key) add(IntSetting.FAST_GPU_TIME.key) add(IntSetting.RENDERER_SHADER_BACKEND.key) add(IntSetting.RENDERER_NVDEC_EMULATION.key) diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index cac730b66b..c78487e327 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -88,12 +88,8 @@ A method of automatic resource management in Vulkan that ensures proper release of resources when they are no longer needed, but may cause crashes in bundled games. Enhanced Frame Pacing Ensures smooth and consistent frame delivery by synchronizing the timing between frames, reducing stuttering and uneven animation. Ideal for games that experience frame timing instability or micro-stutters during gameplay. - Use Auto Stub - Automatically stub missing services and functions. This may improve compatibility but can cause crashes and stability issues. - Uninstall firmware - Uninstalling the firmware will remove it from the device and may affect game compatibility. - Uninstalling firmware - Firmware uninstalled successfully + Release fences early + Some games may require this to get past 0FPS errors, such as DKCR:HD, Subnautica, and Ori 2. CPU and Memory Synchronize Core Speed @@ -385,6 +381,11 @@ Firmware and retail games cannot be decrypted https://yuzu-mirror.github.io/help/quickstart/#dumping-decryption-keys + Uninstall firmware + Uninstalling the firmware will remove it from the device and may affect game compatibility. + Uninstalling firmware + Firmware uninstalled successfully + Firmware Invalid Firmware is required to run certain games and use system applications. Eden only works with firmware 19.0.1 and earlier. Firmware reported as present, but was unable to be read. Check for decryption keys and redump firmware if necessary. @@ -510,6 +511,8 @@ CPU CPU Debugging Puts the CPU in a slow debugging mode. + Use Auto Stub + Automatically stub missing services and functions. This may improve compatibility but can cause crashes and stability issues. GPU API diff --git a/src/common/settings.h b/src/common/settings.h index 1bf460c8b0..e3c2bd57cc 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -457,6 +457,16 @@ struct Values { Specialization::Default, true, true}; +#ifdef ANDROID + SwitchableSetting early_release_fences{linkage, + false, + "early_release_fences", + Category::RendererAdvanced, + Specialization::Default, + true, + true}; +#endif + SwitchableSetting async_presentation{linkage, #ifdef ANDROID true, diff --git a/src/video_core/fence_manager.h b/src/video_core/fence_manager.h index 2135f1f2da..613713fe4e 100644 --- a/src/video_core/fence_manager.h +++ b/src/video_core/fence_manager.h @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -73,9 +76,15 @@ public: void SignalFence(std::function&& func) { bool delay_fence = Settings::IsGPULevelHigh(); + #ifdef __ANDROID__ + if (!delay_fence && Settings::values.early_release_fences.GetValue()) { + TryReleasePendingFences(); + } + #else if constexpr (!can_async_check) { TryReleasePendingFences(); } + #endif const bool should_flush = ShouldFlush(); CommitAsyncFlushes(); TFence new_fence = CreateFence(!should_flush); From b9c21a5c50c5adf754fe205d27f7eb7ad9034ed4 Mon Sep 17 00:00:00 2001 From: Lizzie Date: Thu, 24 Jul 2025 18:42:14 +0200 Subject: [PATCH 07/22] [docs] document how to bisect and how to use gdb for debugging jit aarch64 (#112) Adds documents that can be made available in the future on the website about using debugging tools and how to properly bisect Git commits. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/112 Co-authored-by: Lizzie Co-committed-by: Lizzie --- docs/Development.md | 174 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 docs/Development.md diff --git a/docs/Development.md b/docs/Development.md new file mode 100644 index 0000000000..4f17bf6977 --- /dev/null +++ b/docs/Development.md @@ -0,0 +1,174 @@ +# Development + +* **Windows**: [Windows Building Guide](./docs/build/Windows.md) +* **Linux**: [Linux Building Guide](./docs/build/Linux.md) +* **Android**: [Android Building Guide](./docs/build/Android.md) +* **Solaris**: [Solaris Building Guide](./docs/build/Solaris.md) +* **FreeBSD**: [FreeBSD Building Guide](./docs/build/FreeBSD.md) +* **macOS**: [macOS Building Guide](./docs/build/macOS.md) + +# Building speedup + +If you have an HDD, use ramdisk (build in RAM): +```sh +sudo mkdir /tmp/ramdisk +sudo chmod 777 /tmp/ramdisk +# about 10GB needed +sudo mount -t tmpfs -o size=10G myramdisk /tmp/ramdisk +cmake -B /tmp/ramdisk +cmake --build /tmp/ramdisk -- -j32 +sudo umount /tmp/ramdisk +``` + +# How to test JIT + +## gdb + +Run `./build/bin/eden-cli -c -d -g ` + +Then hook up an aarch64-gdb (use `yay aarch64-gdb` or `sudo pkg in arch64-gdb` to install) +Then type `target remote localhost:1234` and type `c` (for continue) - and then if it crashes just do a `bt` (backtrace) and `layout asm`. + +### gdb cheatsheet + +- `mo `: Monitor commands, `get info`, `get fastmem` and `get mappings` are available. +- `detach`: Detach from remote (i.e restarting the emulator). +- `c`: Continue +- `p `: Print variable, `p/x ` for hexadecimal. +- `r`: Run +- `bt`: Print backtrace +- `info threads`: Print all active threads +- `thread `: Switch to the given thread (see `info threads`) +- `layout asm`: Display in assembly mode (TUI) +- `si`: Step assembly instruction +- `s` or `step`: Step over LINE OF CODE (not assembly) +- `display `: Display variable each step. +- `n`: Next (skips over call frame of a function) +- `frame `: Switches to the given frame (from `bt`) +- `br `: Set breakpoint at ``. +- `delete`: Deletes all breakpoints. +- `catch throw`: Breakpoint at throw. Can also use `br __cxa_throw` + +Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference of a pointer) or `*(1 + var)` (computed expression). + +For more information type `info gdb` and read [the man page](https://man7.org/linux/man-pages/man1/gdb.1.html). + +## Bisecting older commits + +Since going into the past can be tricky (especially due to the dependencies from the project being lost thru time). This should "restore" the URLs for the respective submodules. + +```sh +#!/bin/sh +cat > .gitmodules < externals/dynarmic/src/dynarmic/common/x64_disassemble.cpp < +#include +#include +namespace Dynarmic::Common { +void DumpDisassembledX64(const void* ptr, size_t size) {} +std::vector DisassembleX64(const void* ptr, size_t size) { return {}; } +} +EOF +``` + +If having issues with older artifacts, then run `rm -r externals/dynarmic/build externals/dynarmic/externals externals/nx_tzdb/tzdb_to_nx/externals externals/sirit/externals`. + +Configuring CMake with `-DSIRIT_USE_SYSTEM_SPIRV_HEADERS=1 -DCMAKE_CXX_FLAGS="-Wno-error" -DCMAKE_C_FLAGS="-Wno-error -Wno-array-parameter -Wno-stringop-overflow"` is also recommended. + From 87f171e8841c6b01f829719a61259385e8ee3bc5 Mon Sep 17 00:00:00 2001 From: SDK-Chan Date: Thu, 24 Jul 2025 18:52:21 +0200 Subject: [PATCH 08/22] [cmake, core] Unbreak FreeBSD Building Process (#117) During building eden on FreeBSD, it always assumed that FreeBSD due to being part of the unix family, has gamemode support, too. Since it doesn't the building process failed. This commit aims to fix that by separating out Unix and Linux for CMake to ensure there are no conflicts. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/117 Co-authored-by: SDK-Chan Co-committed-by: SDK-Chan --- src/common/CMakeLists.txt | 445 ++++++++-------- src/yuzu/main.cpp | 1019 +++++++++++++++++++------------------ src/yuzu_cmd/yuzu.cpp | 10 +- 3 files changed, 737 insertions(+), 737 deletions(-) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index d7097c8cd7..302d68fafd 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -1,214 +1,208 @@ -# SPDX-FileCopyrightText: 2018 yuzu Emulator Project -# SPDX-License-Identifier: GPL-2.0-or-later +# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +# SPDX-License-Identifier: GPL-3.0-or-later -if (DEFINED ENV{AZURECIREPO}) +# SPDX-FileCopyrightText: 2018 yuzu Emulator Project SPDX-License-Identifier: +# GPL-2.0-or-later + +if(DEFINED ENV{AZURECIREPO}) set(BUILD_REPOSITORY $ENV{AZURECIREPO}) endif() -if (DEFINED ENV{TITLEBARFORMATIDLE}) +if(DEFINED ENV{TITLEBARFORMATIDLE}) set(TITLE_BAR_FORMAT_IDLE $ENV{TITLEBARFORMATIDLE}) -endif () -if (DEFINED ENV{TITLEBARFORMATRUNNING}) +endif() +if(DEFINED ENV{TITLEBARFORMATRUNNING}) set(TITLE_BAR_FORMAT_RUNNING $ENV{TITLEBARFORMATRUNNING}) -endif () -if (DEFINED ENV{DISPLAYVERSION}) +endif() +if(DEFINED ENV{DISPLAYVERSION}) set(DISPLAY_VERSION $ENV{DISPLAYVERSION}) -endif () +endif() include(GenerateSCMRev) -add_library(common STATIC - address_space.cpp - address_space.h - algorithm.h - alignment.h - announce_multiplayer_room.h - assert.cpp - assert.h - atomic_helpers.h - atomic_ops.h - bit_cast.h - bit_field.h - bit_set.h - bit_util.h - bounded_threadsafe_queue.h - cityhash.cpp - cityhash.h - common_funcs.h - common_precompiled_headers.h - common_types.h - concepts.h - container_hash.h - demangle.cpp - demangle.h - detached_tasks.cpp - detached_tasks.h - device_power_state.cpp - device_power_state.h - div_ceil.h - dynamic_library.cpp - dynamic_library.h - elf.h - error.cpp - error.h - expected.h - fiber.cpp - fiber.h - fixed_point.h - free_region_manager.h - fs/file.cpp - fs/file.h - fs/fs.cpp - fs/fs.h - fs/fs_paths.h - fs/fs_types.h - fs/fs_util.cpp - fs/fs_util.h - fs/path_util.cpp - fs/path_util.h - hash.h - heap_tracker.cpp - heap_tracker.h - hex_util.cpp - hex_util.h - host_memory.cpp - host_memory.h - input.h - intrusive_red_black_tree.h - literals.h - logging/backend.cpp - logging/backend.h - logging/filter.cpp - logging/filter.h - logging/formatter.h - logging/log.h - logging/log_entry.h - logging/text_formatter.cpp - logging/text_formatter.h - logging/types.h - lz4_compression.cpp - lz4_compression.h - make_unique_for_overwrite.h - math_util.h - memory_detect.cpp - memory_detect.h - microprofile.cpp - microprofile.h - microprofileui.h - multi_level_page_table.cpp - multi_level_page_table.h - nvidia_flags.cpp - nvidia_flags.h - overflow.h - page_table.cpp - page_table.h - param_package.cpp - param_package.h - parent_of_member.h - point.h - precompiled_headers.h - quaternion.h - range_map.h - range_mutex.h - range_sets.h - range_sets.inc - reader_writer_queue.h - ring_buffer.h - ${CMAKE_CURRENT_BINARY_DIR}/scm_rev.cpp - scm_rev.h - scope_exit.h - scratch_buffer.h - settings.cpp - settings.h - settings_common.cpp - settings_common.h - settings_enums.h - settings_input.cpp - settings_input.h - settings_setting.h - slot_vector.h - socket_types.h - spin_lock.cpp - spin_lock.h - stb.cpp - stb.h - steady_clock.cpp - steady_clock.h - stream.cpp - stream.h - string_util.cpp - string_util.h - swap.h - thread.cpp - thread.h - thread_queue_list.h - thread_worker.h - threadsafe_queue.h - time_zone.cpp - time_zone.h - tiny_mt.h - tree.h - typed_address.h - uint128.h - unique_function.h - uuid.cpp - uuid.h - vector_math.h - virtual_buffer.cpp - virtual_buffer.h - wall_clock.cpp - wall_clock.h - zstd_compression.cpp - zstd_compression.h -) +add_library( + common STATIC + address_space.cpp + address_space.h + algorithm.h + alignment.h + announce_multiplayer_room.h + assert.cpp + assert.h + atomic_helpers.h + atomic_ops.h + bit_cast.h + bit_field.h + bit_set.h + bit_util.h + bounded_threadsafe_queue.h + cityhash.cpp + cityhash.h + common_funcs.h + common_precompiled_headers.h + common_types.h + concepts.h + container_hash.h + demangle.cpp + demangle.h + detached_tasks.cpp + detached_tasks.h + device_power_state.cpp + device_power_state.h + div_ceil.h + dynamic_library.cpp + dynamic_library.h + elf.h + error.cpp + error.h + expected.h + fiber.cpp + fiber.h + fixed_point.h + free_region_manager.h + fs/file.cpp + fs/file.h + fs/fs.cpp + fs/fs.h + fs/fs_paths.h + fs/fs_types.h + fs/fs_util.cpp + fs/fs_util.h + fs/path_util.cpp + fs/path_util.h + hash.h + heap_tracker.cpp + heap_tracker.h + hex_util.cpp + hex_util.h + host_memory.cpp + host_memory.h + input.h + intrusive_red_black_tree.h + literals.h + logging/backend.cpp + logging/backend.h + logging/filter.cpp + logging/filter.h + logging/formatter.h + logging/log.h + logging/log_entry.h + logging/text_formatter.cpp + logging/text_formatter.h + logging/types.h + lz4_compression.cpp + lz4_compression.h + make_unique_for_overwrite.h + math_util.h + memory_detect.cpp + memory_detect.h + microprofile.cpp + microprofile.h + microprofileui.h + multi_level_page_table.cpp + multi_level_page_table.h + nvidia_flags.cpp + nvidia_flags.h + overflow.h + page_table.cpp + page_table.h + param_package.cpp + param_package.h + parent_of_member.h + point.h + precompiled_headers.h + quaternion.h + range_map.h + range_mutex.h + range_sets.h + range_sets.inc + reader_writer_queue.h + ring_buffer.h + ${CMAKE_CURRENT_BINARY_DIR}/scm_rev.cpp + scm_rev.h + scope_exit.h + scratch_buffer.h + settings.cpp + settings.h + settings_common.cpp + settings_common.h + settings_enums.h + settings_input.cpp + settings_input.h + settings_setting.h + slot_vector.h + socket_types.h + spin_lock.cpp + spin_lock.h + stb.cpp + stb.h + steady_clock.cpp + steady_clock.h + stream.cpp + stream.h + string_util.cpp + string_util.h + swap.h + thread.cpp + thread.h + thread_queue_list.h + thread_worker.h + threadsafe_queue.h + time_zone.cpp + time_zone.h + tiny_mt.h + tree.h + typed_address.h + uint128.h + unique_function.h + uuid.cpp + uuid.h + vector_math.h + virtual_buffer.cpp + virtual_buffer.h + wall_clock.cpp + wall_clock.h + zstd_compression.cpp + zstd_compression.h) -if (YUZU_ENABLE_PORTABLE) - add_compile_definitions(YUZU_ENABLE_PORTABLE) +if(YUZU_ENABLE_PORTABLE) + add_compile_definitions(YUZU_ENABLE_PORTABLE) endif() -if (WIN32) - target_sources(common PRIVATE - windows/timer_resolution.cpp - windows/timer_resolution.h - ) +if(WIN32) + target_sources(common PRIVATE windows/timer_resolution.cpp + windows/timer_resolution.h) target_link_libraries(common PRIVATE ntdll) endif() -if (NOT WIN32) - target_sources(common PRIVATE - signal_chain.cpp - signal_chain.h - ) +if(NOT WIN32) + target_sources(common PRIVATE signal_chain.cpp signal_chain.h) endif() if(ANDROID) - target_sources(common - PUBLIC - fs/fs_android.cpp - fs/fs_android.h - android/android_common.cpp - android/android_common.h - android/id_cache.cpp - android/id_cache.h - android/multiplayer/multiplayer.cpp - android/multiplayer/multiplayer.h - android/applets/software_keyboard.cpp - android/applets/software_keyboard.h - ) + target_sources( + common + PUBLIC fs/fs_android.cpp + fs/fs_android.h + android/android_common.cpp + android/android_common.h + android/id_cache.cpp + android/id_cache.h + android/multiplayer/multiplayer.cpp + android/multiplayer/multiplayer.h + android/applets/software_keyboard.cpp + android/applets/software_keyboard.h) endif() -if (UNIX AND NOT APPLE) - target_sources(common PRIVATE - linux/gamemode.cpp - linux/gamemode.h - ) +if(LINUX AND NOT APPLE) + target_sources(common PRIVATE linux/gamemode.cpp linux/gamemode.h) target_link_libraries(common PRIVATE gamemode::headers) endif() if(ARCHITECTURE_x86_64) - target_sources(common - PRIVATE - x64/cpu_detect.cpp + target_sources( + common + PRIVATE x64/cpu_detect.cpp x64/cpu_detect.h x64/cpu_wait.cpp x64/cpu_wait.h @@ -217,64 +211,69 @@ if(ARCHITECTURE_x86_64) x64/rdtsc.cpp x64/rdtsc.h x64/xbyak_abi.h - x64/xbyak_util.h - ) - target_link_libraries(common PRIVATE xbyak::xbyak) + x64/xbyak_util.h) + target_link_libraries(common PRIVATE xbyak::xbyak) endif() -if (HAS_NCE) - target_sources(common - PRIVATE - arm64/native_clock.cpp - arm64/native_clock.h - ) +if(HAS_NCE) + target_sources(common PRIVATE arm64/native_clock.cpp arm64/native_clock.h) endif() -if (MSVC) - target_compile_definitions(common PRIVATE - # The standard library doesn't provide any replacement for codecvt yet - # so we can disable this deprecation warning for the time being. - _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING - ) - target_compile_options(common PRIVATE - /we4242 # 'identifier': conversion from 'type1' to 'type2', possible loss of data - /we4254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data - /we4800 # Implicit conversion from 'type' to bool. Possible information loss +if(MSVC) + target_compile_definitions( + common + PRIVATE # The standard library doesn't provide any replacement for codecvt + # yet so we can disable this deprecation warning for the time being. + _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING) + target_compile_options( + common + PRIVATE /we4242 # 'identifier': conversion from 'type1' to 'type2', possible + # loss of data + /we4254 # 'operator': conversion from 'type1:field_bits' to + # 'type2:field_bits', possible loss of data + /we4800 # Implicit conversion from 'type' to bool. Possible + # information loss ) else() - set_source_files_properties(stb.cpp PROPERTIES COMPILE_OPTIONS "-Wno-implicit-fallthrough;-Wno-missing-declarations;-Wno-missing-field-initializers") + set_source_files_properties( + stb.cpp + PROPERTIES + COMPILE_OPTIONS + "-Wno-implicit-fallthrough;-Wno-missing-declarations;-Wno-missing-field-initializers" + ) # Get around GCC failing with intrinsics in Debug - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_BUILD_TYPE MATCHES "Debug") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_BUILD_TYPE MATCHES "Debug") set_property( SOURCE stb.cpp APPEND - PROPERTY COMPILE_OPTIONS ";-O2" - ) + PROPERTY COMPILE_OPTIONS ";-O2") endif() endif() -if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(common PRIVATE - -fsized-deallocation - -Werror=unreachable-code-aggressive - ) - target_compile_definitions(common PRIVATE - # Clang 14 and earlier have errors when explicitly instantiating Settings::Setting - $<$,15>:CANNOT_EXPLICITLY_INSTANTIATE> +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(common PRIVATE -fsized-deallocation + -Werror=unreachable-code-aggressive) + target_compile_definitions( + common + PRIVATE + # Clang 14 and earlier have errors when explicitly instantiating + # Settings::Setting + $<$,15>:CANNOT_EXPLICITLY_INSTANTIATE> ) endif() -target_link_libraries(common PUBLIC Boost::headers fmt::fmt microprofile stb::headers Threads::Threads) +target_link_libraries(common PUBLIC Boost::headers fmt::fmt microprofile + stb::headers Threads::Threads) target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd LLVM::Demangle) -if (ANDROID) - # For ASharedMemory_create - target_link_libraries(common PRIVATE android) +if(ANDROID) + # For ASharedMemory_create + target_link_libraries(common PRIVATE android) endif() -if (YUZU_USE_PRECOMPILED_HEADERS) - target_precompile_headers(common PRIVATE precompiled_headers.h) +if(YUZU_USE_PRECOMPILED_HEADERS) + target_precompile_headers(common PRIVATE precompiled_headers.h) endif() create_target_directory_groups(common) diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 6b2608375c..de63305435 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -20,6 +20,8 @@ #ifdef __unix__ #include #include +#endif +#ifdef __linux__ #include "common/linux/gamemode.h" #endif @@ -37,8 +39,8 @@ #include "configuration/configure_input.h" #include "configuration/configure_per_game.h" #include "configuration/configure_tas.h" -#include "core/file_sys/romfs_factory.h" #include "core/core_timing.h" +#include "core/file_sys/romfs_factory.h" #include "core/file_sys/vfs/vfs.h" #include "core/file_sys/vfs/vfs_real.h" #include "core/frontend/applets/cabinet.h" @@ -66,7 +68,7 @@ // These are wrappers to avoid the calls to CreateDirectory and CreateFile because of the Windows // defines. static FileSys::VirtualDir VfsFilesystemCreateDirectoryWrapper( - const FileSys::VirtualFilesystem& vfs, const std::string& path, FileSys::OpenMode mode) { + const FileSys::VirtualFilesystem& vfs, const std::string& path, FileSys::OpenMode mode) { return vfs->CreateDirectory(path, mode); } @@ -215,7 +217,7 @@ enum class CalloutFlag : uint32_t { * so this tracks which games are bad in this regard. */ constexpr std::array bad_update_games{ - 0x0100F2C0115B6000 // Tears of the Kingdom + 0x0100F2C0115B6000 // Tears of the Kingdom }; const int GMainWindow::max_recent_files_item; @@ -267,21 +269,21 @@ static QString PrettyProductName() { // After Windows 10 Version 2004, Microsoft decided to switch to a different notation: 20H2 // With that notation change they changed the registry key used to denote the current version QSettings windows_registry( - QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"), - QSettings::NativeFormat); + QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"), + QSettings::NativeFormat); const QString release_id = windows_registry.value(QStringLiteral("ReleaseId")).toString(); if (release_id == QStringLiteral("2009")) { const u32 current_build = windows_registry.value(QStringLiteral("CurrentBuild")).toUInt(); const QString display_version = - windows_registry.value(QStringLiteral("DisplayVersion")).toString(); + windows_registry.value(QStringLiteral("DisplayVersion")).toString(); const u32 ubr = windows_registry.value(QStringLiteral("UBR")).toUInt(); u32 version = 10; if (current_build >= 22000) { version = 11; } return QStringLiteral("Windows %1 Version %2 (Build %3.%4)") - .arg(QString::number(version), display_version, QString::number(current_build), - QString::number(ubr)); + .arg(QString::number(version), display_version, QString::number(current_build), + QString::number(ubr)); } #endif return QSysInfo::prettyProductName(); @@ -313,8 +315,7 @@ bool GMainWindow::CheckDarkMode() { GMainWindow::GMainWindow(bool has_broken_vulkan) : ui{std::make_unique()}, system{std::make_unique()}, - input_subsystem{std::make_shared()}, - user_data_migrator{this}, + input_subsystem{std::make_shared()}, user_data_migrator{this}, vfs{std::make_shared()}, provider{std::make_unique()} { Common::FS::CreateEdenPaths(); @@ -322,24 +323,29 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) if (user_data_migrator.migrated) { // Sort-of hack whereby we only move the old dir if it's a subfolder of the user dir - #define MIGRATE_DIR(type) std::string type##path = Common::FS::GetEdenPathString(Common::FS::EdenPath::type##Dir); \ - if (type##path.starts_with(user_data_migrator.selected_emu.get_user_dir())) { \ - boost::replace_all(type##path, user_data_migrator.selected_emu.lower_name(), "eden"); \ - Common::FS::SetEdenPath(Common::FS::EdenPath::type##Dir, type##path); \ - } +#define MIGRATE_DIR(type) \ + std::string type##path = Common::FS::GetEdenPathString(Common::FS::EdenPath::type##Dir); \ + if (type##path.starts_with(user_data_migrator.selected_emu.get_user_dir())) { \ + boost::replace_all(type##path, user_data_migrator.selected_emu.lower_name(), "eden"); \ + Common::FS::SetEdenPath(Common::FS::EdenPath::type##Dir, type##path); \ + } MIGRATE_DIR(NAND) MIGRATE_DIR(SDMC) MIGRATE_DIR(Dump) MIGRATE_DIR(Load) - #undef MIGRATE_DIR +#undef MIGRATE_DIR } #ifdef __unix__ SetupSigInterrupts(); +#endif + +#ifdef __linux__ SetGamemodeEnabled(Settings::values.enable_gamemode.GetValue()); #endif + UISettings::RestoreWindowState(config); system->Initialize(); @@ -392,7 +398,7 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) const auto yuzu_build = fmt::format("Eden Development Build | {}-{}", branch_name, description); const auto override_build = - fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); + fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build; const auto processor_count = std::thread::hardware_concurrency(); @@ -426,7 +432,7 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) LOG_INFO(Frontend, "Host Timer Resolution: {:.4f} ms", std::chrono::duration_cast>( Common::Windows::SetCurrentTimerResolutionToMaximum()) - .count()); + .count()); system->CoreTiming().SetTimerResolutionNs(Common::Windows::GetCurrentTimerResolution()); #endif UpdateWindowTitle(); @@ -436,13 +442,12 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) #ifdef ENABLE_QT_UPDATE_CHECKER if (UISettings::values.check_for_updates) { update_future = QtConcurrent::run([]() -> QString { - const bool is_prerelease = - ((strstr(Common::g_build_version, "pre-alpha") != NULL) || - (strstr(Common::g_build_version, "alpha") != NULL) || - (strstr(Common::g_build_version, "beta") != NULL) || - (strstr(Common::g_build_version, "rc") != NULL)); + const bool is_prerelease = ((strstr(Common::g_build_version, "pre-alpha") != NULL) || + (strstr(Common::g_build_version, "alpha") != NULL) || + (strstr(Common::g_build_version, "beta") != NULL) || + (strstr(Common::g_build_version, "rc") != NULL)); const std::optional latest_release_tag = - UpdateChecker::GetLatestRelease(is_prerelease); + UpdateChecker::GetLatestRelease(is_prerelease); if (latest_release_tag && latest_release_tag.value() != Common::g_build_version) { return QString::fromStdString(latest_release_tag.value()); } @@ -676,26 +681,26 @@ void GMainWindow::RegisterMetaTypes() { // Cabinet Applet qRegisterMetaType("Core::Frontend::CabinetParameters"); qRegisterMetaType>( - "std::shared_ptr"); + "std::shared_ptr"); // Controller Applet qRegisterMetaType("Core::Frontend::ControllerParameters"); // Profile Select Applet qRegisterMetaType( - "Core::Frontend::ProfileSelectParameters"); + "Core::Frontend::ProfileSelectParameters"); // Software Keyboard Applet qRegisterMetaType( - "Core::Frontend::KeyboardInitializeParameters"); + "Core::Frontend::KeyboardInitializeParameters"); qRegisterMetaType( - "Core::Frontend::InlineAppearParameters"); + "Core::Frontend::InlineAppearParameters"); qRegisterMetaType("Core::Frontend::InlineTextParameters"); qRegisterMetaType("Service::AM::Frontend::SwkbdResult"); qRegisterMetaType( - "Service::AM::Frontend::SwkbdTextCheckResult"); + "Service::AM::Frontend::SwkbdTextCheckResult"); qRegisterMetaType( - "Service::AM::Frontend::SwkbdReplyType"); + "Service::AM::Frontend::SwkbdReplyType"); // Web Browser Applet qRegisterMetaType("Service::AM::Frontend::WebExitReason"); @@ -707,7 +712,7 @@ void GMainWindow::RegisterMetaTypes() { void GMainWindow::AmiiboSettingsShowDialog(const Core::Frontend::CabinetParameters& parameters, std::shared_ptr nfp_device) { cabinet_applet = - new QtAmiiboSettingsDialog(this, parameters, input_subsystem.get(), nfp_device); + new QtAmiiboSettingsDialog(this, parameters, input_subsystem.get(), nfp_device); SCOPE_EXIT { cabinet_applet->deleteLater(); cabinet_applet = nullptr; @@ -732,9 +737,9 @@ void GMainWindow::AmiiboSettingsRequestExit() { } void GMainWindow::ControllerSelectorReconfigureControllers( - const Core::Frontend::ControllerParameters& parameters) { + const Core::Frontend::ControllerParameters& parameters) { controller_applet = - new QtControllerSelectorDialog(this, parameters, input_subsystem.get(), *system); + new QtControllerSelectorDialog(this, parameters, input_subsystem.get(), *system); SCOPE_EXIT { controller_applet->deleteLater(); controller_applet = nullptr; @@ -763,7 +768,7 @@ void GMainWindow::ControllerSelectorRequestExit() { } void GMainWindow::ProfileSelectorSelectProfile( - const Core::Frontend::ProfileSelectParameters& parameters) { + const Core::Frontend::ProfileSelectParameters& parameters) { profile_select_applet = new QtProfileSelectionDialog(*system, this, parameters); SCOPE_EXIT { profile_select_applet->deleteLater(); @@ -780,7 +785,7 @@ void GMainWindow::ProfileSelectorSelectProfile( } const auto uuid = system->GetProfileManager().GetUser( - static_cast(profile_select_applet->GetIndex())); + static_cast(profile_select_applet->GetIndex())); if (!uuid.has_value()) { emit ProfileSelectorFinishedSelection(std::nullopt); return; @@ -796,7 +801,7 @@ void GMainWindow::ProfileSelectorRequestExit() { } void GMainWindow::SoftwareKeyboardInitialize( - bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters) { + bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters) { if (software_keyboard) { LOG_ERROR(Frontend, "The software keyboard is already initialized!"); return; @@ -807,20 +812,20 @@ void GMainWindow::SoftwareKeyboardInitialize( if (is_inline) { connect( - software_keyboard, &QtSoftwareKeyboardDialog::SubmitInlineText, this, - [this](Service::AM::Frontend::SwkbdReplyType reply_type, std::u16string submitted_text, - s32 cursor_position) { - emit SoftwareKeyboardSubmitInlineText(reply_type, submitted_text, cursor_position); - }, - Qt::QueuedConnection); + software_keyboard, &QtSoftwareKeyboardDialog::SubmitInlineText, this, + [this](Service::AM::Frontend::SwkbdReplyType reply_type, std::u16string submitted_text, + s32 cursor_position) { + emit SoftwareKeyboardSubmitInlineText(reply_type, submitted_text, cursor_position); + }, + Qt::QueuedConnection); } else { connect( - software_keyboard, &QtSoftwareKeyboardDialog::SubmitNormalText, this, - [this](Service::AM::Frontend::SwkbdResult result, std::u16string submitted_text, - bool confirmed) { - emit SoftwareKeyboardSubmitNormalText(result, submitted_text, confirmed); - }, - Qt::QueuedConnection); + software_keyboard, &QtSoftwareKeyboardDialog::SubmitNormalText, this, + [this](Service::AM::Frontend::SwkbdResult result, std::u16string submitted_text, + bool confirmed) { + emit SoftwareKeyboardSubmitNormalText(result, submitted_text, confirmed); + }, + Qt::QueuedConnection); } } @@ -843,8 +848,8 @@ void GMainWindow::SoftwareKeyboardShowNormal() { } void GMainWindow::SoftwareKeyboardShowTextCheck( - Service::AM::Frontend::SwkbdTextCheckResult text_check_result, - std::u16string text_check_message) { + Service::AM::Frontend::SwkbdTextCheckResult text_check_result, + std::u16string text_check_message) { if (!software_keyboard) { LOG_ERROR(Frontend, "The software keyboard is not initialized!"); return; @@ -854,7 +859,7 @@ void GMainWindow::SoftwareKeyboardShowTextCheck( } void GMainWindow::SoftwareKeyboardShowInline( - Core::Frontend::InlineAppearParameters appear_parameters) { + Core::Frontend::InlineAppearParameters appear_parameters) { if (!software_keyboard) { LOG_ERROR(Frontend, "The software keyboard is not initialized!"); return; @@ -863,13 +868,13 @@ void GMainWindow::SoftwareKeyboardShowInline( const auto& layout = render_window->GetFramebufferLayout(); const auto x = - static_cast(layout.screen.left + (0.5f * layout.screen.GetWidth() * - ((2.0f * appear_parameters.key_top_translate_x) + - (1.0f - appear_parameters.key_top_scale_x)))); + static_cast(layout.screen.left + (0.5f * layout.screen.GetWidth() * + ((2.0f * appear_parameters.key_top_translate_x) + + (1.0f - appear_parameters.key_top_scale_x)))); const auto y = - static_cast(layout.screen.top + (layout.screen.GetHeight() * - ((2.0f * appear_parameters.key_top_translate_y) + - (1.0f - appear_parameters.key_top_scale_y)))); + static_cast(layout.screen.top + (layout.screen.GetHeight() * + ((2.0f * appear_parameters.key_top_translate_y) + + (1.0f - appear_parameters.key_top_scale_y)))); const auto w = static_cast(layout.screen.GetWidth() * appear_parameters.key_top_scale_x); const auto h = static_cast(layout.screen.GetHeight() * appear_parameters.key_top_scale_y); const auto scale_ratio = devicePixelRatioF(); @@ -889,7 +894,7 @@ void GMainWindow::SoftwareKeyboardHideInline() { } void GMainWindow::SoftwareKeyboardInlineTextChanged( - Core::Frontend::InlineTextParameters text_parameters) { + Core::Frontend::InlineTextParameters text_parameters) { if (!software_keyboard) { LOG_ERROR(Frontend, "The software keyboard is not initialized!"); return; @@ -980,11 +985,11 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, QAction* exit_action = new QAction(tr("Disable Web Applet"), this); connect(exit_action, &QAction::triggered, this, [this] { const auto result = QMessageBox::warning( - this, tr("Disable Web Applet"), - tr("Disabling the web applet can lead to undefined behavior and should only be used " - "with Super Mario 3D All-Stars. Are you sure you want to disable the web " - "applet?\n(This can be re-enabled in the Debug settings.)"), - QMessageBox::Yes | QMessageBox::No); + this, tr("Disable Web Applet"), + tr("Disabling the web applet can lead to undefined behavior and should only be used " + "with Super Mario 3D All-Stars. Are you sure you want to disable the web " + "applet?\n(This can be re-enabled in the Debug settings.)"), + QMessageBox::Yes | QMessageBox::No); if (result == QMessageBox::Yes) { UISettings::values.disable_web_applet = true; web_applet->SetFinished(true); @@ -997,14 +1002,14 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, if (!exit_check) { web_applet->page()->runJavaScript( - QStringLiteral("end_applet;"), [&](const QVariant& variant) { - exit_check = false; - if (variant.toBool()) { - web_applet->SetFinished(true); - web_applet->SetExitReason( - Service::AM::Frontend::WebExitReason::EndButtonPressed); - } - }); + QStringLiteral("end_applet;"), [&](const QVariant& variant) { + exit_check = false; + if (variant.toBool()) { + web_applet->SetFinished(true); + web_applet->SetExitReason( + Service::AM::Frontend::WebExitReason::EndButtonPressed); + } + }); exit_check = true; } @@ -1102,18 +1107,18 @@ void GMainWindow::InitializeWidgets() { res_scale_label->setToolTip(tr("The current selected resolution scaling multiplier.")); emu_speed_label = new QLabel(); emu_speed_label->setToolTip( - tr("Current emulation speed. Values higher or lower than 100% " - "indicate emulation is running faster or slower than a Switch.")); + tr("Current emulation speed. Values higher or lower than 100% " + "indicate emulation is running faster or slower than a Switch.")); game_fps_label = new QLabel(); game_fps_label->setToolTip(tr("How many frames per second the game is currently displaying. " "This will vary from game to game and scene to scene.")); emu_frametime_label = new QLabel(); emu_frametime_label->setToolTip( - tr("Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For " - "full-speed emulation this should be at most 16.67 ms.")); + tr("Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For " + "full-speed emulation this should be at most 16.67 ms.")); for (auto& label : {shader_building_label, res_scale_label, emu_speed_label, game_fps_label, - emu_frametime_label}) { + emu_frametime_label}) { label->setVisible(false); label->setFrameStyle(QFrame::NoFrame); label->setContentsMargins(4, 0, 4, 0); @@ -1167,21 +1172,21 @@ void GMainWindow::InitializeWidgets() { volume_button->setContextMenuPolicy(Qt::CustomContextMenu); connect(volume_button, &QPushButton::customContextMenuRequested, [this](const QPoint& menu_location) { - QMenu context_menu; - context_menu.addAction( + QMenu context_menu; + context_menu.addAction( Settings::values.audio_muted ? tr("Unmute") : tr("Mute"), [this] { - Settings::values.audio_muted = !Settings::values.audio_muted; - UpdateVolumeUI(); - }); + Settings::values.audio_muted = !Settings::values.audio_muted; + UpdateVolumeUI(); + }); - context_menu.addAction(tr("Reset Volume"), [this] { - Settings::values.volume.SetValue(100); - UpdateVolumeUI(); - }); + context_menu.addAction(tr("Reset Volume"), [this] { + Settings::values.volume.SetValue(100); + UpdateVolumeUI(); + }); - context_menu.exec(volume_button->mapToGlobal(menu_location)); - volume_button->repaint(); - }); + context_menu.exec(volume_button->mapToGlobal(menu_location)); + volume_button->repaint(); + }); connect(volume_button, &VolumeButton::VolumeChanged, this, &GMainWindow::UpdateVolumeUI); statusBar()->insertPermanentWidget(0, volume_button); @@ -1206,16 +1211,16 @@ void GMainWindow::InitializeWidgets() { aa_status_button->setContextMenuPolicy(Qt::CustomContextMenu); connect(aa_status_button, &QPushButton::customContextMenuRequested, [this](const QPoint& menu_location) { - QMenu context_menu; - for (auto const& aa_text_pair : ConfigurationShared::anti_aliasing_texts_map) { - context_menu.addAction(aa_text_pair.second, [this, aa_text_pair] { - Settings::values.anti_aliasing.SetValue(aa_text_pair.first); - UpdateAAText(); + QMenu context_menu; + for (auto const& aa_text_pair : ConfigurationShared::anti_aliasing_texts_map) { + context_menu.addAction(aa_text_pair.second, [this, aa_text_pair] { + Settings::values.anti_aliasing.SetValue(aa_text_pair.first); + UpdateAAText(); + }); + } + context_menu.exec(aa_status_button->mapToGlobal(menu_location)); + aa_status_button->repaint(); }); - } - context_menu.exec(aa_status_button->mapToGlobal(menu_location)); - aa_status_button->repaint(); - }); statusBar()->insertPermanentWidget(0, aa_status_button); // Setup Filter button @@ -1230,16 +1235,16 @@ void GMainWindow::InitializeWidgets() { filter_status_button->setContextMenuPolicy(Qt::CustomContextMenu); connect(filter_status_button, &QPushButton::customContextMenuRequested, [this](const QPoint& menu_location) { - QMenu context_menu; - for (auto const& filter_text_pair : ConfigurationShared::scaling_filter_texts_map) { - context_menu.addAction(filter_text_pair.second, [this, filter_text_pair] { - Settings::values.scaling_filter.SetValue(filter_text_pair.first); - UpdateFilterText(); + QMenu context_menu; + for (auto const& filter_text_pair : ConfigurationShared::scaling_filter_texts_map) { + context_menu.addAction(filter_text_pair.second, [this, filter_text_pair] { + Settings::values.scaling_filter.SetValue(filter_text_pair.first); + UpdateFilterText(); + }); + } + context_menu.exec(filter_status_button->mapToGlobal(menu_location)); + filter_status_button->repaint(); }); - } - context_menu.exec(filter_status_button->mapToGlobal(menu_location)); - filter_status_button->repaint(); - }); statusBar()->insertPermanentWidget(0, filter_status_button); // Setup Dock button @@ -1252,18 +1257,18 @@ void GMainWindow::InitializeWidgets() { dock_status_button->setContextMenuPolicy(Qt::CustomContextMenu); connect(dock_status_button, &QPushButton::customContextMenuRequested, [this](const QPoint& menu_location) { - QMenu context_menu; + QMenu context_menu; - for (auto const& pair : ConfigurationShared::use_docked_mode_texts_map) { - context_menu.addAction(pair.second, [this, &pair] { - if (pair.first != Settings::values.use_docked_mode.GetValue()) { - OnToggleDockedMode(); + for (auto const& pair : ConfigurationShared::use_docked_mode_texts_map) { + context_menu.addAction(pair.second, [this, &pair] { + if (pair.first != Settings::values.use_docked_mode.GetValue()) { + OnToggleDockedMode(); + } + }); } + context_menu.exec(dock_status_button->mapToGlobal(menu_location)); + dock_status_button->repaint(); }); - } - context_menu.exec(dock_status_button->mapToGlobal(menu_location)); - dock_status_button->repaint(); - }); statusBar()->insertPermanentWidget(0, dock_status_button); // Setup GPU Accuracy button @@ -1276,20 +1281,20 @@ void GMainWindow::InitializeWidgets() { gpu_accuracy_button->setContextMenuPolicy(Qt::CustomContextMenu); connect(gpu_accuracy_button, &QPushButton::customContextMenuRequested, [this](const QPoint& menu_location) { - QMenu context_menu; + QMenu context_menu; - for (auto const& gpu_accuracy_pair : ConfigurationShared::gpu_accuracy_texts_map) { - if (gpu_accuracy_pair.first == Settings::GpuAccuracy::Extreme) { - continue; - } - context_menu.addAction(gpu_accuracy_pair.second, [this, gpu_accuracy_pair] { - Settings::values.gpu_accuracy.SetValue(gpu_accuracy_pair.first); - UpdateGPUAccuracyButton(); + for (auto const& gpu_accuracy_pair : ConfigurationShared::gpu_accuracy_texts_map) { + if (gpu_accuracy_pair.first == Settings::GpuAccuracy::Extreme) { + continue; + } + context_menu.addAction(gpu_accuracy_pair.second, [this, gpu_accuracy_pair] { + Settings::values.gpu_accuracy.SetValue(gpu_accuracy_pair.first); + UpdateGPUAccuracyButton(); + }); + } + context_menu.exec(gpu_accuracy_button->mapToGlobal(menu_location)); + gpu_accuracy_button->repaint(); }); - } - context_menu.exec(gpu_accuracy_button->mapToGlobal(menu_location)); - gpu_accuracy_button->repaint(); - }); statusBar()->insertPermanentWidget(0, gpu_accuracy_button); // Setup Renderer API button @@ -1305,22 +1310,22 @@ void GMainWindow::InitializeWidgets() { renderer_status_button->setContextMenuPolicy(Qt::CustomContextMenu); connect(renderer_status_button, &QPushButton::customContextMenuRequested, [this](const QPoint& menu_location) { - QMenu context_menu; + QMenu context_menu; - for (auto const& renderer_backend_pair : - ConfigurationShared::renderer_backend_texts_map) { - if (renderer_backend_pair.first == Settings::RendererBackend::Null) { - continue; - } - context_menu.addAction( + for (auto const& renderer_backend_pair : + ConfigurationShared::renderer_backend_texts_map) { + if (renderer_backend_pair.first == Settings::RendererBackend::Null) { + continue; + } + context_menu.addAction( renderer_backend_pair.second, [this, renderer_backend_pair] { - Settings::values.renderer_backend.SetValue(renderer_backend_pair.first); - UpdateAPIText(); + Settings::values.renderer_backend.SetValue(renderer_backend_pair.first); + UpdateAPIText(); + }); + } + context_menu.exec(renderer_status_button->mapToGlobal(menu_location)); + renderer_status_button->repaint(); }); - } - context_menu.exec(renderer_status_button->mapToGlobal(menu_location)); - renderer_status_button->repaint(); - }); statusBar()->insertPermanentWidget(0, renderer_status_button); // Setup Refresh Button @@ -1385,24 +1390,24 @@ void GMainWindow::LinkActionShortcut(QAction* action, const QString& action_name static const auto main_window = std::string("Main Window"); action->setShortcut(hotkey_registry.GetKeySequence(main_window, action_name.toStdString())); action->setShortcutContext( - hotkey_registry.GetShortcutContext(main_window, action_name.toStdString())); + hotkey_registry.GetShortcutContext(main_window, action_name.toStdString())); action->setAutoRepeat(false); this->addAction(action); auto* controller = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); const auto* controller_hotkey = - hotkey_registry.GetControllerHotkey(main_window, action_name.toStdString(), controller); + hotkey_registry.GetControllerHotkey(main_window, action_name.toStdString(), controller); connect( - controller_hotkey, &ControllerShortcut::Activated, this, - [action, tas_allowed, this] { - auto [tas_status, current_tas_frame, total_tas_frames] = + controller_hotkey, &ControllerShortcut::Activated, this, + [action, tas_allowed, this] { + auto [tas_status, current_tas_frame, total_tas_frames] = input_subsystem->GetTas()->GetStatus(); - if (tas_allowed || tas_status == InputCommon::TasInput::TasState::Stopped) { - action->trigger(); - } - }, - Qt::QueuedConnection); + if (tas_allowed || tas_status == InputCommon::TasInput::TasState::Stopped) { + action->trigger(); + } + }, + Qt::QueuedConnection); } void GMainWindow::InitializeHotkeys() { @@ -1433,15 +1438,15 @@ void GMainWindow::InitializeHotkeys() { static const QString main_window = QStringLiteral("Main Window"); const auto connect_shortcut = [&](const QString& action_name, const Fn& function) { - const auto* hotkey = + const auto* hotkey = hotkey_registry.GetHotkey(main_window.toStdString(), action_name.toStdString(), this); - auto* controller = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); - const auto* controller_hotkey = hotkey_registry.GetControllerHotkey( - main_window.toStdString(), action_name.toStdString(), controller); - connect(hotkey, &QShortcut::activated, this, function); - connect(controller_hotkey, &ControllerShortcut::Activated, this, function, - Qt::QueuedConnection); -}; + auto* controller = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); + const auto* controller_hotkey = hotkey_registry.GetControllerHotkey( + main_window.toStdString(), action_name.toStdString(), controller); + connect(hotkey, &QShortcut::activated, this, function); + connect(controller_hotkey, &ControllerShortcut::Activated, this, function, + Qt::QueuedConnection); + }; connect_shortcut(QStringLiteral("Exit Fullscreen"), [&] { if (emulation_running && ui->action_Fullscreen->isChecked()) { @@ -1508,7 +1513,7 @@ void GMainWindow::RestoreUIState() { ui->action_Fullscreen->setChecked(UISettings::values.fullscreen.GetValue()); ui->action_Display_Dock_Widget_Headers->setChecked( - UISettings::values.display_titlebar.GetValue()); + UISettings::values.display_titlebar.GetValue()); OnDisplayTitleBars(ui->action_Display_Dock_Widget_Headers->isChecked()); ui->action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar.GetValue()); @@ -1521,7 +1526,7 @@ void GMainWindow::RestoreUIState() { void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { if (state != Qt::ApplicationHidden && state != Qt::ApplicationInactive && - state != Qt::ApplicationActive) { + state != Qt::ApplicationActive) { LOG_DEBUG(Frontend, "ApplicationState unusual flag: {} ", state); } if (!emulation_running) { @@ -1529,7 +1534,7 @@ void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { } if (UISettings::values.pause_when_in_background) { if (emu_thread->IsRunning() && - (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { + (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { auto_paused = true; OnPauseGame(); } else if (!emu_thread->IsRunning() && auto_paused && state == Qt::ApplicationActive) { @@ -1539,7 +1544,7 @@ void GMainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) { } if (UISettings::values.mute_when_in_background) { if (!Settings::values.audio_muted && - (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { + (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { Settings::values.audio_muted = true; auto_muted = true; } else if (auto_muted && state == Qt::ApplicationActive) { @@ -1600,12 +1605,12 @@ void GMainWindow::ConnectWidgetEvents() { void GMainWindow::ConnectMenuEvents() { const auto connect_menu = [&](QAction* action, const Fn& event_fn) { - connect(action, &QAction::triggered, this, event_fn); - // Add actions to this window so that hiding menus in fullscreen won't disable them - addAction(action); - // Add actions to the render window so that they work outside of single window mode - render_window->addAction(action); -}; + connect(action, &QAction::triggered, this, event_fn); + // Add actions to this window so that hiding menus in fullscreen won't disable them + addAction(action); + // Add actions to the render window so that they work outside of single window mode + render_window->addAction(action); + }; // File connect_menu(ui->action_Load_File, &GMainWindow::OnMenuLoadFile); @@ -1667,7 +1672,8 @@ void GMainWindow::ConnectMenuEvents() { connect_menu(ui->action_Load_Home_Menu, &GMainWindow::OnHomeMenu); connect_menu(ui->action_Open_Setup, &GMainWindow::OnInitialSetup); connect_menu(ui->action_Desktop, &GMainWindow::OnCreateHomeMenuDesktopShortcut); - connect_menu(ui->action_Application_Menu, &GMainWindow::OnCreateHomeMenuApplicationMenuShortcut); + connect_menu(ui->action_Application_Menu, + &GMainWindow::OnCreateHomeMenuApplicationMenuShortcut); connect_menu(ui->action_Capture_Screenshot, &GMainWindow::OnCaptureScreenshot); // TAS @@ -1697,21 +1703,21 @@ void GMainWindow::UpdateMenuState() { const std::array running_actions{ ui->action_Stop, - ui->action_Restart, - ui->action_Configure_Current_Game, - ui->action_Report_Compatibility, - ui->action_Load_Amiibo, - ui->action_Pause, + ui->action_Restart, + ui->action_Configure_Current_Game, + ui->action_Report_Compatibility, + ui->action_Load_Amiibo, + ui->action_Pause, }; const std::array applet_actions{ui->action_Load_Album, - ui->action_Load_Cabinet_Nickname_Owner, - ui->action_Load_Cabinet_Eraser, - ui->action_Load_Cabinet_Restorer, - ui->action_Load_Cabinet_Formatter, - ui->action_Load_Mii_Edit, - ui->action_Load_Home_Menu, - ui->action_Open_Controller_Menu}; + ui->action_Load_Cabinet_Nickname_Owner, + ui->action_Load_Cabinet_Eraser, + ui->action_Load_Cabinet_Restorer, + ui->action_Load_Cabinet_Formatter, + ui->action_Load_Mii_Edit, + ui->action_Load_Home_Menu, + ui->action_Open_Controller_Menu}; for (QAction* action : running_actions) { action->setEnabled(emulation_running); @@ -1761,9 +1767,9 @@ void GMainWindow::SetupPrepareForSleep() { auto bus = QDBusConnection::systemBus(); if (bus.isConnected()) { const bool success = bus.connect( - QStringLiteral("org.freedesktop.login1"), QStringLiteral("/org/freedesktop/login1"), - QStringLiteral("org.freedesktop.login1.Manager"), QStringLiteral("PrepareForSleep"), - QStringLiteral("b"), this, SLOT(OnPrepareForSleep(bool))); + QStringLiteral("org.freedesktop.login1"), QStringLiteral("/org/freedesktop/login1"), + QStringLiteral("org.freedesktop.login1.Manager"), QStringLiteral("PrepareForSleep"), + QStringLiteral("b"), this, SLOT(OnPrepareForSleep(bool))); if (!success) { LOG_WARNING(Frontend, "Couldn't register PrepareForSleep signal"); @@ -1872,21 +1878,20 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa system->GetUserChannel().clear(); } - system->SetFrontendAppletSet({ - std::make_unique(*this), // Amiibo Settings - (UISettings::values.controller_applet_disabled.GetValue() == true) - ? nullptr - : std::make_unique(*this), // Controller Selector - std::make_unique(*this), // Error Display - nullptr, // Mii Editor - nullptr, // Parental Controls - nullptr, // Photo Viewer - std::make_unique(*this), // Profile Selector - std::make_unique(*this), // Software Keyboard - std::make_unique(*this), // Web Browser - nullptr, // Net Connect - }); + std::make_unique(*this), // Amiibo Settings + (UISettings::values.controller_applet_disabled.GetValue() == true) + ? nullptr + : std::make_unique(*this), // Controller Selector + std::make_unique(*this), // Error Display + nullptr, // Mii Editor + nullptr, // Parental Controls + nullptr, // Photo Viewer + std::make_unique(*this), // Profile Selector + std::make_unique(*this), // Software Keyboard + std::make_unique(*this), // Web Browser + nullptr, // Net Connect + }); /** Game Updates check */ @@ -1894,26 +1899,29 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa QSettings settings; QStringList currentIgnored = settings.value("ignoredBadUpdates", {}).toStringList(); - if (std::find(bad_update_games.begin(), bad_update_games.end(), params.program_id) != bad_update_games.end() - && !currentIgnored.contains(QString::number(params.program_id))) { - QMessageBox *msg = new QMessageBox(this); + if (std::find(bad_update_games.begin(), bad_update_games.end(), params.program_id) != + bad_update_games.end() && + !currentIgnored.contains(QString::number(params.program_id))) { + QMessageBox* msg = new QMessageBox(this); msg->setWindowTitle(tr("Game Updates Warning")); msg->setIcon(QMessageBox::Warning); - msg->setText(tr("The game you are trying to launch is known to have performance or booting " - "issues when updates are applied. Please try increasing the memory layout to " - "6GB or 8GB if any issues occur.

Press \"OK\" to continue launching, or " - "\"Cancel\" to cancel the launch.")); + msg->setText( + tr("The game you are trying to launch is known to have performance or booting " + "issues when updates are applied. Please try increasing the memory layout to " + "6GB or 8GB if any issues occur.

Press \"OK\" to continue launching, or " + "\"Cancel\" to cancel the launch.")); msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); - QCheckBox *dontShowAgain = new QCheckBox(msg); + QCheckBox* dontShowAgain = new QCheckBox(msg); dontShowAgain->setText(tr("Don't show again for this game")); msg->setCheckBox(dontShowAgain); int result = msg->exec(); // wtf - QMessageBox::ButtonRole role = msg->buttonRole(msg->button((QMessageBox::StandardButton) result)); + QMessageBox::ButtonRole role = + msg->buttonRole(msg->button((QMessageBox::StandardButton)result)); switch (role) { case QMessageBox::RejectRole: @@ -1929,19 +1937,22 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa } } - if (FirmwareManager::GameRequiresFirmware(params.program_id) && !FirmwareManager::CheckFirmwarePresence(*system)) { - QMessageBox *msg = new QMessageBox(this); + if (FirmwareManager::GameRequiresFirmware(params.program_id) && + !FirmwareManager::CheckFirmwarePresence(*system)) { + QMessageBox* msg = new QMessageBox(this); msg->setWindowTitle(tr("Game Requires Firmware")); msg->setIcon(QMessageBox::Warning); - msg->setText(tr("The game you are trying to launch requires firmware to boot or to get past the " - "opening menu. Please " - "dump and install firmware, or press \"OK\" to launch anyways.")); + msg->setText( + tr("The game you are trying to launch requires firmware to boot or to get past the " + "opening menu. Please " + "dump and install firmware, or press \"OK\" to launch anyways.")); msg->setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); int exec_result = msg->exec(); - QMessageBox::ButtonRole role = msg->buttonRole(msg->button((QMessageBox::StandardButton) exec_result)); + QMessageBox::ButtonRole role = + msg->buttonRole(msg->button((QMessageBox::StandardButton)exec_result)); switch (role) { case QMessageBox::RejectRole: @@ -1960,18 +1971,19 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa static_cast(CalloutFlag::DRDDeprecation)) == 0; if (result == Core::SystemResultStatus::Success && - system->GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory && - drd_callout) { + system->GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory && + drd_callout) { UISettings::values.callout_flags = UISettings::values.callout_flags.GetValue() | - static_cast(CalloutFlag::DRDDeprecation); + static_cast(CalloutFlag::DRDDeprecation); QMessageBox::warning( - this, tr("Warning: Outdated Game Format"), - tr("You are using the deconstructed ROM directory format for this game, which is an " - "outdated format that has been superseded by others such as NCA, NAX, XCI, or " - "NSP. Deconstructed ROM directories lack icons, metadata, and update " - "support.

For an explanation of the various Switch formats Eden supports, check out our " - "wiki. This message will not be shown again.")); + this, tr("Warning: Outdated Game Format"), + tr("You are using the deconstructed ROM directory format for this game, which is an " + "outdated format that has been superseded by others such as NCA, NAX, XCI, or " + "NSP. Deconstructed ROM directories lack icons, metadata, and update " + "support.

For an explanation of the various Switch formats Eden supports, check " + "out our " + "wiki. This message will not be shown again.")); } if (result != Core::SystemResultStatus::Success) { @@ -1983,13 +1995,13 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa break; case Core::SystemResultStatus::ErrorVideoCore: QMessageBox::critical( - this, tr("An error occurred initializing the video core."), - tr("Eden has encountered an error while running the video core. " - "This is usually caused by outdated GPU drivers, including integrated ones. " - "Please see the log for more details. " - "For more information on accessing the log, please see the following page: " - "" - "How to Upload the Log File. ")); + this, tr("An error occurred initializing the video core."), + tr("Eden has encountered an error while running the video core. " + "This is usually caused by outdated GPU drivers, including integrated ones. " + "Please see the log for more details. " + "For more information on accessing the log, please see the following page: " + "" + "How to Upload the Log File. ")); break; default: if (result > Core::SystemResultStatus::ErrorLoader) { @@ -1999,19 +2011,19 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa LOG_CRITICAL(Frontend, "Failed to load ROM! {}", error_code); const auto title = - tr("Error while loading ROM! %1", "%1 signifies a numeric error code.") + tr("Error while loading ROM! %1", "%1 signifies a numeric error code.") .arg(QString::fromStdString(error_code)); const auto description = - tr("%1
Please redump your files or ask on Discord for help.", - "%1 signifies an error string.") + tr("%1
Please redump your files or ask on Discord for help.", + "%1 signifies an error string.") .arg(QString::fromStdString( - GetResultStatusString(static_cast(error_id)))); + GetResultStatusString(static_cast(error_id)))); QMessageBox::critical(this, title, description); } else { QMessageBox::critical( - this, tr("Error while loading ROM!"), - tr("An unknown error occurred. Please see the log for more details.")); + this, tr("Error while loading ROM!"), + tr("An unknown error occurred. Please see the log for more details.")); } break; } @@ -2023,7 +2035,7 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa } bool GMainWindow::SelectAndSetCurrentUser( - const Core::Frontend::ProfileSelectParameters& parameters) { + const Core::Frontend::ProfileSelectParameters& parameters) { QtProfileSelectionDialog dialog(*system, this, parameters); dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); @@ -2063,8 +2075,8 @@ void GMainWindow::ConfigureFilesystemProvider(const std::string& filepath) { } else if (res2 == Loader::ResultStatus::Success && (file_type == Loader::FileType::XCI || file_type == Loader::FileType::NSP)) { const auto nsp = file_type == Loader::FileType::NSP - ? std::make_shared(file) - : FileSys::XCI{file}.GetSecurePartitionNSP(); + ? std::make_shared(file) + : FileSys::XCI{file}.GetSecurePartitionNSP(); for (const auto& title : nsp->GetNCAs()) { for (const auto& entry : title.second) { provider->AddEntry(entry.first.first, entry.first.second, title.first, @@ -2079,7 +2091,7 @@ void GMainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletP LOG_INFO(Frontend, "Eden starting..."); if (params.program_id == 0 || - params.program_id > static_cast(Service::AM::AppletProgramId::MaxProgramId)) { + params.program_id > static_cast(Service::AM::AppletProgramId::MaxProgramId)) { StoreRecentFile(filename); // Put the filename on top of the list } @@ -2097,13 +2109,13 @@ void GMainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletP const auto loader = Loader::GetLoader(*system, v_file, params.program_id, params.program_index); if (loader != nullptr && loader->ReadProgramId(title_id) == Loader::ResultStatus::Success && - type == StartGameType::Normal) { + type == StartGameType::Normal) { // Load per game settings const auto file_path = - std::filesystem::path{Common::U16StringFromBuffer(filename.utf16(), filename.size())}; + std::filesystem::path{Common::U16StringFromBuffer(filename.utf16(), filename.size())}; const auto config_file_name = title_id == 0 - ? Common::FS::PathToUTF8String(file_path.filename()) - : fmt::format("{:016X}", title_id); + ? Common::FS::PathToUTF8String(file_path.filename()) + : fmt::format("{:016X}", title_id); QtConfig per_game_config(config_file_name, Config::ConfigType::PerGameConfig); system->HIDCore().ReloadInputDevices(); system->ApplySettings(); @@ -2114,9 +2126,9 @@ void GMainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletP if (UISettings::values.select_user_on_boot && !user_flag_cmd_line) { const Core::Frontend::ProfileSelectParameters parameters{ .mode = Service::AM::Frontend::UiMode::UserSelector, - .invalid_uid_list = {}, - .display_options = {}, - .purpose = Service::AM::Frontend::UserSelectionPurpose::General, + .invalid_uid_list = {}, + .display_options = {}, + .purpose = Service::AM::Frontend::UserSelectionPurpose::General, }; if (SelectAndSetCurrentUser(parameters) == false) { return; @@ -2142,7 +2154,7 @@ void GMainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletP // Register an ExecuteProgram callback such that Core can execute a sub-program system->RegisterExecuteProgramCallback( - [this](std::size_t program_index_) { render_window->ExecuteProgram(program_index_); }); + [this](std::size_t program_index_) { render_window->ExecuteProgram(program_index_); }); system->RegisterExitCallback([this] { emu_thread->ForceStop(); @@ -2197,14 +2209,14 @@ void GMainWindow::BootGame(const QString& filename, Service::AM::FrontendAppletP } if (res != Loader::ResultStatus::Success || title_name.empty()) { title_name = Common::FS::PathToUTF8String( - std::filesystem::path{Common::U16StringFromBuffer(filename.utf16(), filename.size())} - .filename()); + std::filesystem::path{Common::U16StringFromBuffer(filename.utf16(), filename.size())} + .filename()); } const bool is_64bit = system->Kernel().ApplicationProcess()->Is64Bit(); const auto instruction_set_suffix = is_64bit ? tr("(64-bit)") : tr("(32-bit)"); title_name = tr("%1 %2", "%1 is the title name. %2 indicates if the title is 64-bit or 32-bit") - .arg(QString::fromStdString(title_name), instruction_set_suffix) - .toStdString(); + .arg(QString::fromStdString(title_name), instruction_set_suffix) + .toStdString(); LOG_INFO(Frontend, "Booting game: {:016X} | {} | {}", title_id, title_name, title_version); const auto gpu_vendor = system->GPU().Renderer().GetDeviceVendor(); UpdateWindowTitle(title_name, title_version, gpu_vendor); @@ -2300,7 +2312,7 @@ void GMainWindow::OnEmulationStopped() { discord_rpc->Update(); -#ifdef __unix__ +#ifdef __linux__ Common::Linux::StopGamemode(); #endif @@ -2384,11 +2396,11 @@ void GMainWindow::StoreRecentFile(const QString& filename) { void GMainWindow::UpdateRecentFiles() { const int num_recent_files = - std::min(static_cast(UISettings::values.recent_files.size()), max_recent_files_item); + std::min(static_cast(UISettings::values.recent_files.size()), max_recent_files_item); for (int i = 0; i < num_recent_files; i++) { const QString text = QStringLiteral("&%1. %2").arg(i + 1).arg( - QFileInfo(UISettings::values.recent_files[i]).fileName()); + QFileInfo(UISettings::values.recent_files[i]).fileName()); actions_recent_files[i]->setText(text); actions_recent_files[i]->setData(UISettings::values.recent_files[i]); actions_recent_files[i]->setToolTip(UISettings::values.recent_files[i]); @@ -2417,7 +2429,7 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target const auto [user_save_size, device_save_size] = [this, &game_path, &program_id] { const FileSys::PatchManager pm{program_id, system->GetFileSystemController(), - system->GetContentProvider()}; + system->GetContentProvider()}; const auto control = pm.GetControlMetadata().first; if (control != nullptr) { return std::make_pair(control->GetDefaultNormalSaveSize(), @@ -2443,16 +2455,16 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target open_target = tr("Save Data"); const auto nand_dir = Common::FS::GetEdenPath(Common::FS::EdenPath::NANDDir); auto vfs_nand_dir = - vfs->OpenDirectory(Common::FS::PathToUTF8String(nand_dir), FileSys::OpenMode::Read); + vfs->OpenDirectory(Common::FS::PathToUTF8String(nand_dir), FileSys::OpenMode::Read); if (has_user_save) { // User save data const auto select_profile = [this] { const Core::Frontend::ProfileSelectParameters parameters{ .mode = Service::AM::Frontend::UiMode::UserSelector, - .invalid_uid_list = {}, - .display_options = {}, - .purpose = Service::AM::Frontend::UserSelectionPurpose::General, + .invalid_uid_list = {}, + .display_options = {}, + .purpose = Service::AM::Frontend::UserSelectionPurpose::General, }; QtProfileSelectionDialog dialog(*system, this, parameters); dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | @@ -2472,19 +2484,19 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target } const auto user_id = - system->GetProfileManager().GetUser(static_cast(index)); + system->GetProfileManager().GetUser(static_cast(index)); ASSERT(user_id); const auto user_save_data_path = FileSys::SaveDataFactory::GetFullPath( - {}, vfs_nand_dir, FileSys::SaveDataSpaceId::User, FileSys::SaveDataType::Account, - program_id, user_id->AsU128(), 0); + {}, vfs_nand_dir, FileSys::SaveDataSpaceId::User, FileSys::SaveDataType::Account, + program_id, user_id->AsU128(), 0); path = Common::FS::ConcatPathSafe(nand_dir, user_save_data_path); } else { // Device save data const auto device_save_data_path = FileSys::SaveDataFactory::GetFullPath( - {}, vfs_nand_dir, FileSys::SaveDataSpaceId::User, FileSys::SaveDataType::Account, - program_id, {}, 0); + {}, vfs_nand_dir, FileSys::SaveDataSpaceId::User, FileSys::SaveDataType::Account, + program_id, {}, 0); path = Common::FS::ConcatPathSafe(nand_dir, device_save_data_path); } @@ -2498,7 +2510,7 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target case GameListOpenTarget::ModData: { open_target = tr("Mod Data"); path = Common::FS::GetEdenPath(Common::FS::EdenPath::LoadDir) / - fmt::format("{:016X}", program_id); + fmt::format("{:016X}", program_id); break; } default: @@ -2543,7 +2555,7 @@ static bool RomFSRawCopy(size_t total_size, size_t& read_size, QProgressDialog& auto last_timestamp = std::chrono::steady_clock::now(); const auto QtRawCopy = [&](const FileSys::VirtualFile& src_file, - const FileSys::VirtualFile& dest_file) { + const FileSys::VirtualFile& dest_file) { if (src_file == nullptr || dest_file == nullptr) { return false; } @@ -2563,7 +2575,7 @@ static bool RomFSRawCopy(size_t total_size, size_t& read_size, QProgressDialog& if ((new_timestamp - last_timestamp) > 33ms) { last_timestamp = new_timestamp; dialog.setValue( - static_cast(std::min(read_size, total_size) * 100 / total_size)); + static_cast(std::min(read_size, total_size) * 100 / total_size)); QCoreApplication::processEvents(); } @@ -2645,14 +2657,14 @@ void GMainWindow::OnGameListRemoveInstalledEntry(u64 program_id, InstalledEntryT void GMainWindow::RemoveBaseContent(u64 program_id, InstalledEntryType type) { const auto res = - ContentManager::RemoveBaseContent(system->GetFileSystemController(), program_id); + ContentManager::RemoveBaseContent(system->GetFileSystemController(), program_id); if (res) { QMessageBox::information(this, tr("Successfully Removed"), tr("Successfully removed the installed base game.")); } else { QMessageBox::warning( - this, GetGameListErrorRemoving(type), - tr("The base game is not installed in the NAND and cannot be removed.")); + this, GetGameListErrorRemoving(type), + tr("The base game is not installed in the NAND and cannot be removed.")); } } @@ -2799,10 +2811,10 @@ void GMainWindow::RemoveAllTransferableShaderCaches(u64 program_id) { void GMainWindow::RemoveCustomConfiguration(u64 program_id, const std::string& game_path) { const auto file_path = std::filesystem::path(Common::FS::ToU8String(game_path)); const auto config_file_name = - program_id == 0 ? Common::FS::PathToUTF8String(file_path.filename()).append(".ini") - : fmt::format("{:016X}.ini", program_id); + program_id == 0 ? Common::FS::PathToUTF8String(file_path.filename()).append(".ini") + : fmt::format("{:016X}.ini", program_id); const auto custom_config_file_path = - Common::FS::GetEdenPath(Common::FS::EdenPath::ConfigDir) / "custom" / config_file_name; + Common::FS::GetEdenPath(Common::FS::EdenPath::ConfigDir) / "custom" / config_file_name; if (!Common::FS::Exists(custom_config_file_path)) { QMessageBox::warning(this, tr("Error Removing Custom Configuration"), @@ -2822,11 +2834,11 @@ void GMainWindow::RemoveCustomConfiguration(u64 program_id, const std::string& g void GMainWindow::RemoveCacheStorage(u64 program_id) { const auto nand_dir = Common::FS::GetEdenPath(Common::FS::EdenPath::NANDDir); auto vfs_nand_dir = - vfs->OpenDirectory(Common::FS::PathToUTF8String(nand_dir), FileSys::OpenMode::Read); + vfs->OpenDirectory(Common::FS::PathToUTF8String(nand_dir), FileSys::OpenMode::Read); const auto cache_storage_path = FileSys::SaveDataFactory::GetFullPath( - {}, vfs_nand_dir, FileSys::SaveDataSpaceId::User, FileSys::SaveDataType::Cache, - 0 /* program_id */, {}, 0); + {}, vfs_nand_dir, FileSys::SaveDataSpaceId::User, FileSys::SaveDataType::Cache, + 0 /* program_id */, {}, 0); const auto path = Common::FS::ConcatPathSafe(nand_dir, cache_storage_path); @@ -2843,7 +2855,7 @@ void GMainWindow::OnGameListDumpRomFS(u64 program_id, const std::string& game_pa }; const auto loader = - Loader::GetLoader(*system, vfs->OpenFile(game_path, FileSys::OpenMode::Read)); + Loader::GetLoader(*system, vfs->OpenFile(game_path, FileSys::OpenMode::Read)); if (loader == nullptr) { failed(); return; @@ -2870,14 +2882,14 @@ void GMainWindow::OnGameListDumpRomFS(u64 program_id, const std::string& game_pa const FileSys::NCA update_nca{packed_update_raw, nullptr}; if (type != FileSys::ContentRecordType::Program || - update_nca.GetStatus() != Loader::ResultStatus::ErrorMissingBKTRBaseRomFS || - update_nca.GetTitleId() != FileSys::GetUpdateTitleID(title_id)) { + update_nca.GetStatus() != Loader::ResultStatus::ErrorMissingBKTRBaseRomFS || + update_nca.GetTitleId() != FileSys::GetUpdateTitleID(title_id)) { packed_update_raw = {}; } const auto base_romfs = base_nca->GetRomFS(); const auto dump_dir = - target == DumpRomFSTarget::Normal + target == DumpRomFSTarget::Normal ? Common::FS::GetEdenPath(Common::FS::EdenPath::DumpDir) : Common::FS::GetEdenPath(Common::FS::EdenPath::SDMCDir) / "atmosphere" / "contents"; const auto romfs_dir = fmt::format("{:016X}/romfs", title_id); @@ -2898,11 +2910,11 @@ void GMainWindow::OnGameListDumpRomFS(u64 program_id, const std::string& game_pa bool ok = false; const QStringList selections{tr("Full"), tr("Skeleton")}; const auto res = QInputDialog::getItem( - this, tr("Select RomFS Dump Mode"), - tr("Please select the how you would like the RomFS dumped.
Full will copy all of the " - "files into the new directory while
skeleton will only create the directory " - "structure."), - selections, 0, false, &ok); + this, tr("Select RomFS Dump Mode"), + tr("Please select the how you would like the RomFS dumped.
Full will copy all of the " + "files into the new directory while
skeleton will only create the directory " + "structure."), + selections, 0, false, &ok); if (!ok) { failed(); vfs->DeleteDirectory(path); @@ -2925,7 +2937,7 @@ void GMainWindow::OnGameListDumpRomFS(u64 program_id, const std::string& game_pa tr("There is not enough free space at %1 to extract the RomFS. Please " "free up space or select a different dump directory at " "Emulation > Configure > System > Filesystem > Dump Root") - .arg(QString::fromStdString(path))); + .arg(QString::fromStdString(path))); return; } @@ -2996,7 +3008,8 @@ void GMainWindow::OnGameListNavigateToGamedbEntry(u64 program_id, directory = it->second.second; } - QDesktopServices::openUrl(QUrl(QStringLiteral("https://eden-emulator.github.io/game/") + directory)); + QDesktopServices::openUrl( + QUrl(QStringLiteral("https://eden-emulator.github.io/game/") + directory)); } bool GMainWindow::CreateShortcutLink(const std::filesystem::path& shortcut_path, @@ -3109,8 +3122,8 @@ bool GMainWindow::CreateShortcutMessagesGUI(QWidget* parent, int imsg, const QSt case GMainWindow::CREATE_SHORTCUT_MSGBOX_FULLSCREEN_YES: buttons = QMessageBox::Yes | QMessageBox::No; result = - QMessageBox::information(parent, tr("Create Shortcut"), - tr("Do you want to launch the game in fullscreen?"), buttons); + QMessageBox::information(parent, tr("Create Shortcut"), + tr("Do you want to launch the game in fullscreen?"), buttons); return result == QMessageBox::Yes; case GMainWindow::CREATE_SHORTCUT_MSGBOX_SUCCESS: QMessageBox::information(parent, tr("Create Shortcut"), @@ -3119,10 +3132,10 @@ bool GMainWindow::CreateShortcutMessagesGUI(QWidget* parent, int imsg, const QSt case GMainWindow::CREATE_SHORTCUT_MSGBOX_APPVOLATILE_WARNING: buttons = QMessageBox::StandardButton::Ok | QMessageBox::StandardButton::Cancel; result = - QMessageBox::warning(this, tr("Create Shortcut"), - tr("This will create a shortcut to the current AppImage. This may " - "not work well if you update. Continue?"), - buttons); + QMessageBox::warning(this, tr("Create Shortcut"), + tr("This will create a shortcut to the current AppImage. This may " + "not work well if you update. Continue?"), + buttons); return result == QMessageBox::Ok; default: buttons = QMessageBox::Ok; @@ -3145,10 +3158,10 @@ bool GMainWindow::MakeShortcutIcoPath(const u64 program_id, const std::string_vi // Create icons directory if it doesn't exist if (!Common::FS::CreateDirs(out_icon_path)) { QMessageBox::critical( - this, tr("Create Icon"), - tr("Cannot create icon file. Path \"%1\" does not exist and cannot be created.") - .arg(QString::fromStdString(out_icon_path.string())), - QMessageBox::StandardButton::Ok); + this, tr("Create Icon"), + tr("Cannot create icon file. Path \"%1\" does not exist and cannot be created.") + .arg(QString::fromStdString(out_icon_path.string())), + QMessageBox::StandardButton::Ok); out_icon_path.clear(); return false; } @@ -3171,13 +3184,13 @@ void GMainWindow::OnGameListOpenDirectory(const QString& directory) { std::filesystem::path fs_path; if (directory == QStringLiteral("SDMC")) { fs_path = - Common::FS::GetEdenPath(Common::FS::EdenPath::SDMCDir) / "Nintendo/Contents/registered"; + Common::FS::GetEdenPath(Common::FS::EdenPath::SDMCDir) / "Nintendo/Contents/registered"; } else if (directory == QStringLiteral("UserNAND")) { fs_path = - Common::FS::GetEdenPath(Common::FS::EdenPath::NANDDir) / "user/Contents/registered"; + Common::FS::GetEdenPath(Common::FS::EdenPath::NANDDir) / "user/Contents/registered"; } else if (directory == QStringLiteral("SysNAND")) { fs_path = - Common::FS::GetEdenPath(Common::FS::EdenPath::NANDDir) / "system/Contents/registered"; + Common::FS::GetEdenPath(Common::FS::EdenPath::NANDDir) / "system/Contents/registered"; } else { fs_path = directory.toStdString(); } @@ -3238,14 +3251,14 @@ void GMainWindow::OnMenuLoadFile() { is_load_file_select_active = true; const QString extensions = - QStringLiteral("*.") + QStringLiteral("*.") .append(GameList::supported_file_extensions.join(QStringLiteral(" *."))) .append(QStringLiteral(" main")); const QString file_filter = tr("Switch Executable (%1);;All Files (*.*)", "%1 is an identifier for the Switch executable file extensions.") - .arg(extensions); + .arg(extensions); const QString filename = QFileDialog::getOpenFileName( - this, tr("Load File"), QString::fromStdString(UISettings::values.roms_path), file_filter); + this, tr("Load File"), QString::fromStdString(UISettings::values.roms_path), file_filter); is_load_file_select_active = false; if (filename.isEmpty()) { @@ -3258,7 +3271,7 @@ void GMainWindow::OnMenuLoadFile() { void GMainWindow::OnMenuLoadFolder() { const QString dir_path = - QFileDialog::getExistingDirectory(this, tr("Open Extracted ROM Directory")); + QFileDialog::getExistingDirectory(this, tr("Open Extracted ROM Directory")); if (dir_path.isNull()) { return; @@ -3280,13 +3293,13 @@ void GMainWindow::IncrementInstallProgress() { void GMainWindow::OnMenuInstallToNAND() { const QString file_filter = - tr("Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive " - "(*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge " - "Image (*.xci)"); + tr("Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive " + "(*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge " + "Image (*.xci)"); QStringList filenames = QFileDialog::getOpenFileNames( - this, tr("Install Files"), QString::fromStdString(UISettings::values.roms_path), - file_filter); + this, tr("Install Files"), QString::fromStdString(UISettings::values.roms_path), + file_filter); if (filenames.isEmpty()) { return; @@ -3334,7 +3347,7 @@ void GMainWindow::OnMenuInstallToNAND() { for (const QString& file : files) { install_progress->setWindowTitle(tr("%n file(s) remaining", "", remaining)); install_progress->setLabelText( - tr("Installing file \"%1\"...").arg(QFileInfo(file).fileName())); + tr("Installing file \"%1\"...").arg(QFileInfo(file).fileName())); QFuture future; ContentManager::InstallResult result; @@ -3388,19 +3401,19 @@ void GMainWindow::OnMenuInstallToNAND() { if (detected_base_install) { QMessageBox::warning( - this, tr("Install Results"), - tr("To avoid possible conflicts, we discourage users from installing base games to the " - "NAND.\nPlease, only use this feature to install updates and DLC.")); + this, tr("Install Results"), + tr("To avoid possible conflicts, we discourage users from installing base games to the " + "NAND.\nPlease, only use this feature to install updates and DLC.")); } const QString install_results = - (new_files.isEmpty() ? QString{} - : tr("%n file(s) were newly installed\n", "", new_files.size())) + - (overwritten_files.isEmpty() + (new_files.isEmpty() ? QString{} + : tr("%n file(s) were newly installed\n", "", new_files.size())) + + (overwritten_files.isEmpty() ? QString{} : tr("%n file(s) were overwritten\n", "", overwritten_files.size())) + - (failed_files.isEmpty() ? QString{} - : tr("%n file(s) failed to install\n", "", failed_files.size())); + (failed_files.isEmpty() ? QString{} + : tr("%n file(s) failed to install\n", "", failed_files.size())); QMessageBox::information(this, tr("Install Results"), install_results); Common::FS::RemoveDirRecursively(Common::FS::GetEdenPath(Common::FS::EdenPath::CacheDir) / @@ -3411,20 +3424,20 @@ void GMainWindow::OnMenuInstallToNAND() { ContentManager::InstallResult GMainWindow::InstallNCA(const QString& filename) { const QStringList tt_options{tr("System Application"), - tr("System Archive"), - tr("System Application Update"), - tr("Firmware Package (Type A)"), - tr("Firmware Package (Type B)"), - tr("Game"), - tr("Game Update"), - tr("Game DLC"), - tr("Delta Title")}; + tr("System Archive"), + tr("System Application Update"), + tr("Firmware Package (Type A)"), + tr("Firmware Package (Type B)"), + tr("Game"), + tr("Game Update"), + tr("Game DLC"), + tr("Delta Title")}; bool ok; const auto item = QInputDialog::getItem( - this, tr("Select NCA Install Type..."), - tr("Please select the type of title you would like to install this NCA as:\n(In " - "most instances, the default 'Game' is fine.)"), - tt_options, 5, false, &ok); + this, tr("Select NCA Install Type..."), + tr("Please select the type of title you would like to install this NCA as:\n(In " + "most instances, the default 'Game' is fine.)"), + tt_options, 5, false, &ok); auto index = tt_options.indexOf(item); if (!ok || index == -1) { @@ -3436,7 +3449,7 @@ ContentManager::InstallResult GMainWindow::InstallNCA(const QString& filename) { // If index is equal to or past Game, add the jump in TitleType. if (index >= 5) { index += static_cast(FileSys::TitleType::Application) - - static_cast(FileSys::TitleType::FirmwarePackageB); + static_cast(FileSys::TitleType::FirmwarePackageB); } const bool is_application = index >= static_cast(FileSys::TitleType::Application); @@ -3485,7 +3498,7 @@ void GMainWindow::OnStartGame() { discord_rpc->Update(); -#ifdef __unix__ +#ifdef __linux__ Common::Linux::StartGamemode(); #endif } @@ -3509,7 +3522,7 @@ void GMainWindow::OnPauseGame() { UpdateMenuState(); AllowOSSleep(); -#ifdef __unix__ +#ifdef __linux__ Common::Linux::StopGamemode(); #endif } @@ -3551,7 +3564,7 @@ bool GMainWindow::ConfirmShutdownGame() { } else { if (UISettings::values.confirm_before_stopping.GetValue() == ConfirmStop::Ask_Based_On_Game && - system->GetExitLocked()) { + system->GetExitLocked()) { if (!ConfirmForceLockedExit()) { return false; } @@ -3617,14 +3630,15 @@ void GMainWindow::OnMenuReportCompatibility() { } if (!Settings::values.eden_token.GetValue().empty() && - !Settings::values.eden_username.GetValue().empty()) { + !Settings::values.eden_username.GetValue().empty()) { } else { QMessageBox::critical( - this, tr("Missing yuzu Account"), - tr("In order to submit a game compatibility test case, you must set up your web token and " - "username.

To link your eden account, go to Emulation > Configuration " - "> " - "Web.")); + this, tr("Missing yuzu Account"), + tr("In order to submit a game compatibility test case, you must set up your web token " + "and " + "username.

To link your eden account, go to Emulation > Configuration " + "> " + "Web.")); } #else QMessageBox::critical(this, tr("Hardware requirements not met"), @@ -3653,8 +3667,7 @@ void GMainWindow::OnOpenFAQ() { OpenURL(QUrl(QStringLiteral("https://eden-emu.dev"))); } -void GMainWindow::OnOpenDiscord() -{ +void GMainWindow::OnOpenDiscord() { OpenURL(QUrl(QStringLiteral("https://discord.gg/edenemu"))); } @@ -3673,18 +3686,18 @@ void GMainWindow::ToggleFullscreen() { static QScreen* GuessCurrentScreen(QWidget* window) { const QList screens = QGuiApplication::screens(); return *std::max_element( - screens.cbegin(), screens.cend(), [window](const QScreen* left, const QScreen* right) { - const QSize left_size = left->geometry().intersected(window->geometry()).size(); - const QSize right_size = right->geometry().intersected(window->geometry()).size(); - return (left_size.height() * left_size.width()) < - (right_size.height() * right_size.width()); - }); + screens.cbegin(), screens.cend(), [window](const QScreen* left, const QScreen* right) { + const QSize left_size = left->geometry().intersected(window->geometry()).size(); + const QSize right_size = right->geometry().intersected(window->geometry()).size(); + return (left_size.height() * left_size.width()) < + (right_size.height() * right_size.width()); + }); } bool GMainWindow::UsingExclusiveFullscreen() { return Settings::values.fullscreen_mode.GetValue() == Settings::FullscreenMode::Exclusive || - QGuiApplication::platformName() == QStringLiteral("wayland") || - QGuiApplication::platformName() == QStringLiteral("wayland-egl"); + QGuiApplication::platformName() == QStringLiteral("wayland") || + QGuiApplication::platformName() == QStringLiteral("wayland-egl"); } void GMainWindow::ShowFullscreen() { @@ -3771,8 +3784,8 @@ void GMainWindow::ToggleWindowMode() { void GMainWindow::ResetWindowSize(u32 width, u32 height) { const auto aspect_ratio = Layout::EmulationAspectRatio( - static_cast(Settings::values.aspect_ratio.GetValue()), - static_cast(height) / width); + static_cast(Settings::values.aspect_ratio.GetValue()), + static_cast(height) / width); if (!ui->action_Single_Window_Mode->isChecked()) { render_window->resize(height / aspect_ratio, height); } else { @@ -3798,7 +3811,7 @@ void GMainWindow::OnConfigure() { const auto old_theme = UISettings::values.theme; const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue(); const auto old_language_index = Settings::values.language_index.GetValue(); -#ifdef __unix__ +#ifdef __linux__ const bool old_gamemode = Settings::values.enable_gamemode.GetValue(); #endif @@ -3811,7 +3824,7 @@ void GMainWindow::OnConfigure() { const auto result = configure_dialog.exec(); if (result != QDialog::Accepted && !UISettings::values.configuration_applied && - !UISettings::values.reset_to_defaults) { + !UISettings::values.reset_to_defaults) { // Runs if the user hit Cancel or closed the window, and did not ever press the Apply button // or `Reset to Defaults` button return; @@ -3826,11 +3839,11 @@ void GMainWindow::OnConfigure() { LOG_WARNING(Frontend, "Failed to remove configuration file"); } if (!Common::FS::RemoveDirContentsRecursively( - Common::FS::GetEdenPath(Common::FS::EdenPath::ConfigDir) / "custom")) { + Common::FS::GetEdenPath(Common::FS::EdenPath::ConfigDir) / "custom")) { LOG_WARNING(Frontend, "Failed to remove custom configuration files"); } if (!Common::FS::RemoveDirRecursively( - Common::FS::GetEdenPath(Common::FS::EdenPath::CacheDir) / "game_list")) { + Common::FS::GetEdenPath(Common::FS::EdenPath::CacheDir) / "game_list")) { LOG_WARNING(Frontend, "Failed to remove game metadata cache files"); } @@ -3860,7 +3873,7 @@ void GMainWindow::OnConfigure() { if (UISettings::values.enable_discord_presence.GetValue() != old_discord_presence) { SetDiscordEnabled(UISettings::values.enable_discord_presence.GetValue()); } -#ifdef __unix__ +#ifdef __linux__ if (Settings::values.enable_gamemode.GetValue() != old_gamemode) { SetGamemodeEnabled(Settings::values.enable_gamemode.GetValue()); } @@ -4144,12 +4157,12 @@ bool GMainWindow::question(QWidget* parent, const QString& title, const QString& box_dialog->setDefaultButton(defaultButton); ControllerNavigation* controller_navigation = - new ControllerNavigation(system->HIDCore(), box_dialog); + new ControllerNavigation(system->HIDCore(), box_dialog); connect(controller_navigation, &ControllerNavigation::TriggerKeyboardEvent, [box_dialog](Qt::Key key) { - QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier); - QCoreApplication::postEvent(box_dialog, event); - }); + QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier); + QCoreApplication::postEvent(box_dialog, event); + }); int res = box_dialog->exec(); controller_navigation->UnloadController(); @@ -4185,32 +4198,28 @@ void GMainWindow::LoadAmiibo(const QString& filename) { } void GMainWindow::OnOpenRootDataFolder() { - QDesktopServices::openUrl(QUrl( - QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::EdenDir)))); + QDesktopServices::openUrl( + QUrl(QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::EdenDir)))); } -void GMainWindow::OnOpenNANDFolder() -{ +void GMainWindow::OnOpenNANDFolder() { QDesktopServices::openUrl(QUrl::fromLocalFile( - QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::NANDDir)))); + QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::NANDDir)))); } -void GMainWindow::OnOpenSDMCFolder() -{ +void GMainWindow::OnOpenSDMCFolder() { QDesktopServices::openUrl(QUrl::fromLocalFile( - QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::SDMCDir)))); + QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::SDMCDir)))); } -void GMainWindow::OnOpenModFolder() -{ +void GMainWindow::OnOpenModFolder() { QDesktopServices::openUrl(QUrl::fromLocalFile( - QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::LoadDir)))); + QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::LoadDir)))); } -void GMainWindow::OnOpenLogFolder() -{ +void GMainWindow::OnOpenLogFolder() { QDesktopServices::openUrl(QUrl::fromLocalFile( - QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::LogDir)))); + QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::LogDir)))); } void GMainWindow::OnVerifyInstalledContents() { @@ -4228,7 +4237,7 @@ void GMainWindow::OnVerifyInstalledContents() { }; const std::vector result = - ContentManager::VerifyInstalledContents(*system, *provider, QtProgressCallback); + ContentManager::VerifyInstalledContents(*system, *provider, QtProgressCallback); progress.close(); if (result.empty()) { @@ -4236,15 +4245,14 @@ void GMainWindow::OnVerifyInstalledContents() { tr("The operation completed successfully.")); } else { const auto failed_names = - QString::fromStdString(fmt::format("{}", fmt::join(result, "\n"))); + QString::fromStdString(fmt::format("{}", fmt::join(result, "\n"))); QMessageBox::critical( - this, tr("Integrity verification failed!"), - tr("Verification failed for the following files:\n\n%1").arg(failed_names)); + this, tr("Integrity verification failed!"), + tr("Verification failed for the following files:\n\n%1").arg(failed_names)); } } -void GMainWindow::InstallFirmware(const QString &location, bool recursive) -{ +void GMainWindow::InstallFirmware(const QString& location, bool recursive) { QProgressDialog progress(tr("Installing Firmware..."), tr("Cancel"), 0, 100, this); progress.setWindowModality(Qt::WindowModal); progress.setMinimumDuration(100); @@ -4270,20 +4278,22 @@ void GMainWindow::InstallFirmware(const QString &location, bool recursive) std::vector out; const Common::FS::DirEntryCallable callback = - [&out](const std::filesystem::directory_entry& entry) { - if (entry.path().has_extension() && entry.path().extension() == ".nca") { - out.emplace_back(entry.path()); - } + [&out](const std::filesystem::directory_entry& entry) { + if (entry.path().has_extension() && entry.path().extension() == ".nca") { + out.emplace_back(entry.path()); + } - return true; - }; + return true; + }; QtProgressCallback(100, 10); if (recursive) { - Common::FS::IterateDirEntriesRecursively(firmware_source_path, callback, Common::FS::DirEntryFilter::File); + Common::FS::IterateDirEntriesRecursively(firmware_source_path, callback, + Common::FS::DirEntryFilter::File); } else { - Common::FS::IterateDirEntries(firmware_source_path, callback, Common::FS::DirEntryFilter::File); + Common::FS::IterateDirEntries(firmware_source_path, callback, + Common::FS::DirEntryFilter::File); } if (out.size() <= 0) { @@ -4314,9 +4324,9 @@ void GMainWindow::InstallFirmware(const QString &location, bool recursive) for (const auto& firmware_src_path : out) { i++; auto firmware_src_vfile = - vfs->OpenFile(firmware_src_path.generic_string(), FileSys::OpenMode::Read); + vfs->OpenFile(firmware_src_path.generic_string(), FileSys::OpenMode::Read); auto firmware_dst_vfile = - firmware_vdir->CreateFileRelative(firmware_src_path.filename().string()); + firmware_vdir->CreateFileRelative(firmware_src_path.filename().string()); if (!VfsRawCopy(firmware_src_vfile, firmware_dst_vfile)) { LOG_ERROR(Frontend, "Failed to copy firmware file {} to {} in registered folder!", @@ -4325,12 +4335,12 @@ void GMainWindow::InstallFirmware(const QString &location, bool recursive) } if (QtProgressCallback( - 100, 20 + static_cast(((i) / static_cast(out.size())) * 70.0))) { + 100, 20 + static_cast(((i) / static_cast(out.size())) * 70.0))) { progress.close(); QMessageBox::warning( - this, tr("Firmware install failed"), - tr("Firmware installation cancelled, firmware may be in a bad state or corrupted. " - "Restart Eden or re-install firmware.")); + this, tr("Firmware install failed"), + tr("Firmware installation cancelled, firmware may be in a bad state or corrupted. " + "Restart Eden or re-install firmware.")); return; } } @@ -4351,15 +4361,15 @@ void GMainWindow::InstallFirmware(const QString &location, bool recursive) }; auto result = - ContentManager::VerifyInstalledContents(*system, *provider, VerifyFirmwareCallback, true); + ContentManager::VerifyInstalledContents(*system, *provider, VerifyFirmwareCallback, true); if (result.size() > 0) { const auto failed_names = - QString::fromStdString(fmt::format("{}", fmt::join(result, "\n"))); + QString::fromStdString(fmt::format("{}", fmt::join(result, "\n"))); progress.close(); QMessageBox::critical( - this, tr("Firmware integrity verification failed!"), - tr("Verification failed for the following files:\n\n%1").arg(failed_names)); + this, tr("Firmware integrity verification failed!"), + tr("Verification failed for the following files:\n\n%1").arg(failed_names)); return; } @@ -4377,13 +4387,13 @@ void GMainWindow::OnInstallFirmware() { // Check for installed keys, error out, suggest restart? if (!ContentManager::AreKeysPresent()) { QMessageBox::information( - this, tr("Keys not installed"), - tr("Install decryption keys and restart Eden before attempting to install firmware.")); + this, tr("Keys not installed"), + tr("Install decryption keys and restart Eden before attempting to install firmware.")); return; } const QString firmware_source_location = QFileDialog::getExistingDirectory( - this, tr("Select Dumped Firmware Source Location"), {}, QFileDialog::ShowDirsOnly); + this, tr("Select Dumped Firmware Source Location"), {}, QFileDialog::ShowDirsOnly); if (firmware_source_location.isEmpty()) { return; } @@ -4391,8 +4401,7 @@ void GMainWindow::OnInstallFirmware() { InstallFirmware(firmware_source_location); } -void GMainWindow::OnInstallFirmwareFromZIP() -{ +void GMainWindow::OnInstallFirmwareFromZIP() { // Don't do this while emulation is running, that'd probably be a bad idea. if (emu_thread != nullptr && emu_thread->IsRunning()) { return; @@ -4401,13 +4410,13 @@ void GMainWindow::OnInstallFirmwareFromZIP() // Check for installed keys, error out, suggest restart? if (!ContentManager::AreKeysPresent()) { QMessageBox::information( - this, tr("Keys not installed"), - tr("Install decryption keys and restart Eden before attempting to install firmware.")); + this, tr("Keys not installed"), + tr("Install decryption keys and restart Eden before attempting to install firmware.")); return; } const QString firmware_zip_location = QFileDialog::getOpenFileName( - this, tr("Select Dumped Firmware ZIP"), {}, tr("Zipped Archives (*.zip)")); + this, tr("Select Dumped Firmware ZIP"), {}, tr("Zipped Archives (*.zip)")); if (firmware_zip_location.isEmpty()) { return; } @@ -4440,19 +4449,20 @@ void GMainWindow::OnInstallFirmwareFromZIP() std::filesystem::remove_all(tmp, ec); if (ec) { - QMessageBox::warning(this, tr("Firmware cleanup failed"), - tr("Failed to clean up extracted firmware cache.\n" - "Check write permissions in the system temp directory and try again.\nOS reported error: %1") + QMessageBox::warning(this, tr("Firmware cleanup failed"), + tr("Failed to clean up extracted firmware cache.\n" + "Check write permissions in the system temp directory and try " + "again.\nOS reported error: %1") .arg(QString::fromStdString(ec.message()))); } return; } unzipFailed: - QMessageBox::critical(this, tr("Firmware unzip failed"), - tr("Check write permissions in the system temp directory and try again.")); - return; - + QMessageBox::critical( + this, tr("Firmware unzip failed"), + tr("Check write permissions in the system temp directory and try again.")); + return; } void GMainWindow::OnInstallDecryptionKeys() { @@ -4462,13 +4472,14 @@ void GMainWindow::OnInstallDecryptionKeys() { } const QString key_source_location = QFileDialog::getOpenFileName( - this, tr("Select Dumped Keys Location"), {}, QStringLiteral("Decryption Keys (*.keys)"), {}, - QFileDialog::ReadOnly); + this, tr("Select Dumped Keys Location"), {}, QStringLiteral("Decryption Keys (*.keys)"), {}, + QFileDialog::ReadOnly); if (key_source_location.isEmpty()) { return; } - FirmwareManager::KeyInstallResult result = FirmwareManager::InstallKeys(key_source_location.toStdString(), "keys"); + FirmwareManager::KeyInstallResult result = + FirmwareManager::InstallKeys(key_source_location.toStdString(), "keys"); system->GetFileSystemController().CreateFactories(*vfs); game_list->PopulateAsync(UISettings::values.game_dirs); @@ -4479,9 +4490,8 @@ void GMainWindow::OnInstallDecryptionKeys() { tr("Decryption Keys were successfully installed")); break; default: - QMessageBox::critical( - this, tr("Decryption Keys install failed"), - tr(FirmwareManager::GetKeyInstallResultString(result))); + QMessageBox::critical(this, tr("Decryption Keys install failed"), + tr(FirmwareManager::GetKeyInstallResultString(result))); break; } @@ -4507,8 +4517,7 @@ void GMainWindow::OnToggleStatusBar() { statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked()); } -void GMainWindow::OnGameListRefresh() -{ +void GMainWindow::OnGameListRefresh() { // force reload add-ons etc game_list->ForceRefreshGameDirectory(); } @@ -4593,7 +4602,7 @@ void GMainWindow::OnOpenControllerMenu() { } auto controller_applet_nca = - bis_system->GetEntry(ControllerAppletId, FileSys::ContentRecordType::Program); + bis_system->GetEntry(ControllerAppletId, FileSys::ContentRecordType::Program); if (!controller_applet_nca) { QMessageBox::warning(this, tr("Controller Applet"), tr("Controller Menu is not available. Please reinstall firmware.")); @@ -4631,8 +4640,7 @@ void GMainWindow::OnHomeMenu() { BootGame(filename, LibraryAppletParameters(QLaunchId, Service::AM::AppletId::QLaunch)); } -void GMainWindow::OnInitialSetup() -{ +void GMainWindow::OnInitialSetup() { constexpr u64 Starter = static_cast(Service::AM::AppletProgramId::Starter); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { @@ -4655,18 +4663,15 @@ void GMainWindow::OnInitialSetup() BootGame(filename, LibraryAppletParameters(Starter, Service::AM::AppletId::Starter)); } -void GMainWindow::OnCreateHomeMenuDesktopShortcut() -{ +void GMainWindow::OnCreateHomeMenuDesktopShortcut() { OnCreateHomeMenuShortcut(GameListShortcutTarget::Desktop); } -void GMainWindow::OnCreateHomeMenuApplicationMenuShortcut() -{ +void GMainWindow::OnCreateHomeMenuApplicationMenuShortcut() { OnCreateHomeMenuShortcut(GameListShortcutTarget::Applications); } -std::filesystem::path GMainWindow::GetEdenCommand() -{ +std::filesystem::path GMainWindow::GetEdenCommand() { std::filesystem::path command; QString appimage = QString::fromLocal8Bit(getenv("APPIMAGE")); @@ -4685,21 +4690,22 @@ std::filesystem::path GMainWindow::GetEdenCommand() return command; } -std::filesystem::path GMainWindow::GetShortcutPath(GameListShortcutTarget target) -{ +std::filesystem::path GMainWindow::GetShortcutPath(GameListShortcutTarget target) { std::filesystem::path shortcut_path{}; if (target == GameListShortcutTarget::Desktop) { shortcut_path = - QStandardPaths::writableLocation(QStandardPaths::DesktopLocation).toStdString(); + QStandardPaths::writableLocation(QStandardPaths::DesktopLocation).toStdString(); } else if (target == GameListShortcutTarget::Applications) { shortcut_path = - QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation).toStdString(); + QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation).toStdString(); } return shortcut_path; } -void GMainWindow::CreateShortcut(const std::string &game_path, const u64 program_id, const std::string& game_title_, GameListShortcutTarget target, std::string arguments_, const bool needs_title) { +void GMainWindow::CreateShortcut(const std::string& game_path, const u64 program_id, + const std::string& game_title_, GameListShortcutTarget target, + std::string arguments_, const bool needs_title) { // Get path to yuzu executable std::filesystem::path command = GetEdenCommand(); @@ -4708,17 +4714,17 @@ void GMainWindow::CreateShortcut(const std::string &game_path, const u64 program if (!std::filesystem::exists(shortcut_path)) { GMainWindow::CreateShortcutMessagesGUI( - this, GMainWindow::CREATE_SHORTCUT_MSGBOX_ERROR, - QString::fromStdString(shortcut_path.generic_string())); + this, GMainWindow::CREATE_SHORTCUT_MSGBOX_ERROR, + QString::fromStdString(shortcut_path.generic_string())); LOG_ERROR(Frontend, "Invalid shortcut target {}", shortcut_path.generic_string()); return; } const FileSys::PatchManager pm{program_id, system->GetFileSystemController(), - system->GetContentProvider()}; + system->GetContentProvider()}; const auto control = pm.GetControlMetadata(); const auto loader = - Loader::GetLoader(*system, vfs->OpenFile(game_path, FileSys::OpenMode::Read)); + Loader::GetLoader(*system, vfs->OpenFile(game_path, FileSys::OpenMode::Read)); std::string game_title{game_title_}; @@ -4750,7 +4756,7 @@ void GMainWindow::CreateShortcut(const std::string &game_path, const u64 program } QImage icon_data = - QImage::fromData(icon_image_file.data(), static_cast(icon_image_file.size())); + QImage::fromData(icon_image_file.data(), static_cast(icon_image_file.size())); std::filesystem::path out_icon_path; if (GMainWindow::MakeShortcutIcoPath(program_id, game_title, out_icon_path)) { if (!SaveIconToFile(out_icon_path, icon_data)) { @@ -4763,7 +4769,7 @@ void GMainWindow::CreateShortcut(const std::string &game_path, const u64 program // Warn once if we are making a shortcut to a volatile AppImage if (command.string().ends_with(".AppImage") && !UISettings::values.shortcut_already_warned) { if (!GMainWindow::CreateShortcutMessagesGUI( - this, GMainWindow::CREATE_SHORTCUT_MSGBOX_APPVOLATILE_WARNING, qgame_title)) { + this, GMainWindow::CREATE_SHORTCUT_MSGBOX_APPVOLATILE_WARNING, qgame_title)) { return; } UISettings::values.shortcut_already_warned = true; @@ -4773,15 +4779,15 @@ void GMainWindow::CreateShortcut(const std::string &game_path, const u64 program // Create shortcut std::string arguments{arguments_}; if (GMainWindow::CreateShortcutMessagesGUI( - this, GMainWindow::CREATE_SHORTCUT_MSGBOX_FULLSCREEN_YES, qgame_title)) { + this, GMainWindow::CREATE_SHORTCUT_MSGBOX_FULLSCREEN_YES, qgame_title)) { arguments = "-f " + arguments; } const std::string comment = fmt::format("Start {:s} with the eden Emulator", game_title); const std::string categories = "Game;Emulator;Qt;"; const std::string keywords = "Switch;Nintendo;"; - if (GMainWindow::CreateShortcutLink(shortcut_path, comment, out_icon_path, command, - arguments, categories, keywords, game_title)) { + if (GMainWindow::CreateShortcutLink(shortcut_path, comment, out_icon_path, command, arguments, + categories, keywords, game_title)) { GMainWindow::CreateShortcutMessagesGUI(this, GMainWindow::CREATE_SHORTCUT_MSGBOX_SUCCESS, qgame_title); return; @@ -4790,8 +4796,7 @@ void GMainWindow::CreateShortcut(const std::string &game_path, const u64 program qgame_title); } -void GMainWindow::OnCreateHomeMenuShortcut(GameListShortcutTarget target) -{ +void GMainWindow::OnCreateHomeMenuShortcut(GameListShortcutTarget target) { constexpr u64 QLaunchId = static_cast(Service::AM::AppletProgramId::QLaunch); auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { @@ -4820,13 +4825,13 @@ void GMainWindow::OnCaptureScreenshot() { const u64 title_id = system->GetApplicationProcessProgramID(); const auto screenshot_path = - QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::ScreenshotsDir)); + QString::fromStdString(Common::FS::GetEdenPathString(Common::FS::EdenPath::ScreenshotsDir)); const auto date = - QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd_hh-mm-ss-zzz")); + QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd_hh-mm-ss-zzz")); QString filename = QStringLiteral("%1/%2_%3.png") - .arg(screenshot_path) - .arg(title_id, 16, 16, QLatin1Char{'0'}) - .arg(date); + .arg(screenshot_path) + .arg(title_id, 16, 16, QLatin1Char{'0'}) + .arg(date); if (!Common::FS::CreateDir(screenshot_path.toStdString())) { return; @@ -4850,7 +4855,7 @@ void GMainWindow::OnCaptureScreenshot() { void GMainWindow::MigrateConfigFiles() { const auto config_dir_fs_path = Common::FS::GetEdenPath(Common::FS::EdenPath::ConfigDir); const QDir config_dir = - QDir(QString::fromStdString(Common::FS::PathToUTF8String(config_dir_fs_path))); + QDir(QString::fromStdString(Common::FS::PathToUTF8String(config_dir_fs_path))); const QStringList config_dir_list = config_dir.entryList(QStringList(QStringLiteral("*.ini"))); if (!Common::FS::CreateDirs(config_dir_fs_path / "custom")) { @@ -4884,13 +4889,13 @@ void GMainWindow::OnEmulatorUpdateAvailable() { update_prompt.setIcon(QMessageBox::Information); update_prompt.addButton(QMessageBox::Yes); update_prompt.addButton(QMessageBox::Ignore); - update_prompt.setText(tr("Update %1 for Eden is available.\nWould you like to download it?") - .arg(version_string)); + update_prompt.setText( + tr("Update %1 for Eden is available.\nWould you like to download it?").arg(version_string)); update_prompt.exec(); if (update_prompt.button(QMessageBox::Yes) == update_prompt.clickedButton()) { QDesktopServices::openUrl( - QUrl(QString::fromStdString("https://github.com/eden-emulator/Releases/releases/tag/") + - version_string)); + QUrl(QString::fromStdString("https://github.com/eden-emulator/Releases/releases/tag/") + + version_string)); } } #endif @@ -4908,7 +4913,7 @@ void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_vie } const auto override_title = - fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); + fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id); const auto window_title = override_title.empty() ? yuzu_title : override_title; if (title_name.empty()) { @@ -4926,7 +4931,7 @@ void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_vie } std::string GMainWindow::CreateTASFramesString( - std::array frames) const { + std::array frames) const { std::string string = ""; size_t maxPlayerIndex = 0; for (size_t i = 0; i < frames.size(); i++) { @@ -4947,14 +4952,14 @@ QString GMainWindow::GetTasStateDescription() const { switch (tas_status) { case InputCommon::TasInput::TasState::Running: return tr("TAS state: Running %1/%2") - .arg(current_tas_frame) - .arg(QString::fromStdString(tas_frames_string)); + .arg(current_tas_frame) + .arg(QString::fromStdString(tas_frames_string)); case InputCommon::TasInput::TasState::Recording: return tr("TAS state: Recording %1").arg(total_tas_frames[0]); case InputCommon::TasInput::TasState::Stopped: return tr("TAS state: Idle %1/%2") - .arg(current_tas_frame) - .arg(QString::fromStdString(tas_frames_string)); + .arg(current_tas_frame) + .arg(QString::fromStdString(tas_frames_string)); default: return tr("TAS State: Invalid"); } @@ -4965,7 +4970,7 @@ void GMainWindow::OnTasStateChanged() { bool is_recording = false; if (emulation_running) { const InputCommon::TasInput::TasState tas_status = - std::get<0>(input_subsystem->GetTas()->GetStatus()); + std::get<0>(input_subsystem->GetTas()->GetStatus()); is_running = tas_status == InputCommon::TasInput::TasState::Running; is_recording = tas_status == InputCommon::TasInput::TasState::Recording; } @@ -5004,18 +5009,19 @@ void GMainWindow::UpdateStatusBar() { const auto res_info = Settings::values.resolution_info; const auto res_scale = res_info.up_factor; res_scale_label->setText( - tr("Scale: %1x", "%1 is the resolution scaling factor").arg(res_scale)); + tr("Scale: %1x", "%1 is the resolution scaling factor").arg(res_scale)); if (Settings::values.use_speed_limit.GetValue()) { emu_speed_label->setText(tr("Speed: %1% / %2%") - .arg(results.emulation_speed * 100.0, 0, 'f', 0) - .arg(Settings::values.speed_limit.GetValue())); + .arg(results.emulation_speed * 100.0, 0, 'f', 0) + .arg(Settings::values.speed_limit.GetValue())); } else { emu_speed_label->setText(tr("Speed: %1%").arg(results.emulation_speed * 100.0, 0, 'f', 0)); } game_fps_label->setText( - tr("Game: %1 FPS").arg(std::round(results.average_game_fps), 0, 'f', 0) + tr(Settings::values.use_speed_limit ? "" : " (Unlocked)")); + tr("Game: %1 FPS").arg(std::round(results.average_game_fps), 0, 'f', 0) + + tr(Settings::values.use_speed_limit ? "" : " (Unlocked)")); emu_frametime_label->setText(tr("Frame: %1 ms").arg(results.frametime * 1000.0, 0, 'f', 2)); @@ -5029,7 +5035,7 @@ void GMainWindow::UpdateStatusBar() { void GMainWindow::UpdateGPUAccuracyButton() { const auto gpu_accuracy = Settings::values.gpu_accuracy.GetValue(); const auto gpu_accuracy_text = - ConfigurationShared::gpu_accuracy_texts_map.find(gpu_accuracy)->second; + ConfigurationShared::gpu_accuracy_texts_map.find(gpu_accuracy)->second; gpu_accuracy_button->setText(gpu_accuracy_text.toUpper()); gpu_accuracy_button->setChecked(gpu_accuracy != Settings::GpuAccuracy::Normal); } @@ -5038,20 +5044,20 @@ void GMainWindow::UpdateDockedButton() { const auto console_mode = Settings::values.use_docked_mode.GetValue(); dock_status_button->setChecked(Settings::IsDockedMode()); dock_status_button->setText( - ConfigurationShared::use_docked_mode_texts_map.find(console_mode)->second.toUpper()); + ConfigurationShared::use_docked_mode_texts_map.find(console_mode)->second.toUpper()); } void GMainWindow::UpdateAPIText() { const auto api = Settings::values.renderer_backend.GetValue(); const auto renderer_status_text = - ConfigurationShared::renderer_backend_texts_map.find(api)->second; + ConfigurationShared::renderer_backend_texts_map.find(api)->second; renderer_status_button->setText( - api == Settings::RendererBackend::OpenGL - ? tr("%1 %2").arg(renderer_status_text.toUpper(), - ConfigurationShared::shader_backend_texts_map + api == Settings::RendererBackend::OpenGL + ? tr("%1 %2").arg(renderer_status_text.toUpper(), + ConfigurationShared::shader_backend_texts_map .find(Settings::values.shader_backend.GetValue()) ->second) - : renderer_status_text.toUpper()); + : renderer_status_text.toUpper()); } void GMainWindow::UpdateFilterText() { @@ -5065,8 +5071,8 @@ void GMainWindow::UpdateAAText() { const auto aa_mode = Settings::values.anti_aliasing.GetValue(); const auto aa_text = ConfigurationShared::anti_aliasing_texts_map.find(aa_mode)->second; aa_status_button->setText(aa_mode == Settings::AntiAliasing::None - ? QStringLiteral(QT_TRANSLATE_NOOP("GMainWindow", "NO AA")) - : aa_text.toUpper()); + ? QStringLiteral(QT_TRANSLATE_NOOP("GMainWindow", "NO AA")) + : aa_text.toUpper()); } void GMainWindow::UpdateVolumeUI() { @@ -5142,25 +5148,22 @@ void GMainWindow::OnMouseActivity() { void GMainWindow::OnCheckFirmwareDecryption() { system->GetFileSystemController().CreateFactories(*vfs); if (!ContentManager::AreKeysPresent()) { - QMessageBox::warning( - this, tr("Derivation Components Missing"), - tr("Encryption keys are missing.")); + QMessageBox::warning(this, tr("Derivation Components Missing"), + tr("Encryption keys are missing.")); } SetFirmwareVersion(); UpdateMenuState(); } -void GMainWindow::OnCheckFirmware() -{ +void GMainWindow::OnCheckFirmware() { auto result = FirmwareManager::VerifyFirmware(*system.get()); switch (result) { - case FirmwareManager::FirmwareGood: + case FirmwareManager::FirmwareGood: break; default: - QMessageBox::warning( - this, tr("Firmware Read Error"), - tr(FirmwareManager::GetFirmwareCheckString(result))); + QMessageBox::warning(this, tr("Firmware Read Error"), + tr(FirmwareManager::GetFirmwareCheckString(result))); break; } } @@ -5197,11 +5200,11 @@ bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installe boost::container::flat_set available_title_ids; const auto RetrieveEntries = [&](FileSys::TitleType title_type, - FileSys::ContentRecordType record_type) { + FileSys::ContentRecordType record_type) { const auto entries = installed.ListEntriesFilter(title_type, record_type); for (const auto& entry : entries) { if (FileSys::GetBaseTitleID(entry.title_id) == program_id && - installed.GetEntry(entry)->GetStatus() == Loader::ResultStatus::Success) { + installed.GetEntry(entry)->GetStatus() == Loader::ResultStatus::Success) { available_title_ids.insert({entry.title_id, title_type, record_type}); } } @@ -5230,14 +5233,14 @@ bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installe list.push_back(QStringLiteral("Legal information [%1]").arg(hex_title_id)); } else { list.push_back( - QStringLiteral("DLC %1 [%2]").arg(title_id & 0x7FF).arg(hex_title_id)); + QStringLiteral("DLC %1 [%2]").arg(title_id & 0x7FF).arg(hex_title_id)); } } bool ok; const auto res = QInputDialog::getItem( - this, tr("Select RomFS Dump Target"), - tr("Please select which RomFS you would like to dump."), list, 0, false, &ok); + this, tr("Select RomFS Dump Target"), + tr("Please select which RomFS you would like to dump."), list, 0, false, &ok); if (!ok) { return false; } @@ -5253,11 +5256,11 @@ bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installe bool GMainWindow::ConfirmClose() { if (emu_thread == nullptr || - UISettings::values.confirm_before_stopping.GetValue() == ConfirmStop::Ask_Never) { + UISettings::values.confirm_before_stopping.GetValue() == ConfirmStop::Ask_Never) { return true; } if (!system->GetExitLocked() && - UISettings::values.confirm_before_stopping.GetValue() == ConfirmStop::Ask_Based_On_Game) { + UISettings::values.confirm_before_stopping.GetValue() == ConfirmStop::Ask_Based_On_Game) { return true; } const auto text = tr("Are you sure you want to close Eden?"); @@ -5341,9 +5344,9 @@ bool GMainWindow::ConfirmChangeGame() { // Use custom question to link controller navigation return question( - this, tr("Eden"), - tr("Are you sure you want to stop the emulation? Any unsaved progress will be lost."), - QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); + this, tr("Eden"), + tr("Are you sure you want to stop the emulation? Any unsaved progress will be lost."), + QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); } bool GMainWindow::ConfirmForceLockedExit() { @@ -5384,7 +5387,7 @@ static void AdjustLinkColor() { void GMainWindow::UpdateUITheme() { const QString default_theme = QString::fromUtf8( - UISettings::themes[static_cast(UISettings::default_theme)].second); + UISettings::themes[static_cast(UISettings::default_theme)].second); QString current_theme = QString::fromStdString(UISettings::values.theme); if (current_theme.isEmpty()) { @@ -5476,7 +5479,7 @@ void GMainWindow::SetDiscordEnabled([[maybe_unused]] bool state) { discord_rpc->Update(); } -#ifdef __unix__ +#ifdef __linux__ void GMainWindow::SetGamemodeEnabled(bool state) { if (emulation_running) { Common::Linux::SetGamemodeState(state); @@ -5507,16 +5510,16 @@ void GMainWindow::changeEvent(QEvent* event) { Service::AM::FrontendAppletParameters GMainWindow::ApplicationAppletParameters() { return Service::AM::FrontendAppletParameters{ .applet_id = Service::AM::AppletId::Application, - .applet_type = Service::AM::AppletType::Application, + .applet_type = Service::AM::AppletType::Application, }; } Service::AM::FrontendAppletParameters GMainWindow::LibraryAppletParameters( - u64 program_id, Service::AM::AppletId applet_id) { + u64 program_id, Service::AM::AppletId applet_id) { return Service::AM::FrontendAppletParameters{ .program_id = program_id, - .applet_id = applet_id, - .applet_type = Service::AM::AppletType::LibraryApplet, + .applet_id = applet_id, + .applet_type = Service::AM::AppletType::LibraryApplet, }; } @@ -5529,10 +5532,10 @@ void VolumeButton::wheelEvent(QWheelEvent* event) { if (num_steps > 0) { Settings::values.volume.SetValue( - std::min(200, Settings::values.volume.GetValue() + num_steps)); + std::min(200, Settings::values.volume.GetValue() + num_steps)); } else { Settings::values.volume.SetValue( - std::max(0, Settings::values.volume.GetValue() + num_steps)); + std::max(0, Settings::values.volume.GetValue() + num_steps)); } scroll_multiplier = std::min(MaxMultiplier, scroll_multiplier * 2); @@ -5584,15 +5587,15 @@ static void SetHighDPIAttributes() { if (max_ratio > real_ratio) { QApplication::setHighDpiScaleFactorRoundingPolicy( - Qt::HighDpiScaleFactorRoundingPolicy::Round); + Qt::HighDpiScaleFactorRoundingPolicy::Round); } else { QApplication::setHighDpiScaleFactorRoundingPolicy( - Qt::HighDpiScaleFactorRoundingPolicy::Floor); + Qt::HighDpiScaleFactorRoundingPolicy::Floor); } #else // Other OSes should be better than Windows at fractional scaling. QApplication::setHighDpiScaleFactorRoundingPolicy( - Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); + Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); #endif } diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp index be30c2931f..9bf88c5d9f 100644 --- a/src/yuzu_cmd/yuzu.cpp +++ b/src/yuzu_cmd/yuzu.cpp @@ -68,7 +68,7 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; } #endif -#ifdef __unix__ +#ifdef __linux__ #include "common/linux/gamemode.h" #endif @@ -410,9 +410,7 @@ int main(int argc, char** argv) { "While attempting to load the ROM requested, an error occurred. Please " "refer to the Eden wiki for more information or the Eden discord for " "additional help.\n\nError Code: {:04X}-{:04X}\nError Description: {}", - loader_id, - error_id, - static_cast(error_id)); + loader_id, error_id, static_cast(error_id)); } break; } @@ -447,7 +445,7 @@ int main(int argc, char** argv) { exit(0); }); -#ifdef __unix__ +#ifdef __linux__ Common::Linux::StartGamemode(); #endif @@ -462,7 +460,7 @@ int main(int argc, char** argv) { void(system.Pause()); system.ShutdownMainProcess(); -#ifdef __unix__ +#ifdef __linux__ Common::Linux::StopGamemode(); #endif From 758d10b998095884d5a5734a5b8770624fad998c Mon Sep 17 00:00:00 2001 From: crueter Date: Thu, 24 Jul 2025 13:59:53 -0400 Subject: [PATCH 09/22] [desktop] move About Eden below Discord Signed-off-by: crueter --- src/yuzu/main.ui | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/yuzu/main.ui b/src/yuzu/main.ui index bcc596cec2..c51aabd0e7 100644 --- a/src/yuzu/main.ui +++ b/src/yuzu/main.ui @@ -213,8 +213,8 @@ - + @@ -547,8 +547,8 @@ &Log Folder - - + + From Folder From ca2d2381dcbe7b56d047f589e81d60f7decdaf1f Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 19 Jul 2025 00:49:18 +0100 Subject: [PATCH 10/22] [dynarmic] new LRU allocation scheme --- .../src/dynarmic/backend/x64/reg_alloc.cpp | 53 ++++++++++++++----- .../src/dynarmic/backend/x64/reg_alloc.h | 4 +- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp index a0ee8ae9ed..2a30c52e01 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp @@ -415,21 +415,48 @@ void RegAlloc::ReleaseStackSpace(const size_t stack_space) noexcept { } HostLoc RegAlloc::SelectARegister(const boost::container::static_vector& desired_locations) const noexcept { - boost::container::static_vector candidates = desired_locations; //Who let someone copy an ENTIRE VECTOR here? - - // Find all locations that have not been allocated.. - const auto allocated_locs = std::partition(candidates.begin(), candidates.end(), [this](auto loc) noexcept { - return !this->LocInfo(loc).IsLocked(); - }); - candidates.erase(allocated_locs, candidates.end()); - ASSERT_MSG(!candidates.empty(), "All candidate registers have already been allocated"); - // Selects the best location out of the available locations. + // NOTE: Using last is BAD because new REX prefix for each insn using the last regs // TODO: Actually do LRU or something. Currently we just try to pick something without a value if possible. - auto const it = std::find_if(candidates.begin(), candidates.end(), [this](auto const loc) noexcept { - return this->LocInfo(loc).IsEmpty(); - }); - return it != candidates.end() ? *it : candidates.front(); + auto min_lru_counter = size_t(-1); + auto it_candidate = desired_locations.cend(); //default fallback if everything fails + auto it_rex_candidate = desired_locations.cend(); + auto it_empty_candidate = desired_locations.cend(); + for (auto it = desired_locations.cbegin(); it != desired_locations.cend(); it++) { + auto const& loc_info = LocInfo(*it); + // Abstain from using upper registers unless absolutely nescesary + if (loc_info.IsLocked()) { + // skip, not suitable for allocation + } else { + // idempotency, only assign once + if (it_empty_candidate == desired_locations.cend() && loc_info.IsEmpty()) + it_empty_candidate = it; + if (loc_info.lru_counter < min_lru_counter) { + // Otherwise a "quasi"-LRU + min_lru_counter = loc_info.lru_counter; + if (*it >= HostLoc::R8 && *it <= HostLoc::R15) { + it_rex_candidate = it; + } else { + it_candidate = it; + } + if (min_lru_counter == 0) + break; //early exit + } + } + } + // Final resolution goes as follows: + // 1 => Try normal candidate (no REX prefix) + // 2 => Try an empty candidate + // 3 => Try using a REX prefixed one + // We avoid using REX-addressable registers because they add +1 REX prefix which + // do we really need? The trade-off may not be worth it. + auto const it_final = it_candidate != desired_locations.cend() + ? it_candidate : it_empty_candidate != desired_locations.cend() + ? it_empty_candidate : it_rex_candidate; + ASSERT_MSG(it_final != desired_locations.cend(), "All candidate registers have already been allocated"); + // Evil magic - increment LRU counter (will wrap at 256) + const_cast(this)->LocInfo(*it_final).lru_counter++; + return *it_final; } void RegAlloc::DefineValueImpl(IR::Inst* def_inst, HostLoc host_loc) noexcept { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.h b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.h index 599aab12a8..64f7c1ec40 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.h @@ -92,8 +92,8 @@ private: uint8_t max_bit_width = 0; //Valid values: 1,2,4,8,16,32,128 bool is_scratch : 1 = false; //1 bool is_set_last_use : 1 = false; //1 - - alignas(16) char padding; + alignas(16) uint8_t lru_counter = 0; //1 + friend class RegAlloc; }; static_assert(sizeof(HostLocInfo) == 64); From 0a67c5a3244b6dfa725900ba564d25cb35b478fe Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 22 Jul 2025 17:36:26 +0100 Subject: [PATCH 11/22] [dynarmic] fix tests --- .../tests/A32/test_arm_instructions.cpp | 3 +- externals/dynarmic/tests/A64/a64.cpp | 250 +++++++++++++----- externals/dynarmic/tests/A64/fp_min_max.cpp | 4 +- .../dynarmic/tests/A64/fuzz_with_unicorn.cpp | 3 +- .../tests/A64/misaligned_page_table.cpp | 3 +- .../dynarmic/tests/A64/test_invalidation.cpp | 8 +- externals/dynarmic/tests/test_generator.cpp | 232 ++++++++-------- externals/dynarmic/tests/test_reader.cpp | 3 +- 8 files changed, 318 insertions(+), 188 deletions(-) diff --git a/externals/dynarmic/tests/A32/test_arm_instructions.cpp b/externals/dynarmic/tests/A32/test_arm_instructions.cpp index 3232f1a8f1..598f9d2248 100644 --- a/externals/dynarmic/tests/A32/test_arm_instructions.cpp +++ b/externals/dynarmic/tests/A32/test_arm_instructions.cpp @@ -539,7 +539,8 @@ TEST_CASE("arm: Memory access (fastmem)", "[arm][A32]") { char* backing_memory = reinterpret_cast(std::align(page_size, memory_size, buffer_ptr, buffer_size_nconst)); A32FastmemTestEnv env{backing_memory}; - Dynarmic::A32::UserConfig config{&env}; + Dynarmic::A32::UserConfig config{}; + config.callbacks = &env; config.fastmem_pointer = reinterpret_cast(backing_memory); config.recompile_on_fastmem_failure = false; config.processor_id = 0; diff --git a/externals/dynarmic/tests/A64/a64.cpp b/externals/dynarmic/tests/A64/a64.cpp index 246e61e122..801b01d555 100644 --- a/externals/dynarmic/tests/A64/a64.cpp +++ b/externals/dynarmic/tests/A64/a64.cpp @@ -15,7 +15,9 @@ using namespace oaknut::util; TEST_CASE("A64: ADD", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x8b020020); // ADD X0, X1, X2 env.code_mem.emplace_back(0x14000000); // B . @@ -36,7 +38,9 @@ TEST_CASE("A64: ADD", "[a64]") { TEST_CASE("A64: ADD{V,P}", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x0E31B801); // ADDV b1, v0.8b env.code_mem.emplace_back(0x4E31B802); // ADDV b2, v0.16b @@ -62,7 +66,9 @@ TEST_CASE("A64: ADD{V,P}", "[a64]") { TEST_CASE("A64: CLZ", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.CLZ(V3.B16(), V0.B16()); @@ -84,7 +90,9 @@ TEST_CASE("A64: CLZ", "[a64]") { TEST_CASE("A64: UADDL{V,P}", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x2E303801); // UADDLV h1, v0.8b env.code_mem.emplace_back(0x6E303802); // UADDLV h2, v0.16b @@ -110,7 +118,9 @@ TEST_CASE("A64: UADDL{V,P}", "[a64]") { TEST_CASE("A64: SADDL{V,P}", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x0E303801); // SADDLV h1, v0.8b env.code_mem.emplace_back(0x4E303802); // SADDLV h2, v0.16b @@ -136,7 +146,9 @@ TEST_CASE("A64: SADDL{V,P}", "[a64]") { TEST_CASE("A64: VQADD", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x6e210c02); // UQADD v2.16b, v0.16b, v1.16b env.code_mem.emplace_back(0x4e210c03); // SQADD v3.16b, v0.16b, v1.16b @@ -167,7 +179,9 @@ TEST_CASE("A64: VQADD", "[a64]") { TEST_CASE("A64: VQSUB", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x6e212c02); // UQSUB v2.16b, v0.16b, v1.16b env.code_mem.emplace_back(0x4e212c03); // SQSUB v3.16b, v0.16b, v1.16b @@ -198,7 +212,9 @@ TEST_CASE("A64: VQSUB", "[a64]") { TEST_CASE("A64: REV", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0xdac00c00); // REV X0, X0 env.code_mem.emplace_back(0x5ac00821); // REV W1, W1 @@ -218,7 +234,9 @@ TEST_CASE("A64: REV", "[a64]") { TEST_CASE("A64: REV32", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0xdac00800); // REV32 X0, X0 env.code_mem.emplace_back(0x14000000); // B . @@ -234,7 +252,9 @@ TEST_CASE("A64: REV32", "[a64]") { TEST_CASE("A64: REV16", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0xdac00400); // REV16 X0, X0 env.code_mem.emplace_back(0x5ac00421); // REV16 W1, W1 @@ -254,7 +274,9 @@ TEST_CASE("A64: REV16", "[a64]") { TEST_CASE("A64: SSHL", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SSHL(V4.B16(), V4.B16(), V0.B16()); @@ -288,7 +310,9 @@ TEST_CASE("A64: SSHL", "[a64]") { TEST_CASE("A64: USHL", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.USHL(V4.B16(), V4.B16(), V0.B16()); @@ -334,7 +358,9 @@ TEST_CASE("A64: USHL", "[a64]") { TEST_CASE("A64: URSHL", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.URSHL(V0.S4(), V1.S4(), V2.S4()); @@ -365,7 +391,9 @@ TEST_CASE("A64: URSHL", "[a64]") { TEST_CASE("A64: XTN", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x0e212803); // XTN v3.8b, v0.8h env.code_mem.emplace_back(0x0e612824); // XTN v4.4h, v1.4s @@ -387,7 +415,9 @@ TEST_CASE("A64: XTN", "[a64]") { TEST_CASE("A64: TBL", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x0e000100); // TBL v0.8b, { v8.16b }, v0.8b env.code_mem.emplace_back(0x4e010101); // TBL v1.16b, { v8.16b }, v1.16b @@ -433,7 +463,9 @@ TEST_CASE("A64: TBL", "[a64]") { TEST_CASE("A64: TBX", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x0e001100); // TBX v0.8b, { v8.16b }, v0.8b env.code_mem.emplace_back(0x4e011101); // TBX v1.16b, { v8.16b }, v1.16b @@ -479,7 +511,9 @@ TEST_CASE("A64: TBX", "[a64]") { TEST_CASE("A64: AND", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x8a020020); // AND X0, X1, X2 env.code_mem.emplace_back(0x14000000); // B . @@ -500,7 +534,9 @@ TEST_CASE("A64: AND", "[a64]") { TEST_CASE("A64: Bitmasks", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x3200c3e0); // ORR W0, WZR, #0x01010101 env.code_mem.emplace_back(0x320c8fe1); // ORR W1, WZR, #0x00F000F0 @@ -520,7 +556,9 @@ TEST_CASE("A64: Bitmasks", "[a64]") { TEST_CASE("A64: ANDS NZCV", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x6a020020); // ANDS W0, W1, W2 env.code_mem.emplace_back(0x14000000); // B . @@ -575,7 +613,9 @@ TEST_CASE("A64: ANDS NZCV", "[a64]") { TEST_CASE("A64: CBZ", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x34000060); // 0x00 : CBZ X0, label env.code_mem.emplace_back(0x320003e2); // 0x04 : MOV X2, 1 @@ -608,7 +648,9 @@ TEST_CASE("A64: CBZ", "[a64]") { TEST_CASE("A64: TBZ", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x36180060); // 0x00 : TBZ X0, 3, label env.code_mem.emplace_back(0x320003e2); // 0x04 : MOV X2, 1 @@ -652,7 +694,9 @@ TEST_CASE("A64: TBZ", "[a64]") { TEST_CASE("A64: FABD", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x6eb5d556); // FABD.4S V22, V10, V21 env.code_mem.emplace_back(0x14000000); // B . @@ -669,7 +713,9 @@ TEST_CASE("A64: FABD", "[a64]") { TEST_CASE("A64: FABS", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4ef8f804); // FABS v4.8h, v0.8h env.code_mem.emplace_back(0x4ea0f825); // FABS v5.4s, v1.4s @@ -691,7 +737,9 @@ TEST_CASE("A64: FABS", "[a64]") { TEST_CASE("A64: FMIN (example)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4ea1f400); // FMIN.4S V0, V0, V1 env.code_mem.emplace_back(0x4ee3f442); // FMIN.2D V2, V2, V3 @@ -713,7 +761,9 @@ TEST_CASE("A64: FMIN (example)", "[a64]") { TEST_CASE("A64: FMAX (example)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4e21f400); // FMAX.4S V0, V0, V1 env.code_mem.emplace_back(0x4e63f442); // FMAX.2D V2, V2, V3 @@ -735,7 +785,9 @@ TEST_CASE("A64: FMAX (example)", "[a64]") { TEST_CASE("A64: FMINNM (example)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4ea1c400); // FMINNM.4S V0, V0, V1 env.code_mem.emplace_back(0x4ee3c442); // FMINNM.2D V2, V2, V3 @@ -757,7 +809,9 @@ TEST_CASE("A64: FMINNM (example)", "[a64]") { TEST_CASE("A64: FMAXNM (example)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4e21c400); // FMAXNM.4S V0, V0, V1 env.code_mem.emplace_back(0x4e63c442); // FMAXNM.2D V2, V2, V3 @@ -779,7 +833,9 @@ TEST_CASE("A64: FMAXNM (example)", "[a64]") { TEST_CASE("A64: FMAXNM (example 2)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4e3bc6fd); // FMAXNM.4S V29, V23, V27 env.code_mem.emplace_back(0x14000000); // B . @@ -831,7 +887,9 @@ TEST_CASE("A64: 128-bit exclusive read/write", "[a64]") { TEST_CASE("A64: CNTPCT_EL0", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0xd53be021); // MRS X1, CNTPCT_EL0 env.code_mem.emplace_back(0xd503201f); // NOP @@ -852,7 +910,9 @@ TEST_CASE("A64: CNTPCT_EL0", "[a64]") { TEST_CASE("A64: FNMSUB 1", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x1f618a9c); // FNMSUB D28, D20, D1, D2 env.code_mem.emplace_back(0x14000000); // B . @@ -870,7 +930,9 @@ TEST_CASE("A64: FNMSUB 1", "[a64]") { TEST_CASE("A64: FNMSUB 2", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x1f2ab88e); // FNMSUB S14, S4, S10, S14 env.code_mem.emplace_back(0x14000000); // B . @@ -889,7 +951,9 @@ TEST_CASE("A64: FNMSUB 2", "[a64]") { TEST_CASE("A64: FMADD", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x1f5e0e4a); // FMADD D10, D18, D30, D3 env.code_mem.emplace_back(0x14000000); // B . @@ -908,7 +972,9 @@ TEST_CASE("A64: FMADD", "[a64]") { TEST_CASE("A64: FMLA.4S(lane)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4f8f11c0); // FMLA.4S V0, V14, V15[0] env.code_mem.emplace_back(0x4faf11c1); // FMLA.4S V1, V14, V15[1] @@ -936,7 +1002,9 @@ TEST_CASE("A64: FMLA.4S(lane)", "[a64]") { TEST_CASE("A64: FMUL.4S(lane)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4f8f91c0); // FMUL.4S V0, V14, V15[0] env.code_mem.emplace_back(0x4faf91c1); // FMUL.4S V1, V14, V15[1] @@ -959,7 +1027,9 @@ TEST_CASE("A64: FMUL.4S(lane)", "[a64]") { TEST_CASE("A64: FMLA.4S (denormal)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4e2fcccc); // FMLA.4S V12, V6, V15 env.code_mem.emplace_back(0x14000000); // B . @@ -978,7 +1048,9 @@ TEST_CASE("A64: FMLA.4S (denormal)", "[a64]") { TEST_CASE("A64: FMLA.4S (0x80800000)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4e38cc2b); // FMLA.4S V11, V1, V24 env.code_mem.emplace_back(0x14000000); // B . @@ -1000,7 +1072,9 @@ TEST_CASE("A64: FMLA.4S (0x80800000)", "[a64]") { // x64 performs rounding before flushing-to-zero. TEST_CASE("A64: FMADD (0x80800000)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x1f0f7319); // FMADD S25, S24, S15, S28 env.code_mem.emplace_back(0x14000000); // B . @@ -1019,7 +1093,9 @@ TEST_CASE("A64: FMADD (0x80800000)", "[a64]") { TEST_CASE("A64: FNEG failed to zero upper", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x2ea0fb50); // FNEG.2S V16, V26 env.code_mem.emplace_back(0x2e207a1c); // SQNEG.8B V28, V16 @@ -1038,7 +1114,9 @@ TEST_CASE("A64: FNEG failed to zero upper", "[a64]") { TEST_CASE("A64: FRSQRTS", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x5eb8fcad); // FRSQRTS S13, S5, S24 env.code_mem.emplace_back(0x14000000); // B . @@ -1060,7 +1138,9 @@ TEST_CASE("A64: FRSQRTS", "[a64]") { TEST_CASE("A64: SQDMULH.8H (saturate)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4e62b420); // SQDMULH.8H V0, V1, V2 env.code_mem.emplace_back(0x14000000); // B . @@ -1081,7 +1161,9 @@ TEST_CASE("A64: SQDMULH.8H (saturate)", "[a64]") { TEST_CASE("A64: SQDMULH.4S (saturate)", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x4ea2b420); // SQDMULH.4S V0, V1, V2 env.code_mem.emplace_back(0x14000000); // B . @@ -1102,7 +1184,8 @@ TEST_CASE("A64: SQDMULH.4S (saturate)", "[a64]") { TEST_CASE("A64: This is an infinite loop if fast dispatch is enabled", "[a64]") { A64TestEnv env; - A64::UserConfig conf{&env}; + A64::UserConfig conf{}; + conf.callbacks = &env; conf.optimizations &= ~OptimizationFlag::FastDispatch; A64::Jit jit{conf}; @@ -1119,7 +1202,9 @@ TEST_CASE("A64: This is an infinite loop if fast dispatch is enabled", "[a64]") TEST_CASE("A64: EXTR", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x93d8fef7); // EXTR X23, X23, X24, #63 env.code_mem.emplace_back(0x14000000); // B . @@ -1136,7 +1221,9 @@ TEST_CASE("A64: EXTR", "[a64]") { TEST_CASE("A64: Isolated GetNZCVFromOp", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0xaa1f03f5); // MOV X21, XZR env.code_mem.emplace_back(0x912a02da); // ADD X26, X22, #0xa80 @@ -1167,7 +1254,9 @@ TEST_CASE("A64: Isolated GetNZCVFromOp", "[a64]") { TEST_CASE("A64: Optimization failure when folding ADD", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0xbc4f84be); // LDR S30, [X5], #248 env.code_mem.emplace_back(0x9a0c00ea); // ADC X10, X7, X12 @@ -1263,7 +1352,8 @@ TEST_CASE("A64: Cache Maintenance Instructions", "[a64]") { }; CacheMaintenanceTestEnv env; - A64::UserConfig conf{&env}; + A64::UserConfig conf{}; + conf.callbacks = &env; conf.hook_data_cache_operations = true; A64::Jit jit{conf}; @@ -1290,7 +1380,8 @@ TEST_CASE("A64: Memory access (fastmem)", "[a64]") { char* backing_memory = reinterpret_cast(std::align(page_size, memory_size, buffer_ptr, buffer_size_nconst)); A64FastmemTestEnv env{backing_memory}; - Dynarmic::A64::UserConfig config{&env}; + Dynarmic::A64::UserConfig config{}; + config.callbacks = &env; config.fastmem_pointer = reinterpret_cast(backing_memory); config.fastmem_address_space_bits = address_width; config.recompile_on_fastmem_failure = false; @@ -1323,7 +1414,9 @@ TEST_CASE("A64: Memory access (fastmem)", "[a64]") { TEST_CASE("A64: SQRDMULH QC flag when output invalidated", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x0fbcd38b); // SQRDMULH.2S V11, V28, V28[1] env.code_mem.emplace_back(0x7ef0f8eb); // FMINP.2D D11, V7 @@ -1343,7 +1436,9 @@ TEST_CASE("A64: SQRDMULH QC flag when output invalidated", "[a64]") { TEST_CASE("A64: SDIV maximally", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(0x9ac00c22); // SDIV X2, X1, X0 env.code_mem.emplace_back(0x14000000); // B . @@ -1367,7 +1462,9 @@ TEST_CASE("A64: SDIV maximally", "[a64]") { // const HostLocList any_xmm = { HostLoc::XMM1, HostLoc::XMM2, HostLoc::XMM3, HostLoc::XMM4, HostLoc::XMM5, HostLoc::XMM6 }; TEST_CASE("A64: rand1", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem = {0x2ea2e69a, 0x6f7168e7, 0x7eb0f816, 0x6ebd369d, 0x1e65c302, 0x1e63011c, 0x1e67c349, 0x0f861bd6, 0x9e59cbbc, 0x5e61cb8b, 0x6e218b01, 0x4eb2409f, 0x7f7c2452, 0x7e207a8d, 0xd503369f}; env.code_mem.emplace_back(0x14000000); // B . @@ -1480,7 +1577,10 @@ TEST_CASE("A64: rand1", "[a64]") { TEST_CASE("A64: rand2", "[a64][.]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{.callbacks = &env, .fastmem_pointer = 0xffffffff00000000}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + jit_user_config.fastmem_pointer = 0xffffffff00000000; + A64::Jit jit{jit_user_config}; env.code_mem = {0xea80f352, 0x6e65e59d, 0x1e20c343, 0x2e3a7192, 0x2e267249, 0xd500405f, 0x6f01f461, 0x6eb684fc, 0x58028edd, 0x0ea5f5b6, 0x0ea069fb, 0x2e769517, 0x5e066063, 0x1e65c3f5, 0x4f00ff52, 0x93401cf6, 0x1e274248, 0x6f67aaf5, 0x5e0c0782, 0x5ef43f3c, 0x2e6595b7, 0x4e20590f, 0xb35aa451, 0x6ee2c5ed, 0x4e32bf46, 0x2ea1ba8f, 0x2f68a85e, 0x9237d90a, 0x5e23dd10, 0x0e762e32, 0x4e31a8cf, 0xce1f3360, 0x781a4ac0, 0x13834066, 0x5fa8101c, 0x6f7c5594, 0x0e71bb68, 0xbc0b3e8f, 0x785dbbda, 0x6f51e794, 0xce50af75, 0x1ad728ec, 0x6ee0da4c, 0xb84efa14, 0x2eb3f613, 0x4e287ade, 0x4eb8c734, 0x2e83f4e8, 0x0e397c80, 0xd08f93f8, 0xce718e48, 0x0f672a0d, 0x2e9edd40, 0x0e14128b, 0x6f5942e6, 0x8b3a0f03, 0x3c5d16b9, 0x7f7e3743, 0x4f4c54e4, 0x0ea0a9e9, 0x9e59dbe6, 0x6e7ddcd3, 0xcec08377, 0x9ba759f8, 0x2ea5046e, 0x0e24c569, 0xb8979780, 0x4e31b98c, 0x4efe4f46, 0x4ea7c762, 0x7e61c9c6, 0x6e30c880, 0x1ada0c25, 0x4e603a2f, 0xda9d7218, 0x0d40c5d9, 0x5e214b05, 0x9ba9efc5, 0x5e61b81e, 0x6e7bc31c, 0x0e61a163, 0x9e5832d2, 0x4e772248, 0x4e3d17c8, 0x92624f60, 0x7a1a02dc, 0x79891f65, 0x6eb45036, 0x0e321ee8, 0x4e2566f0, 0x4ea02b9b, 0x0f9dcb3d, 0x2e21b9f9, 0x0e21a8c3, 0xda1700bd, 0x6ea0fb38, 0x7e607a0b, 0x72845817, 0x7f61068e, 0x0d60e529, 0x4ea0ca5c, 0x1a94b20f, 0x8b87419d, 0x7ea9ed71, 0x2ea1a86e, 0x4d40c4da, 0x5ea0eada, 0x784ba96e, 0x7eb6ee02, 0x3db1c710, 0x0e217836, 0x7ee0bb96, 0x4e786c08, 0x4e976a08, 0x489ffe86, 0x4e79fc9b, 0x0e21cbce, 0x5ef7fc65, 0x4ea1286d, 0xd29c771e, 0x6f5c2839, 0x0ea00a9d, 0x6ee44c06, 0x5ee1d858, 0x5ef2fda6, 0x7eb0c9fe, 0x7f762791, 0x2e212ae6, 0x4e61c9db, 0x13003c57, 0x5ee1b8f8, 0x0f2396d2, 0x6ea0db1e, 0x0e71ba82, 0xab29c807, 0x6ef8f8b3, 0x1f18d4a1, 0x0e261d15, 0x1e290081, 0x1b0c7d12, 0x4e7771c3, 0xf845f1e4, 0x4d40c9e8, 0xce778452, 0x6eb9879d, 0x6e21c93d, 0xcec0829f, 0x52a0969f, 0x1e772b4f, 0x7ee1da88, 0x5f52fe0a, 0x7f3387b1, 0x5e214850, 0x1e65c025, 0x0e2ca294, 0x2e614829, 0x1e640077, 0x9e240048, 0x4ebe9537, 0x9bb7925e, 0x38b669c5, 0x2840d089, 0x6f43e648, 0x2e662d28, 0x4eabaff3, 0x6e734cc7, 0x0e31baee, 0x7ee0d93c, 0x5e282bde, 0x7e21bba4, 0x4e6c75fa, 0x5ac01217, 0x7f4304af, 0x1e7878ed, 0x1ada2196, 0x7ee1aba3, 0x93407f3c, 0x4f6c34eb, 0x6e3447a9, 0x7e7ae545, 0x5e0802bb, 0x6eeae63a, 0x7ee1da62, 0x5e280bb3, 0xf81d4009, 0x1e603b21, 0x5e281a14, 0x6eb0a99b, 0x1e266a25, 0x0d60cafe, 0x0e0b6194, 0x7a4ed2c5, 0x92b762ec, 0x4e6b5749, 0x3c16a6e5, 0x4ea0a92b, 0x0fa58b6a, 0x5f76148c, 0x6e30c95f, 0x1e6540fd, 0x5e28e40f, 0x0d403fd4, 0x7e30da36, 0x7fda9b51, 0x2ea04bde, 0x1e25c3d2, 0x1ee0434c, 0x5e21d8e7, 0x5ee1ba51, 0x5e61aba9, 0x4e2849fb, 0x5ee098ea, 0x4e60f63d, 0x0f280443, 0x5ee0da27, 0x2e78a6ce, 0x78054afc, 0x4e14286b, 0x4e218bd8, 0x2a3d2551, 0x3a04017a, 0x5f4317cd, 0x0e604a37, 0x9a834614, 0x0e2edf4d, 0x7a51a0a0, 0x5f8e9043, 0x6ea06bb2, 0xaa2857dd, 0x7a1903fc, 0x301ba9ba, 0x9ac929cd, 0x4e061ff0, 0x2e38fcfc, 0x0e2f614a, 0x7ee0d8e4, 0x6e73afda, 0x7f4156f7, 0x0e6078bf, 0x4ee1d9ed, 0x93403fbe, 0xce6f8640, 0x4e3855e3, 0x6f76fe23, 0x112466e8, 0x1e358a90, 0x7f45272c, 0x6ea19a9d, 0x8a696350, 0x1e3900f6, 0x5e61c866, 0x0e3fbfd0, 0x5ee09ad0, 0x0e651d27, 0x4dffc35e, 0x2e20c6ce, 0x0fbe118d, 0x1e656a15, 0xd1357365, 0x0e20a847, 0xce4a835c, 0x4e203905, 0x2e60090d, 0x7f4a27bb, 0x1e64c316, 0xce7d86a4, 0x7ebded2d, 0x6e70a97e, 0x4eb9a42b, 0x0e209bef, 0x6f151730, 0x0e7e30f7, 0x4e724509, 0xd503375f, 0xce58b6ae, 0x5e21a9b8, 0xcb2ca538, 0x5ac01131, 0x6ea19a24, 0xeb40c8b3, 0xc8df7d65, 0x78108341, 0x3218ab9b, 0x0f3da7dd, 0x2e003089, 0x4e21cab5, 0x8aa5c924, 0x1a94950c, 0x123e506f, 0x13117e37, 0x1ee6005b, 0x5ac00647, 0x5eec8cd5, 0x7ef0fb3d, 0x9223272a, 0x5ee0cb02, 0x6e66071d, 0x6ea1dbbf, 0x5e61c903, 0x5ac015ea, 0x93db6206, 0x7e62b5e3, 0x6ea0c87b, 0xdac0090e, 0x48df7d90, 0x6e206ba5, 0x9e2503c2, 0x6e25fc89, 0x4d60e2db, 0x1e3e22a0, 0x2eb81c19, 0x7856ea00, 0x5fbfb22d, 0x1e630244, 0x4e202a83, 0x1f50a722, 0x7f7b55d2, 0x0fae89b9, 0x4e781d73, 0xce738c3a, 0x4f15a591, 0x6e21c7e1, 0x586ff77e, 0x8a5d3592, 0x93401c67, 0x5e61cb86, 0xce6bc2c1, 0x6e393f10, 0x9bb70ec3, 0xdac0098c, 0x4da84b95, 0x7f494476, 0x9ace5c11, 0x7e61ca14, 0x4f7a60ef, 0x1ad32b39, 0x0ea3777f, 0x5e61da7f, 0x4f1404e2, 0x4e3244e2, 0x6e1b1ceb, 0x0dee5aac, 0x4e2f9dc4, 0x5ea1b8c3, 0x1e59f863, 0xd500403f, 0x4e3ae7d0, 0x4ef5c6ea, 0x08dffe3b, 0x6e36f4f6, 0x2e764f29, 0x0e726f23, 0x5f42375b, 0x7f71fc40, 0x6e618aad, 0x93403e5b, 0x0e205976, 0x0e7250c4, 0x6eb0abc9, 0x2e2049f0, 0x5f14754d, 0x7f6ce468, 0x6f950bbe, 0x6e31aa47, 0x4eb83396, 0x0dccc952, 0x2ea1ca90, 0xce69c701, 0xb0bed69e, 0x7c5dec39, 0x4e2868a2, 0x0e591b08, 0x5f34e6dd, 0x3a449184, 0x5e3ce6de, 0x4ea149b7, 0x4e7ad29b, 0xba198503, 0x1f683e8f, 0xfa52f2a7, 0x6e30dffc, 0x4e6c3d17, 0x2eae3248, 0xd503349f, 0x1e60002c, 0x0f180680, 0x9e240049, 0x6f75774e, 0xa90d8678, 0x9ad924c4, 0x7eb0f85b, 0x0e205aaf, 0x7ee08899, 0x5f4bffd8, 0x1b0ff5f3, 0x4ee11dcd, 0x2e218948, 0x0dcb2733, 0x4eac107c, 0x4ea04a53, 0x4e287b44, 0x0e60b82a, 0x5ee0ebbc, 0xce454ff1, 0x5e1761e7, 0x5e09202f, 0x0e0c0754, 0x1e72e6b9, 0x7e21da70, 0x0fbdb20c, 0x5efb8c84, 0xd500401f, 0x3a47526e, 0x1e680acf, 0x7f7375fc, 0xf80522da, 0x4ee60c02, 0x4d40c2e7, 0x6f89096b, 0x7ee1bb6e, 0x5e280b4a, 0x1e3120c8, 0x7eb2ef96, 0x4fd012dd, 0x0f3027ef, 0x4e2078a8, 0xd503201f, 0x2e2312d9, 0x6ebf1c6e, 0x5ee1f8df, 0x4e607a46, 0x6e30c877, 0x6c09d2d1, 0x4e61abd8, 0x0e35267e, 0x6ac17728, 0x0e861aa0, 0x6f63fe26, 0x6f157628, 0x6f30a5f9, 0x4d60cc0c, 0x4e21cb59, 0x2e68a3fb, 0x7efae601, 0x6ea0f82c, 0x9b25ec12, 0x1a1a0305, 0x0e043fe1, 0x6e73c0ed, 0x6ea1b8c0, 0x7e20380b, 0x0f0534e8, 0x1f56bc7d, 0xba0c0128, 0x1e672160, 0x6e7b259b, 0x7ee07b5d, 0x9a820443, 0x4e040581, 0x2f1d87e8, 0x1acd2f5b, 0x6e20794f, 0x2e6a3c93, 0xc8dffe13, 0xce5ab1c6, 0x6eea55f6, 0x4ea039b3, 0x0d602fec, 0x2e246e2f, 0x7857be39, 0xb80608fb, 0x1e67c017, 0x9bcf7f63, 0x0f92d857, 0x5e0812f7, 0x1e210172, 0x7e6128e9, 0x7ea94d41, 0x981179e1, 0x1effb018, 0x2e600828, 0x0eb9c6b2, 0x6ee1baae, 0x4ea0db28, 0x2ea1487b, 0x4ea6c7f0, 0x2e2374c7, 0x7e30d8dd, 0xb9991fa7, 0x4e791e3e, 0x889f7c4b, 0x0e6c753c, 0x1e740ad1, 0x1e244324, 0x1ef33010, 0x5ac01102, 0x9bd97fba, 0x6e290143, 0x1e2220d8, 0x4d8d5aee, 0x6f28570b, 0xfa4ab0c1, 0xdac00b14, 0x7ea1a90e, 0x2e3027d8, 0x6f25a733, 0x4e61a96e, 0x4e1a2fcb, 0x0e22fe0a, 0xc8df7cd0, 0x5e280a55, 0x4e012b20, 0x7e70dbf4, 0x520c5a4e, 0x6ea6c57f, 0x0e861af8, 0xd503233f, 0x889ffe3c, 0x5e274ea9, 0x4e21a89a, 0x0e170c02, 0x6efd4c0b, 0xd5033ebf, 0x6e61a92c, 0x2e205b72, 0x789fb828, 0x0e626e94, 0x2ea6724c, 0x9a10028b, 0x2c6c51fc, 0x5a9de6b9, 0x6e6881f3, 0x5ee0ea6b, 0x0faec36e, 0x0e955bca, 0x1acf206d, 0x7f6f571b, 0x4e286930, 0x12b41ceb, 0x1e770b7a, 0x0ea18ac2, 0x5e282aaf, 0xf2b7fa1e, 0x1ac34311, 0x13167d11, 0x4ea63412, 0x6e758038, 0x2f1d85d6, 0x0f275480, 0x0ead6c71, 0x6e204b69, 0x1e6303f4, 0x5e0031ef, 0x13001e40, 0x7a16006f, 0x6e6ae4c0, 0x0f0f242f, 0x6e674f50, 0x4e606b7a, 0x7e6ee684, 0x1e6b5957, 0x7ea1bbab, 0x7ea0b6cb, 0xce4da241, 0x0ea1b953, 0x0eb2af4b, 0x9ac309d0, 0x6e61d8bd, 0x5ea0d890, 0x5f47d1e7, 0xfa5981ca, 0x1e7f7959, 0x6ef24dd8, 0x0e0a41d1, 0x5ee0e898, 0x4e6038e2, 0x13097d65, 0x6f839088, 0x9e290265, 0x0e208824, 0x2e65af79, 0x6f36a561, 0x9ad3204b, 0x0e21482e, 0x1e24431d, 0xd50330bf, 0x0df641aa, 0x6e602a83, 0xce30505f, 0x5e025238, 0xd503201f, 0x4e608880, 0x4de9c38d, 0x5e0f5348, 0x6eb48ca9, 0x50fda31b, 0x2e251eec, 0x7842ba50, 0xd8a1cd86, 0x2ea09862, 0x0ea09983, 0x2ea333b0, 0x0ea6032c, 0x4f94801b, 0x7e3ee57d, 0x38135e4f, 0xd8fdd9dd, 0x5ee0fcde, 0x9e64033d, 0x6e37f547, 0x6e3dd7ef, 0x13003f3d, 0x0e602f9f, 0x4e7ad014, 0x9b3b6857, 0x5ea0cb67, 0x0eb31c9f, 0x4e7c5372, 0x5e61b8c0, 0x0ea19b23, 0x0ee6e1df, 0x6e63a626, 0x2f139405, 0x7eb0f96d, 0x9e588c63, 0x2e714c3a, 0x6e8c941e, 0x0f61b331, 0x6f01f625, 0x4e78d4ea, 0x6f403709, 0x1a0300da, 0xda0102c8, 0x7e61d9fd, 0xb89469bb, 0x0c838780, 0x2e60a590, 0x4dfd29e1, 0x4e150f2e, 0xce2810bc, 0x5f541591, 0x9ee60259, 0x2eb40e56, 0x5e014027, 0x2ef71faf, 0x4e2d452f, 0x5ee0a813, 0x4eb03301, 0x38443acf, 0x6eabd502, 0x0e2ee71e, 0x5a960364, 0xce7ec596, 0x7efbed09, 0x4ef42ea2, 0x0eb30ea5, 0x5ee0d9f8, 0x6f513552, 0xf89eb3fa, 0x7ea2eca6, 0x9b00cc19, 0xf897409e, 0x1e73485f, 0x381afa77, 0x0f169f3b, 0x5ee1aa70, 0x5e1803ee, 0x0dbf5a4c, 0xce78c7a6, 0x9b0b260c, 0x2ef8fa19, 0x6e70aa4b, 0xce45b805, 0x2ea08e86, 0x4ee0bafd, 0x2ea09a1f, 0x4e218900, 0x6e744f13, 0xce518653, 0xf81b7a68, 0xce45ac5e, 0x7e62e416, 0x1a1b02b6, 0x7e21db48, 0x381daaaf, 0x6b2c0987, 0x0e2ec651, 0x4eae8502, 0x9bde7ca0, 0x6f47201f, 0x7e61a8a3, 0x6e60d5db, 0x4e2879de, 0xf81d194e, 0x4f1b8d05, 0x4d0048b2, 0x6e203be9, 0x4e3e7eb1, 0x0e260ef8, 0x2e688518, 0x7e3fec46, 0xdac00843, 0xf85c8917, 0x2e212a0f, 0x0e8196da, 0xd503359f, 0xce4c81f2, 0x6ee19992, 0x6e21ca79, 0x4d40c1d2, 0x4f5816ef, 0x4e34c3ea, 0x4df7c283, 0x7ef7eeb6, 0x18e276ce, 0xab0d21c0, 0xd5032f7f, 0x4ea00dbf, 0x5ac01251, 0xd0121955, 0x7f1495e4, 0x7ef0fa11, 0x5e24dd9c, 0x9add25b5, 0x0eb2bdef, 0x9e1977c7, 0x6f4b26bd, 0x0e200a9c, 0x9b4f7c00, 0x0ea0392e, 0x7e212a2c, 0x0b248b90, 0x1acc27a1, 0x2e701c90, 0x5ee1b870, 0x5e280aba, 0x5ea0780e, 0x1e264246, 0x4e052d04, 0x0e731dc4, 0xce461997, 0x9a9e9413, 0x3d462048, 0x5ea1fac5, 0x2ea0c8c4, 0x9a030280, 0x2ebda4b8, 0x5eef8614, 0x6eadc4e0, 0xbd035a8f, 0x4e606b84, 0x4eb1aba1, 0x4e286928, 0x4e2858cc, 0x9add0ce9, 0x4e070d65, 0x5fd399d5, 0x0f03fde7, 0x6ee90c74, 0x4ef8e31e, 0x381d986a, 0x5ea0ebf4, 0x5ea0d87e, 0x2e76ac9e, 0x6eb36cd4, 0x2e6e1c4c, 0x2e2feebc, 0x1ace4b03, 0x5ee0db12, 0x5ea0e9b1, 0x2e1c32d5, 0x5fa49a09, 0x0e258737, 0x7e21ca8e, 0xce4f9988, 0x5f7f56a6, 0x0e739766, 0x4e28586c, 0x6e619908, 0xd500401f, 0xf88b9252, 0x6e251c8e, 0x9e20015b, 0x7f1486b9, 0x717c339b, 0x1f31ff70, 0x4ea0eb62, 0x9acb0926, 0x489f7d85, 0x4e209b54, 0x2e84cf03, 0x2e65946c, 0x0e7d80cd, 0xc8dffecc, 0xce668bd8, 0x6e2188af, 0xeb4ada34, 0x2b25ec33, 0x0d40e6e7, 0x4eb2c757, 0x4ec82ad0, 0x7e21cb0a, 0x0e21a847, 0x4e0b1ec0, 0x381e6ac0, 0x6e61c8f5, 0x0f10071c, 0x2ee21daa, 0x5e61ab31, 0x6e218892, 0x2e7e7cb5, 0x6f2826aa, 0x7f6b54df, 0x4eaa2620, 0xdac00034, 0x4f6477be, 0x7e6148ea, 0x4eef1f57, 0x78459aeb, 0x2ebc3f10, 0x2e35f4eb, 0x4fbf19ce, 0xd8d0e58e, 0x2e21bbc7, 0x6ee0cab6, 0x9bc57e3f, 0x2f854037, 0x4e92181c, 0x6e6d1f89, 0x0f305545, 0x4ee19a57, 0x0e887bdf, 0x5e1a4185, 0x7ef0c821, 0x2eb6607c, 0x2ea0d9b8, 0x9e0380f4, 0x2ebf1c83, 0x1e62597d, 0x7f6e2548, 0x5ac00205, 0x4e616adb, 0xce638b8c, 0x5e1653cf, 0x2e6069be, 0x0e2ac641, 0x1e33c76f, 0xce44956d, 0x9bb90d31, 0x1e24c20a, 0x7ee038c1, 0x93407e5e, 0x4e280127, 0xc8df7f7d, 0xba42f263, 0x1e6f199c, 0x6e212889, 0x6e92f60e, 0x6ebdc499, 0x8b9acbf8, 0x4d40c581, 0x3a020250, 0x6e6a6716, 0x9248403b, 0x9081ffea, 0x4e603856, 0x9ad1242b, 0x6f270579, 0x1a070349, 0xcec08133, 0xd503305f, 0x5a1a00ca, 0x2e60b8a2, 0x0e5f28fd, 0x0e31a3da, 0x7e61cbc1, 0xd503399f, 0x5f5e54aa, 0x0eb8bdea, 0x4eba8f10, 0x4e2a2e60, 0x2f3da7d6, 0x1e58e297, 0x6e71aa3e, 0x6b86701a, 0xce4fa5e6, 0x4ee7c463, 0x8a79307f, 0x0ebea541, 0x2e218af4, 0x4e774f8a, 0xb9b95dc5, 0x6e61abd5, 0x4dd1e814, 0x4da72098, 0x98307582, 0x3a512101, 0x7ef95497, 0x1ace5535, 0x5a0c0349, 0x4e28581b, 0x6ebf1c02, 0x5ea1da23, 0x1e274314, 0x5e25dd29, 0x6e75f594, 0x6eaf6ed5, 0x4e214abe, 0x4e064172, 0x2e21c8f4, 0xf84c5b08, 0x1e244312, 0x14000000}; env.code_mem.emplace_back(0x14000000); // B . @@ -1596,7 +1696,9 @@ TEST_CASE("A64: rand2", "[a64][.]") { TEST_CASE("A64: SABD", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SABD(V0.B16(), V3.B16(), V4.B16()); @@ -1654,7 +1756,9 @@ TEST_CASE("A64: SABD", "[a64]") { TEST_CASE("A64: UZP{1,2}.2D", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.UZP1(V2.D2(), V0.D2(), V1.D2()); @@ -1673,7 +1777,9 @@ TEST_CASE("A64: UZP{1,2}.2D", "[a64]") { TEST_CASE("A64: UZP{1,2}.S", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.UZP1(V2.S2(), V0.S2(), V1.S2()); @@ -1696,7 +1802,9 @@ TEST_CASE("A64: UZP{1,2}.S", "[a64]") { TEST_CASE("A64: UZP{1,2}.H", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.UZP1(V2.H4(), V0.H4(), V1.H4()); @@ -1719,7 +1827,9 @@ TEST_CASE("A64: UZP{1,2}.H", "[a64]") { TEST_CASE("A64: UZP{1,2}.B", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.UZP1(V2.B8(), V0.B8(), V1.B8()); @@ -1742,7 +1852,9 @@ TEST_CASE("A64: UZP{1,2}.B", "[a64]") { TEST_CASE("A64: {S,U}MIN.S, {S,U}MAX.S", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SMIN(V2.S4(), V0.S4(), V1.S4()); @@ -1786,7 +1898,9 @@ TEST_CASE("A64: {S,U}MIN.S, {S,U}MAX.S", "[a64]") { TEST_CASE("A64: {S,U}MIN.H, {S,U}MAX.H", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SMIN(V2.H8(), V0.H8(), V1.H8()); @@ -1830,7 +1944,9 @@ TEST_CASE("A64: {S,U}MIN.H, {S,U}MAX.H", "[a64]") { TEST_CASE("A64: {S,U}MIN.B, {S,U}MAX.B", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SMIN(V2.B16(), V0.B16(), V1.B16()); @@ -1874,7 +1990,9 @@ TEST_CASE("A64: {S,U}MIN.B, {S,U}MAX.B", "[a64]") { TEST_CASE("A64: {S,U}MINP.S, {S,U}MAXP.S", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SMINP(V2.S2(), V0.S2(), V1.S2()); @@ -1942,7 +2060,9 @@ TEST_CASE("A64: {S,U}MINP.S, {S,U}MAXP.S", "[a64]") { TEST_CASE("A64: {S,U}MINP.H, {S,U}MAXP.H", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SMINP(V2.H4(), V0.H4(), V1.H4()); @@ -2010,7 +2130,9 @@ TEST_CASE("A64: {S,U}MINP.H, {S,U}MAXP.H", "[a64]") { TEST_CASE("A64: {S,U}MINP.B, {S,U}MAXP.B", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; code.SMINP(V2.B8(), V0.B8(), V1.B8()); @@ -2084,7 +2206,9 @@ TEST_CASE("A64: {S,U}MINP.B, {S,U}MAXP.B", "[a64]") { TEST_CASE("A64: SQABS", "[a64]") { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; oaknut::VectorCodeGenerator code{env.code_mem, nullptr}; // should set QC flag diff --git a/externals/dynarmic/tests/A64/fp_min_max.cpp b/externals/dynarmic/tests/A64/fp_min_max.cpp index 7aa1ef4407..a857005d15 100644 --- a/externals/dynarmic/tests/A64/fp_min_max.cpp +++ b/externals/dynarmic/tests/A64/fp_min_max.cpp @@ -64,7 +64,9 @@ u32 force_default_nan(u32 value) { template void run_test(u32 instruction, Fn fn) { A64TestEnv env; - A64::Jit jit{A64::UserConfig{&env}}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &env; + A64::Jit jit{jit_user_config}; env.code_mem.emplace_back(instruction); // FMAX S0, S1, S2 env.code_mem.emplace_back(0x14000000); // B . diff --git a/externals/dynarmic/tests/A64/fuzz_with_unicorn.cpp b/externals/dynarmic/tests/A64/fuzz_with_unicorn.cpp index 1a56a982ef..27d014f71e 100644 --- a/externals/dynarmic/tests/A64/fuzz_with_unicorn.cpp +++ b/externals/dynarmic/tests/A64/fuzz_with_unicorn.cpp @@ -154,7 +154,8 @@ static u32 GenFloatInst(u64 pc, bool is_last_inst) { } static Dynarmic::A64::UserConfig GetUserConfig(A64TestEnv& jit_env) { - Dynarmic::A64::UserConfig jit_user_config{&jit_env}; + Dynarmic::A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &jit_env; jit_user_config.optimizations &= ~OptimizationFlag::FastDispatch; // The below corresponds to the settings for qemu's aarch64_max_initfn jit_user_config.dczid_el0 = 7; diff --git a/externals/dynarmic/tests/A64/misaligned_page_table.cpp b/externals/dynarmic/tests/A64/misaligned_page_table.cpp index f54aa58641..75ac41e06d 100644 --- a/externals/dynarmic/tests/A64/misaligned_page_table.cpp +++ b/externals/dynarmic/tests/A64/misaligned_page_table.cpp @@ -10,7 +10,8 @@ TEST_CASE("misaligned load/store do not use page_table when detect_misaligned_access_via_page_table is set", "[a64]") { A64TestEnv env; - Dynarmic::A64::UserConfig conf{&env}; + Dynarmic::A64::UserConfig conf{}; + conf.callbacks = &env; conf.page_table = nullptr; conf.detect_misaligned_access_via_page_table = 128; conf.only_detect_misalignment_via_page_table_on_page_boundary = true; diff --git a/externals/dynarmic/tests/A64/test_invalidation.cpp b/externals/dynarmic/tests/A64/test_invalidation.cpp index fa35b02b7f..cba47dd8ca 100644 --- a/externals/dynarmic/tests/A64/test_invalidation.cpp +++ b/externals/dynarmic/tests/A64/test_invalidation.cpp @@ -12,8 +12,8 @@ using namespace Dynarmic; TEST_CASE("ensure fast dispatch entry is cleared even when a block does not have any patching requirements", "[a64]") { A64TestEnv env; - - A64::UserConfig conf{&env}; + A64::UserConfig conf{}; + conf.callbacks = &env; A64::Jit jit{conf}; REQUIRE(conf.HasOptimization(OptimizationFlag::FastDispatch)); @@ -64,8 +64,8 @@ TEST_CASE("ensure fast dispatch entry is cleared even when a block does not have TEST_CASE("ensure fast dispatch entry is cleared even when a block does not have any patching requirements 2", "[a64]") { A64TestEnv env; - - A64::UserConfig conf{&env}; + A64::UserConfig conf{}; + conf.callbacks = &env; A64::Jit jit{conf}; REQUIRE(conf.HasOptimization(OptimizationFlag::FastDispatch)); diff --git a/externals/dynarmic/tests/test_generator.cpp b/externals/dynarmic/tests/test_generator.cpp index cfdd8ea436..450d3e3fc4 100644 --- a/externals/dynarmic/tests/test_generator.cpp +++ b/externals/dynarmic/tests/test_generator.cpp @@ -23,6 +23,7 @@ #include "./rand_int.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" +#include "dynarmic/common/llvm_disassemble.h" #include "dynarmic/frontend/A32/ITState.h" #include "dynarmic/frontend/A32/a32_location_descriptor.h" #include "dynarmic/frontend/A32/a32_types.h" @@ -396,39 +397,41 @@ Dynarmic::A32::UserConfig GetA32UserConfig(TestEnv& testenv, bool noopt) { template void RunTestInstance(Dynarmic::A32::Jit& jit, - TestEnv& jit_env, - const std::array& regs, - const std::array& vecs, - const std::vector& instructions, - const u32 cpsr, - const u32 fpscr, - const size_t ticks_left) { + TestEnv& jit_env, + const std::array& regs, + const std::array& vecs, + const std::vector& instructions, + const u32 cpsr, + const u32 fpscr, + const size_t ticks_left, + const bool show_disas) { const u32 initial_pc = regs[15]; const u32 num_words = initial_pc / sizeof(typename TestEnv::InstructionType); const u32 code_mem_size = num_words + static_cast(instructions.size()); - fmt::print("instructions:"); - for (auto instruction : instructions) { - if constexpr (sizeof(decltype(instruction)) == 2) { - fmt::print(" {:04x}", instruction); - } else { - fmt::print(" {:08x}", instruction); + if (show_disas) { + fmt::print("instructions:\n"); + auto current_pc = initial_pc; + for (auto instruction : instructions) { + if constexpr (sizeof(decltype(instruction)) == 2) { + fmt::print("{:04x} ?\n", instruction); + } else { + fmt::print("{}", Dynarmic::Common::DisassembleAArch64(instruction, current_pc)); + } + current_pc += sizeof(decltype(instruction)); } - } - fmt::print("\n"); - fmt::print("initial_regs:"); - for (u32 i : regs) { - fmt::print(" {:08x}", i); + fmt::print("initial_regs:"); + for (u32 i : regs) + fmt::print(" {:08x}", i); + fmt::print("\n"); + fmt::print("initial_vecs:"); + for (u32 i : vecs) + fmt::print(" {:08x}", i); + fmt::print("\n"); + fmt::print("initial_cpsr: {:08x}\n", cpsr); + fmt::print("initial_fpcr: {:08x}\n", fpscr); } - fmt::print("\n"); - fmt::print("initial_vecs:"); - for (u32 i : vecs) { - fmt::print(" {:08x}", i); - } - fmt::print("\n"); - fmt::print("initial_cpsr: {:08x}\n", cpsr); - fmt::print("initial_fpcr: {:08x}\n", fpscr); jit.ClearCache(); @@ -450,36 +453,37 @@ void RunTestInstance(Dynarmic::A32::Jit& jit, jit.Run(); } - fmt::print("final_regs:"); - for (u32 i : jit.Regs()) { - fmt::print(" {:08x}", i); + if (show_disas) { + fmt::print("final_regs:"); + for (u32 i : jit.Regs()) { + fmt::print(" {:08x}", i); + } + fmt::print("\n"); + fmt::print("final_vecs:"); + for (u32 i : jit.ExtRegs()) { + fmt::print(" {:08x}", i); + } + fmt::print("\n"); + fmt::print("final_cpsr: {:08x}\n", jit.Cpsr()); + fmt::print("final_fpsr: {:08x}\n", mask_fpsr_cum_bits ? jit.Fpscr() & 0xffffff00 : jit.Fpscr()); + fmt::print("mod_mem: "); + for (auto [addr, value] : jit_env.modified_memory) { + fmt::print("{:08x}:{:02x} ", addr, value); + } + fmt::print("\n"); + fmt::print("interrupts:\n"); + for (const auto& i : jit_env.interrupts) { + std::puts(i.c_str()); + } + fmt::print("===\n"); + jit.DumpDisassembly(); } - fmt::print("\n"); - fmt::print("final_vecs:"); - for (u32 i : jit.ExtRegs()) { - fmt::print(" {:08x}", i); - } - fmt::print("\n"); - fmt::print("final_cpsr: {:08x}\n", jit.Cpsr()); - fmt::print("final_fpsr: {:08x}\n", mask_fpsr_cum_bits ? jit.Fpscr() & 0xffffff00 : jit.Fpscr()); - - fmt::print("mod_mem: "); - for (auto [addr, value] : jit_env.modified_memory) { - fmt::print("{:08x}:{:02x} ", addr, value); - } - fmt::print("\n"); - - fmt::print("interrupts:\n"); - for (const auto& i : jit_env.interrupts) { - std::puts(i.c_str()); - } - - fmt::print("===\n"); } Dynarmic::A64::UserConfig GetA64UserConfig(A64TestEnv& jit_env, bool noopt) { - Dynarmic::A64::UserConfig jit_user_config{&jit_env}; - jit_user_config.optimizations &= ~OptimizationFlag::FastDispatch; + Dynarmic::A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &jit_env; + jit_user_config.optimizations = all_safe_optimizations; // The below corresponds to the settings for qemu's aarch64_max_initfn jit_user_config.dczid_el0 = 7; jit_user_config.ctr_el0 = 0x80038003; @@ -491,15 +495,16 @@ Dynarmic::A64::UserConfig GetA64UserConfig(A64TestEnv& jit_env, bool noopt) { template void RunTestInstance(Dynarmic::A64::Jit& jit, - A64TestEnv& jit_env, - const std::array& regs, - const std::array, 32>& vecs, - const std::vector& instructions, - const u32 pstate, - const u32 fpcr, - const u64 initial_sp, - const u64 start_address, - const size_t ticks_left) { + A64TestEnv& jit_env, + const std::array& regs, + const std::array, 32>& vecs, + const std::vector& instructions, + const u32 pstate, + const u32 fpcr, + const u64 initial_sp, + const u64 start_address, + const size_t ticks_left, + const bool show_disas) { jit.ClearCache(); for (size_t jit_rerun_count = 0; jit_rerun_count < num_jit_reruns; ++jit_rerun_count) { @@ -522,59 +527,53 @@ void RunTestInstance(Dynarmic::A64::Jit& jit, jit.Run(); } - fmt::print("instructions:"); - for (u32 instruction : instructions) { - fmt::print(" {:08x}", instruction); - } - fmt::print("\n"); + if (show_disas) { + fmt::print("instructions:\n"); + auto current_pc = start_address; + for (u32 instruction : instructions) { + fmt::print("{}", Dynarmic::Common::DisassembleAArch64(instruction, current_pc)); + current_pc += 4; + } - fmt::print("initial_regs:"); - for (u64 i : regs) { - fmt::print(" {:016x}", i); + fmt::print("initial_regs:"); + for (u64 i : regs) + fmt::print(" {:016x}", i); + fmt::print("\n"); + fmt::print("initial_vecs:"); + for (auto i : vecs) + fmt::print(" {:016x}:{:016x}", i[0], i[1]); + fmt::print("\n"); + fmt::print("initial_sp: {:016x}\n", initial_sp); + fmt::print("initial_pstate: {:08x}\n", pstate); + fmt::print("initial_fpcr: {:08x}\n", fpcr); + fmt::print("final_regs:"); + for (u64 i : jit.GetRegisters()) + fmt::print(" {:016x}", i); + fmt::print("\n"); + fmt::print("final_vecs:"); + for (auto i : jit.GetVectors()) + fmt::print(" {:016x}:{:016x}", i[0], i[1]); + fmt::print("\n"); + fmt::print("final_sp: {:016x}\n", jit.GetSP()); + fmt::print("final_pc: {:016x}\n", jit.GetPC()); + fmt::print("final_pstate: {:08x}\n", jit.GetPstate()); + fmt::print("final_fpcr: {:08x}\n", jit.GetFpcr()); + fmt::print("final_qc : {}\n", FP::FPSR{jit.GetFpsr()}.QC()); + fmt::print("mod_mem:"); + for (auto [addr, value] : jit_env.modified_memory) + fmt::print(" {:08x}:{:02x}", addr, value); + fmt::print("\n"); + fmt::print("interrupts:\n"); + for (const auto& i : jit_env.interrupts) + std::puts(i.c_str()); + fmt::print("===\n"); + jit.DumpDisassembly(); } - fmt::print("\n"); - fmt::print("initial_vecs:"); - for (auto i : vecs) { - fmt::print(" {:016x}:{:016x}", i[0], i[1]); - } - fmt::print("\n"); - fmt::print("initial_sp: {:016x}\n", initial_sp); - fmt::print("initial_pstate: {:08x}\n", pstate); - fmt::print("initial_fpcr: {:08x}\n", fpcr); - - fmt::print("final_regs:"); - for (u64 i : jit.GetRegisters()) { - fmt::print(" {:016x}", i); - } - fmt::print("\n"); - fmt::print("final_vecs:"); - for (auto i : jit.GetVectors()) { - fmt::print(" {:016x}:{:016x}", i[0], i[1]); - } - fmt::print("\n"); - fmt::print("final_sp: {:016x}\n", jit.GetSP()); - fmt::print("final_pc: {:016x}\n", jit.GetPC()); - fmt::print("final_pstate: {:08x}\n", jit.GetPstate()); - fmt::print("final_fpcr: {:08x}\n", jit.GetFpcr()); - fmt::print("final_qc : {}\n", FP::FPSR{jit.GetFpsr()}.QC()); - - fmt::print("mod_mem:"); - for (auto [addr, value] : jit_env.modified_memory) { - fmt::print(" {:08x}:{:02x}", addr, value); - } - fmt::print("\n"); - - fmt::print("interrupts:\n"); - for (const auto& i : jit_env.interrupts) { - std::puts(i.c_str()); - } - - fmt::print("===\n"); } } // Anonymous namespace -void TestThumb(size_t num_instructions, size_t num_iterations, bool noopt) { +void TestThumb(size_t num_instructions, size_t num_iterations, bool noopt, bool show_disas) { ThumbTestEnv jit_env{}; Dynarmic::A32::Jit jit{GetA32UserConfig(jit_env, noopt)}; @@ -597,11 +596,11 @@ void TestThumb(size_t num_instructions, size_t num_iterations, bool noopt) { } regs[15] = start_address; - RunTestInstance(jit, jit_env, regs, ext_reg, instructions, cpsr, fpcr, num_instructions); + RunTestInstance(jit, jit_env, regs, ext_reg, instructions, cpsr, fpcr, num_instructions, show_disas); } } -void TestArm(size_t num_instructions, size_t num_iterations, bool noopt) { +void TestArm(size_t num_instructions, size_t num_iterations, bool noopt, bool show_disas) { ArmTestEnv jit_env{}; Dynarmic::A32::Jit jit{GetA32UserConfig(jit_env, noopt)}; @@ -623,11 +622,11 @@ void TestArm(size_t num_instructions, size_t num_iterations, bool noopt) { } regs[15] = start_address; - RunTestInstance(jit, jit_env, regs, ext_reg, instructions, cpsr, fpcr, num_instructions); + RunTestInstance(jit, jit_env, regs, ext_reg, instructions, cpsr, fpcr, num_instructions, show_disas); } } -void TestA64(size_t num_instructions, size_t num_iterations, bool noopt) { +void TestA64(size_t num_instructions, size_t num_iterations, bool noopt, bool show_disas) { A64TestEnv jit_env{}; Dynarmic::A64::Jit jit{GetA64UserConfig(jit_env, noopt)}; @@ -649,7 +648,7 @@ void TestA64(size_t num_instructions, size_t num_iterations, bool noopt) { instructions.emplace_back(GenRandomA64Inst(static_cast(start_address + 4 * instructions.size()), i == num_instructions - 1)); } - RunTestInstance(jit, jit_env, regs, vecs, instructions, pstate, fpcr, initial_sp, start_address, num_instructions); + RunTestInstance(jit, jit_env, regs, vecs, instructions, pstate, fpcr, initial_sp, start_address, num_instructions, show_disas); } } @@ -677,6 +676,7 @@ int main(int argc, char* argv[]) { const auto instruction_count = str2sz(argv[3]); const auto iterator_count = str2sz(argv[4]); const bool noopt = argc == 6 && (strcmp(argv[5], "noopt") == 0); + const bool show_disas = argc == 6 && (strcmp(argv[5], "disas") == 0); if (!seed || !instruction_count || !iterator_count) { fmt::print("invalid numeric arguments\n"); @@ -686,11 +686,11 @@ int main(int argc, char* argv[]) { detail::g_rand_int_generator.seed(static_cast(*seed)); if (strcmp(argv[1], "thumb") == 0) { - TestThumb(*instruction_count, *iterator_count, noopt); + TestThumb(*instruction_count, *iterator_count, noopt, show_disas); } else if (strcmp(argv[1], "arm") == 0) { - TestArm(*instruction_count, *iterator_count, noopt); + TestArm(*instruction_count, *iterator_count, noopt, show_disas); } else if (strcmp(argv[1], "a64") == 0) { - TestA64(*instruction_count, *iterator_count, noopt); + TestA64(*instruction_count, *iterator_count, noopt, show_disas); } else { fmt::print("unrecognized instruction class\n"); return 1; diff --git a/externals/dynarmic/tests/test_reader.cpp b/externals/dynarmic/tests/test_reader.cpp index 44d6e966ea..211d26adda 100644 --- a/externals/dynarmic/tests/test_reader.cpp +++ b/externals/dynarmic/tests/test_reader.cpp @@ -158,7 +158,8 @@ void RunTestInstance(Dynarmic::A32::Jit& jit, } A64::UserConfig GetA64UserConfig(A64TestEnv& jit_env, bool noopt) { - A64::UserConfig jit_user_config{&jit_env}; + A64::UserConfig jit_user_config{}; + jit_user_config.callbacks = &jit_env; jit_user_config.optimizations &= ~OptimizationFlag::FastDispatch; // The below corresponds to the settings for qemu's aarch64_max_initfn jit_user_config.dczid_el0 = 7; From 1e90df7c3bbf1c8ad6be840645c7742c0e65ab93 Mon Sep 17 00:00:00 2001 From: lizzie Date: Tue, 22 Jul 2025 18:32:02 +0100 Subject: [PATCH 12/22] [dynarmic] better LRU prioritize empty regs --- .../src/dynarmic/backend/x64/reg_alloc.cpp | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp index 2a30c52e01..db7c692f07 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp @@ -415,6 +415,10 @@ void RegAlloc::ReleaseStackSpace(const size_t stack_space) noexcept { } HostLoc RegAlloc::SelectARegister(const boost::container::static_vector& desired_locations) const noexcept { + // TODO(lizzie): Overspill causes issues (reads to 0 and such) on some games, I need to make a testbench + // to later track this down - however I just modified the LRU algo so it prefers empty registers first + // we need to test high register pressure (and spills, maybe 32 regs?) + // Selects the best location out of the available locations. // NOTE: Using last is BAD because new REX prefix for each insn using the last regs // TODO: Actually do LRU or something. Currently we just try to pick something without a value if possible. @@ -428,10 +432,9 @@ HostLoc RegAlloc::SelectARegister(const boost::container::static_vector= HostLoc::R8 && *it <= HostLoc::R15) { @@ -442,17 +445,20 @@ HostLoc RegAlloc::SelectARegister(const boost::container::static_vector Try normal candidate (no REX prefix) - // 2 => Try an empty candidate + // 1 => Try an empty candidate + // 2 => Try normal candidate (no REX prefix) // 3 => Try using a REX prefixed one // We avoid using REX-addressable registers because they add +1 REX prefix which // do we really need? The trade-off may not be worth it. - auto const it_final = it_candidate != desired_locations.cend() - ? it_candidate : it_empty_candidate != desired_locations.cend() - ? it_empty_candidate : it_rex_candidate; + auto const it_final = it_empty_candidate != desired_locations.cend() + ? it_empty_candidate : it_candidate != desired_locations.cend() + ? it_candidate : it_rex_candidate; ASSERT_MSG(it_final != desired_locations.cend(), "All candidate registers have already been allocated"); // Evil magic - increment LRU counter (will wrap at 256) const_cast(this)->LocInfo(*it_final).lru_counter++; From 111f2c3be5f11807217e0e24d120d8a5c626487a Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 25 Jul 2025 02:22:38 +0200 Subject: [PATCH 13/22] [dynarmic] remove mcl/assert.h and mcl/stdint.h (depends on #81) (#89) Co-authored-by: crueter Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/89 Co-authored-by: lizzie Co-committed-by: lizzie --- .../dynarmic/src/dynarmic/CMakeLists.txt | 3 ++ .../dynarmic/backend/arm64/a32_interface.cpp | 7 ++-- .../dynarmic/backend/arm64/a32_jitstate.cpp | 5 ++- .../src/dynarmic/backend/arm64/a32_jitstate.h | 5 ++- .../dynarmic/backend/arm64/a64_interface.cpp | 7 ++-- .../src/dynarmic/backend/arm64/a64_jitstate.h | 5 ++- .../src/dynarmic/backend/arm64/abi.cpp | 5 ++- .../dynarmic/src/dynarmic/backend/arm64/abi.h | 5 ++- .../dynarmic/backend/arm64/address_space.h | 5 ++- .../src/dynarmic/backend/arm64/devirtualize.h | 5 ++- .../src/dynarmic/backend/arm64/emit_arm64.h | 5 ++- .../backend/arm64/emit_arm64_memory.h | 5 ++- .../backend/arm64/exclusive_monitor.cpp | 5 ++- .../src/dynarmic/backend/arm64/fastmem.h | 5 ++- .../src/dynarmic/backend/arm64/fpsr_manager.h | 5 ++- .../src/dynarmic/backend/arm64/reg_alloc.cpp | 7 ++-- .../src/dynarmic/backend/arm64/reg_alloc.h | 7 ++-- .../src/dynarmic/backend/arm64/stack_layout.h | 5 ++- .../backend/arm64/verbose_debugging_output.h | 5 ++- .../backend/block_range_information.cpp | 5 ++- .../src/dynarmic/backend/exception_handler.h | 5 ++- .../backend/exception_handler_macos.cpp | 7 ++-- .../backend/exception_handler_posix.cpp | 4 +-- .../backend/riscv64/a32_address_space.cpp | 5 ++- .../backend/riscv64/a32_interface.cpp | 7 ++-- .../dynarmic/backend/riscv64/a32_jitstate.cpp | 5 ++- .../dynarmic/backend/riscv64/a32_jitstate.h | 5 ++- .../dynarmic/backend/riscv64/emit_riscv64.h | 5 ++- .../dynarmic/backend/riscv64/reg_alloc.cpp | 7 ++-- .../src/dynarmic/backend/riscv64/reg_alloc.h | 7 ++-- .../dynarmic/backend/riscv64/stack_layout.h | 5 ++- .../src/dynarmic/backend/x64/a32_emit_x64.cpp | 7 ++-- .../dynarmic/backend/x64/a32_interface.cpp | 7 ++-- .../src/dynarmic/backend/x64/a32_jitstate.cpp | 7 ++-- .../src/dynarmic/backend/x64/a32_jitstate.h | 5 ++- .../src/dynarmic/backend/x64/a64_emit_x64.cpp | 7 ++-- .../dynarmic/backend/x64/a64_interface.cpp | 5 ++- .../src/dynarmic/backend/x64/a64_jitstate.h | 5 ++- .../dynarmic/src/dynarmic/backend/x64/abi.cpp | 2 +- .../dynarmic/src/dynarmic/backend/x64/abi.h | 5 ++- .../dynarmic/backend/x64/block_of_code.cpp | 5 ++- .../src/dynarmic/backend/x64/block_of_code.h | 5 ++- .../src/dynarmic/backend/x64/callback.h | 5 ++- .../dynarmic/backend/x64/constant_pool.cpp | 5 ++- .../src/dynarmic/backend/x64/constant_pool.h | 5 ++- .../src/dynarmic/backend/x64/constants.h | 5 ++- .../src/dynarmic/backend/x64/devirtualize.h | 5 ++- .../src/dynarmic/backend/x64/emit_x64.cpp | 7 ++-- .../src/dynarmic/backend/x64/emit_x64_aes.cpp | 5 ++- .../backend/x64/emit_x64_data_processing.cpp | 7 ++-- .../backend/x64/emit_x64_floating_point.cpp | 7 ++-- .../backend/x64/emit_x64_saturation.cpp | 7 ++-- .../dynarmic/backend/x64/emit_x64_vector.cpp | 7 ++-- .../x64/emit_x64_vector_floating_point.cpp | 5 ++- .../x64/emit_x64_vector_saturation.cpp | 5 ++- .../backend/x64/exception_handler_windows.cpp | 7 ++-- .../backend/x64/exclusive_monitor.cpp | 5 ++- .../src/dynarmic/backend/x64/host_feature.h | 5 ++- .../src/dynarmic/backend/x64/hostloc.h | 7 ++-- .../src/dynarmic/backend/x64/nzcv_util.h | 5 ++- .../dynarmic/src/dynarmic/backend/x64/oparg.h | 5 ++- .../src/dynarmic/backend/x64/reg_alloc.cpp | 5 ++- .../src/dynarmic/backend/x64/reg_alloc.h | 5 ++- .../src/dynarmic/backend/x64/stack_layout.h | 5 ++- .../backend/x64/verbose_debugging_output.h | 5 ++- .../dynarmic/src/dynarmic/common/assert.cpp | 13 ++++++++ .../dynarmic/src/dynarmic/common/assert.h | 32 +++++++++++++++++++ .../dynarmic/src/dynarmic/common/atomic.h | 5 ++- .../src/dynarmic/common/common_types.h | 23 +++++++++++++ .../src/dynarmic/common/crypto/aes.cpp | 5 ++- .../dynarmic/src/dynarmic/common/crypto/aes.h | 5 ++- .../src/dynarmic/common/crypto/crc32.cpp | 5 ++- .../src/dynarmic/common/crypto/crc32.h | 5 ++- .../src/dynarmic/common/crypto/sm4.cpp | 5 ++- .../dynarmic/src/dynarmic/common/crypto/sm4.h | 5 ++- .../dynarmic/src/dynarmic/common/fp/fpcr.h | 7 ++-- .../dynarmic/src/dynarmic/common/fp/fpsr.h | 5 ++- .../dynarmic/src/dynarmic/common/fp/info.h | 5 ++- .../src/dynarmic/common/fp/mantissa_util.h | 5 ++- .../src/dynarmic/common/fp/op/FPConvert.cpp | 5 ++- .../src/dynarmic/common/fp/op/FPMulAdd.cpp | 5 ++- .../dynarmic/common/fp/op/FPRSqrtEstimate.cpp | 5 ++- .../dynarmic/common/fp/op/FPRecipEstimate.cpp | 7 ++-- .../dynarmic/common/fp/op/FPRecipExponent.cpp | 5 ++- .../src/dynarmic/common/fp/op/FPRoundInt.cpp | 7 ++-- .../src/dynarmic/common/fp/op/FPRoundInt.h | 5 ++- .../src/dynarmic/common/fp/op/FPToFixed.cpp | 7 ++-- .../src/dynarmic/common/fp/op/FPToFixed.h | 5 ++- .../dynarmic/common/fp/process_exception.cpp | 5 ++- .../src/dynarmic/common/fp/process_nan.cpp | 5 ++- .../src/dynarmic/common/fp/unpacked.h | 5 ++- .../src/dynarmic/common/llvm_disassemble.cpp | 7 ++-- .../src/dynarmic/common/llvm_disassemble.h | 5 ++- .../dynarmic/src/dynarmic/common/math_util.h | 5 ++- .../dynarmic/src/dynarmic/common/safe_ops.h | 5 ++- .../dynarmic/src/dynarmic/common/u128.cpp | 5 ++- externals/dynarmic/src/dynarmic/common/u128.h | 5 ++- .../src/dynarmic/common/x64_disassemble.cpp | 5 ++- .../src/dynarmic/common/x64_disassemble.h | 5 ++- .../src/dynarmic/frontend/A32/FPSCR.h | 5 ++- .../src/dynarmic/frontend/A32/ITState.h | 5 ++- .../dynarmic/src/dynarmic/frontend/A32/PSR.h | 5 ++- .../dynarmic/frontend/A32/a32_ir_emitter.cpp | 5 ++- .../dynarmic/frontend/A32/a32_ir_emitter.h | 5 ++- .../frontend/A32/a32_location_descriptor.h | 5 ++- .../src/dynarmic/frontend/A32/a32_types.h | 7 ++-- .../src/dynarmic/frontend/A32/decoder/arm.h | 5 ++- .../src/dynarmic/frontend/A32/decoder/asimd.h | 5 ++- .../dynarmic/frontend/A32/decoder/thumb16.h | 5 ++- .../dynarmic/frontend/A32/decoder/thumb32.h | 5 ++- .../src/dynarmic/frontend/A32/decoder/vfp.h | 5 ++- .../frontend/A32/disassembler/disassembler.h | 5 ++- .../frontend/A32/translate/a32_translate.h | 5 ++- .../A32/translate/conditional_state.cpp | 7 ++-- .../A32/translate/conditional_state.h | 5 ++- .../A32/translate/impl/a32_translate_impl.cpp | 5 ++- .../A32/translate/impl/a32_translate_impl.h | 5 ++- .../A32/translate/impl/asimd_misc.cpp | 5 ++- .../impl/asimd_one_reg_modified_immediate.cpp | 5 ++- .../translate/impl/asimd_two_regs_scalar.cpp | 5 ++- .../translate/impl/asimd_two_regs_shift.cpp | 5 ++- ...data_processing_plain_binary_immediate.cpp | 5 ++- .../frontend/A32/translate/translate_arm.cpp | 5 ++- .../A32/translate/translate_thumb.cpp | 5 ++- .../dynarmic/frontend/A64/a64_ir_emitter.h | 7 ++-- .../frontend/A64/a64_location_descriptor.h | 5 ++- .../src/dynarmic/frontend/A64/a64_types.h | 7 ++-- .../src/dynarmic/frontend/A64/decoder/a64.h | 5 ++- .../frontend/A64/translate/a64_translate.h | 5 ++- .../impl/simd_vector_x_indexed_element.cpp | 5 ++- .../frontend/decoder/decoder_detail.h | 5 ++- .../src/dynarmic/frontend/decoder/matcher.h | 5 ++- .../dynarmic/src/dynarmic/frontend/imm.cpp | 7 ++-- .../dynarmic/src/dynarmic/frontend/imm.h | 7 ++-- .../dynarmic/src/dynarmic/ir/basic_block.cpp | 5 ++- .../dynarmic/src/dynarmic/ir/basic_block.h | 5 ++- .../dynarmic/src/dynarmic/ir/ir_emitter.cpp | 5 ++- .../dynarmic/src/dynarmic/ir/ir_emitter.h | 7 ++-- .../src/dynarmic/ir/location_descriptor.h | 5 ++- .../src/dynarmic/ir/microinstruction.cpp | 5 ++- .../src/dynarmic/ir/microinstruction.h | 5 ++- externals/dynarmic/src/dynarmic/ir/opcodes.h | 5 ++- .../ir/opt/a32_get_set_elimination_pass.cpp | 7 ++-- .../ir/opt/a64_get_set_elimination_pass.cpp | 5 ++- .../ir/opt/a64_merge_interpret_blocks.cpp | 5 ++- .../ir/opt/constant_propagation_pass.cpp | 7 ++-- .../src/dynarmic/ir/opt/verification_pass.cpp | 7 ++-- externals/dynarmic/src/dynarmic/ir/terminal.h | 5 ++- externals/dynarmic/src/dynarmic/ir/type.h | 5 ++- externals/dynarmic/src/dynarmic/ir/value.cpp | 5 ++- externals/dynarmic/src/dynarmic/ir/value.h | 7 ++-- externals/dynarmic/tests/A32/fuzz_arm.cpp | 5 ++- externals/dynarmic/tests/A32/fuzz_thumb.cpp | 5 ++- .../tests/A32/test_thumb_instructions.cpp | 5 ++- externals/dynarmic/tests/A32/testenv.h | 7 ++-- externals/dynarmic/tests/A64/fibonacci.cpp | 5 ++- externals/dynarmic/tests/A64/fp_min_max.cpp | 5 ++- .../dynarmic/tests/A64/fuzz_with_unicorn.cpp | 5 ++- externals/dynarmic/tests/A64/testenv.h | 7 ++-- externals/dynarmic/tests/decoder_tests.cpp | 5 ++- externals/dynarmic/tests/fp/FPToFixed.cpp | 5 ++- .../dynarmic/tests/fp/mantissa_util_tests.cpp | 5 ++- .../dynarmic/tests/fp/unpacked_tests.cpp | 5 ++- externals/dynarmic/tests/fuzz_util.cpp | 5 ++- externals/dynarmic/tests/fuzz_util.h | 5 ++- externals/dynarmic/tests/print_info.cpp | 5 ++- externals/dynarmic/tests/rsqrt_test.cpp | 5 ++- externals/dynarmic/tests/test_generator.cpp | 5 ++- externals/dynarmic/tests/test_reader.cpp | 5 ++- .../tests/unicorn_emu/a32_unicorn.cpp | 5 ++- .../dynarmic/tests/unicorn_emu/a32_unicorn.h | 5 ++- .../tests/unicorn_emu/a64_unicorn.cpp | 5 ++- .../dynarmic/tests/unicorn_emu/a64_unicorn.h | 5 ++- 173 files changed, 779 insertions(+), 207 deletions(-) create mode 100644 externals/dynarmic/src/dynarmic/common/assert.cpp create mode 100644 externals/dynarmic/src/dynarmic/common/assert.h create mode 100644 externals/dynarmic/src/dynarmic/common/common_types.h diff --git a/externals/dynarmic/src/dynarmic/CMakeLists.txt b/externals/dynarmic/src/dynarmic/CMakeLists.txt index a43c9eae10..ab2d653152 100644 --- a/externals/dynarmic/src/dynarmic/CMakeLists.txt +++ b/externals/dynarmic/src/dynarmic/CMakeLists.txt @@ -5,7 +5,10 @@ add_library(dynarmic backend/block_range_information.h backend/exception_handler.h common/always_false.h + common/assert.cpp + common/assert.h common/cast_util.h + common/common_types.h common/crypto/aes.cpp common/crypto/aes.h common/crypto/crc32.cpp diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/a32_interface.cpp b/externals/dynarmic/src/dynarmic/backend/arm64/a32_interface.cpp index 6b38c41093..a22f296e94 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/a32_interface.cpp +++ b/externals/dynarmic/src/dynarmic/backend/arm64/a32_interface.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) 2021 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,9 +10,9 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/arm64/a32_address_space.h" #include "dynarmic/backend/arm64/a32_core.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.cpp b/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.cpp index e24654c7db..67390a311d 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.cpp +++ b/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,7 +9,7 @@ #include "dynarmic/backend/arm64/a32_jitstate.h" #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::Arm64 { diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.h b/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.h index 978bf84ad2..b4fee9a4d0 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/a32_jitstate.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) 2021 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A32/a32_location_descriptor.h" #include "dynarmic/ir/location_descriptor.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/a64_interface.cpp b/externals/dynarmic/src/dynarmic/backend/arm64/a64_interface.cpp index 7d7716783a..96170f08a8 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/a64_interface.cpp +++ b/externals/dynarmic/src/dynarmic/backend/arm64/a64_interface.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 @@ -7,9 +10,9 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/arm64/a64_address_space.h" #include "dynarmic/backend/arm64/a64_core.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/a64_jitstate.h b/externals/dynarmic/src/dynarmic/backend/arm64/a64_jitstate.h index 215e6987f3..3dd422b6d4 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/a64_jitstate.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/a64_jitstate.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A64/a64_location_descriptor.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/abi.cpp b/externals/dynarmic/src/dynarmic/backend/arm64/abi.cpp index 6d7b96379b..04d8ca2eaf 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/abi.cpp +++ b/externals/dynarmic/src/dynarmic/backend/arm64/abi.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include namespace Dynarmic::Backend::Arm64 { diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/abi.h b/externals/dynarmic/src/dynarmic/backend/arm64/abi.h index d3d5de963a..ca7c9187db 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/abi.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/abi.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/common/always_false.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/address_space.h b/externals/dynarmic/src/dynarmic/backend/arm64/address_space.h index 792ecf696b..25b1ab4b04 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/address_space.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/address_space.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/devirtualize.h b/externals/dynarmic/src/dynarmic/backend/arm64/devirtualize.h index c433fd0126..14dc3809a5 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/devirtualize.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/devirtualize.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,7 +9,7 @@ #pragma once #include -#include +#include "dynarmic/common/common_types.h" #include namespace Dynarmic::Backend::Arm64 { diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64.h b/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64.h index f80f26898c..801ac42818 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/backend/arm64/fastmem.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.h b/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.h index bfc6d71f4e..3c50194689 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/emit_arm64_memory.h @@ -1,9 +1,12 @@ +// 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 */ -#include +#include "dynarmic/common/common_types.h" namespace oaknut { struct CodeGenerator; diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/exclusive_monitor.cpp b/externals/dynarmic/src/dynarmic/backend/arm64/exclusive_monitor.cpp index d57a29cd85..326ab4ad00 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/exclusive_monitor.cpp +++ b/externals/dynarmic/src/dynarmic/backend/arm64/exclusive_monitor.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" namespace Dynarmic { diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/fastmem.h b/externals/dynarmic/src/dynarmic/backend/arm64/fastmem.h index 7e14ce6d92..cae05bcf23 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/fastmem.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/fastmem.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/backend/exception_handler.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/fpsr_manager.h b/externals/dynarmic/src/dynarmic/backend/arm64/fpsr_manager.h index 9e5d68bfcf..3bc5683153 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/fpsr_manager.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/fpsr_manager.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace oaknut { struct CodeGenerator; diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.cpp b/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.cpp index fedee02f07..07440bd385 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.cpp +++ b/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.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 @@ -9,11 +12,11 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/arm64/abi.h" #include "dynarmic/backend/arm64/emit_context.h" diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.h b/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.h index 5ba8332d27..bde7c8e612 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/reg_alloc.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -11,8 +14,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/stack_layout.h b/externals/dynarmic/src/dynarmic/backend/arm64/stack_layout.h index cf7f3259a9..801b07c008 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/stack_layout.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/stack_layout.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::Arm64 { diff --git a/externals/dynarmic/src/dynarmic/backend/arm64/verbose_debugging_output.h b/externals/dynarmic/src/dynarmic/backend/arm64/verbose_debugging_output.h index 73c6646139..84beda4057 100644 --- a/externals/dynarmic/src/dynarmic/backend/arm64/verbose_debugging_output.h +++ b/externals/dynarmic/src/dynarmic/backend/arm64/verbose_debugging_output.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) 2023 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/arm64/stack_layout.h" diff --git a/externals/dynarmic/src/dynarmic/backend/block_range_information.cpp b/externals/dynarmic/src/dynarmic/backend/block_range_information.cpp index ab83ce6a78..0e5904ae1c 100644 --- a/externals/dynarmic/src/dynarmic/backend/block_range_information.cpp +++ b/externals/dynarmic/src/dynarmic/backend/block_range_information.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include namespace Dynarmic::Backend { diff --git a/externals/dynarmic/src/dynarmic/backend/exception_handler.h b/externals/dynarmic/src/dynarmic/backend/exception_handler.h index ed5c41c7b9..173949628c 100644 --- a/externals/dynarmic/src/dynarmic/backend/exception_handler.h +++ b/externals/dynarmic/src/dynarmic/backend/exception_handler.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) 2020 MerryMage * SPDX-License-Identifier: 0BSD @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #if defined(MCL_ARCHITECTURE_X86_64) namespace Dynarmic::Backend::X64 { diff --git a/externals/dynarmic/src/dynarmic/backend/exception_handler_macos.cpp b/externals/dynarmic/src/dynarmic/backend/exception_handler_macos.cpp index bac8d9c951..52bcf5972f 100644 --- a/externals/dynarmic/src/dynarmic/backend/exception_handler_macos.cpp +++ b/externals/dynarmic/src/dynarmic/backend/exception_handler_macos.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) 2019 MerryMage * SPDX-License-Identifier: 0BSD @@ -15,10 +18,10 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/exception_handler.h" diff --git a/externals/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp b/externals/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp index 8a523267e5..7695df57d2 100644 --- a/externals/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp +++ b/externals/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp @@ -28,9 +28,9 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #if defined(MCL_ARCHITECTURE_X86_64) # include "dynarmic/backend/x64/block_of_code.h" diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_address_space.cpp b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_address_space.cpp index 986ae4ca79..efa211618b 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_address_space.cpp +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_address_space.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/backend/riscv64/a32_address_space.h" -#include +#include "dynarmic/common/assert.h" #include "dynarmic/backend/riscv64/abi.h" #include "dynarmic/backend/riscv64/emit_riscv64.h" diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_interface.cpp b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_interface.cpp index dac4d2d2a7..7ad0fd90b0 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_interface.cpp +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_interface.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,9 +10,9 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/riscv64/a32_address_space.h" #include "dynarmic/backend/riscv64/a32_core.h" diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.cpp b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.cpp index 70482d0a7c..87eeab6b0f 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.cpp +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,7 +9,7 @@ #include "dynarmic/backend/riscv64/a32_jitstate.h" #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::RV64 { diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.h b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.h index 9bf6834088..2fbb5819d9 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.h +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/a32_jitstate.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A32/a32_location_descriptor.h" #include "dynarmic/ir/location_descriptor.h" diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.h b/externals/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.h index 5cfd0212c7..68d30d5e15 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.h +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/emit_riscv64.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace biscuit { class Assembler; diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.cpp b/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.cpp index 6c89d7b005..e09bd696b8 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.cpp +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -8,9 +11,9 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/always_false.h" diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.h b/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.h index c94027d931..e8fd471ae1 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.h +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/reg_alloc.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -13,8 +16,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/riscv64/stack_layout.h b/externals/dynarmic/src/dynarmic/backend/riscv64/stack_layout.h index 03c0e6f099..082e68aa6d 100644 --- a/externals/dynarmic/src/dynarmic/backend/riscv64/stack_layout.h +++ b/externals/dynarmic/src/dynarmic/backend/riscv64/stack_layout.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) 2024 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::RV64 { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp b/externals/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp index 740625c982..43e0750d68 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/a32_emit_x64.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -11,10 +14,10 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/backend/x64/a32_jitstate.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp b/externals/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp index d690aadade..b116ec180e 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/a32_interface.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/a32_interface.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -9,10 +12,10 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/a32_emit_x64.h" #include "dynarmic/backend/x64/a32_jitstate.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.cpp b/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.cpp index 2e201c1cc4..ed5a8f9454 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,9 +8,9 @@ #include "dynarmic/backend/x64/a32_jitstate.h" -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/block_of_code.h" #include "dynarmic/backend/x64/nzcv_util.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h b/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h index cc13abf8e2..99510c91cf 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/a32_jitstate.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::X64 { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp b/externals/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp index 4d7bb0d7b1..47a2236a87 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/a64_emit_x64.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,9 +10,9 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp b/externals/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp index 7c0fa8d205..ddd2327395 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/a64_interface.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/a64_interface.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h b/externals/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h index 0929e81ec5..22fd94e5c9 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/a64_jitstate.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/a64_jitstate.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/nzcv_util.h" #include "dynarmic/frontend/A64/a64_location_descriptor.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/abi.cpp b/externals/dynarmic/src/dynarmic/backend/x64/abi.cpp index 1d0b32fac9..e8eaddcbac 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/abi.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/abi.cpp @@ -11,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/backend/x64/block_of_code.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/abi.h b/externals/dynarmic/src/dynarmic/backend/x64/abi.h index 4bddf51bad..32f2bdac67 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/abi.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/abi.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 @@ -6,7 +9,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/hostloc.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp b/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp index e5fb25573b..41603abf86 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -21,7 +24,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.h b/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.h index 6a31d13857..4cc8663e11 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/block_of_code.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 @@ -11,7 +14,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/callback.h b/externals/dynarmic/src/dynarmic/backend/x64/callback.h index 716555daed..3254eea66c 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/callback.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/callback.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include namespace Dynarmic::Backend::X64 { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp b/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp index ba003262b3..7dbd46bc2a 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include "dynarmic/backend/x64/block_of_code.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.h b/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.h index dcf1e9cdc7..8115dcff26 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/constant_pool.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 @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/constants.h b/externals/dynarmic/src/dynarmic/backend/x64/constants.h index f817324142..65c5a09a53 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/constants.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/constants.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/rounding_mode.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/devirtualize.h b/externals/dynarmic/src/dynarmic/backend/x64/devirtualize.h index 778536a3bb..318a702194 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/devirtualize.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/devirtualize.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 @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/backend/x64/callback.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64.cpp index b9a705813f..d428199585 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,10 +10,10 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/backend/x64/block_of_code.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_aes.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_aes.cpp index 9430f0726b..2ec9bce068 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_aes.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_aes.cpp @@ -1,9 +1,12 @@ +// 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 */ -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/abi.h" #include "dynarmic/backend/x64/block_of_code.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.cpp index cb1afdec9e..4128ef1721 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_data_processing.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,8 +9,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/block_of_code.h" #include "dynarmic/backend/x64/emit_x64.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp index aeb4ceac3c..63b9659618 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,14 +10,14 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include #include #include #include #include -#include +#include "dynarmic/common/common_types.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp index 24fb895b61..d36a75426a 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_saturation.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,9 +8,9 @@ #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/backend/x64/block_of_code.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.cpp index 5d5ea17422..e9b8866b52 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -9,11 +12,11 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include #include -#include +#include "dynarmic/common/common_types.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp index 88d0786b03..b24120c346 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_saturation.cpp b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_saturation.cpp index 5bab9c93f4..88bd41a47e 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_saturation.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_saturation.cpp @@ -1,9 +1,12 @@ +// 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 */ -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/block_of_code.h" #include "dynarmic/backend/x64/constants.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.cpp b/externals/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.cpp index 633e1aac9d..95eacaae9b 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/exception_handler_windows.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -9,9 +12,9 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/exception_handler.h" #include "dynarmic/backend/x64/block_of_code.h" diff --git a/externals/dynarmic/src/dynarmic/backend/x64/exclusive_monitor.cpp b/externals/dynarmic/src/dynarmic/backend/x64/exclusive_monitor.cpp index 984b67bb02..09ef60205f 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/exclusive_monitor.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/exclusive_monitor.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" namespace Dynarmic { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/host_feature.h b/externals/dynarmic/src/dynarmic/backend/x64/host_feature.h index 8e3b14c7bb..7246ed18d4 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/host_feature.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/host_feature.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) 2021 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::X64 { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/hostloc.h b/externals/dynarmic/src/dynarmic/backend/x64/hostloc.h index d8de3931da..1b27edbdee 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/hostloc.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/hostloc.h @@ -1,11 +1,14 @@ +// 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 */ #pragma once -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include namespace Dynarmic::Backend::X64 { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/nzcv_util.h b/externals/dynarmic/src/dynarmic/backend/x64/nzcv_util.h index 3a70cf4f0b..1ee0ed4329 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/nzcv_util.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/nzcv_util.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 @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::X64::NZCV { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/oparg.h b/externals/dynarmic/src/dynarmic/backend/x64/oparg.h index 70c60dfb15..4e165b9df9 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/oparg.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/oparg.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 @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/assert.h" #include namespace Dynarmic::Backend::X64 { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp index db7c692f07..ab3172a7f3 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp +++ b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.h b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.h index 64f7c1ec40..f9b6477b60 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/reg_alloc.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 @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include #include diff --git a/externals/dynarmic/src/dynarmic/backend/x64/stack_layout.h b/externals/dynarmic/src/dynarmic/backend/x64/stack_layout.h index 7e6799f1cf..50737f12eb 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/stack_layout.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/stack_layout.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Backend::X64 { diff --git a/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.h b/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.h index 70183a6073..68d0ccff24 100644 --- a/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.h +++ b/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.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) 2023 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/backend/x64/stack_layout.h" diff --git a/externals/dynarmic/src/dynarmic/common/assert.cpp b/externals/dynarmic/src/dynarmic/common/assert.cpp new file mode 100644 index 0000000000..b0d3450c36 --- /dev/null +++ b/externals/dynarmic/src/dynarmic/common/assert.cpp @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include + +[[noreturn]] void assert_terminate_impl(const char* expr_str, fmt::string_view msg, fmt::format_args args) { + fmt::print(stderr, "assertion failed: {}\n", expr_str); + fmt::vprint(stderr, msg, args); + std::fflush(stderr); + std::terminate(); +} diff --git a/externals/dynarmic/src/dynarmic/common/assert.h b/externals/dynarmic/src/dynarmic/common/assert.h new file mode 100644 index 0000000000..48482275ff --- /dev/null +++ b/externals/dynarmic/src/dynarmic/common/assert.h @@ -0,0 +1,32 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-FileCopyrightText: 2013 Dolphin Emulator Project +// SPDX-FileCopyrightText: 2014 Citra Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include + +[[noreturn]] void assert_terminate_impl(const char* expr_str, fmt::string_view msg, fmt::format_args args); +template +[[noreturn]] void assert_terminate(const char* expr_str, fmt::string_view msg, Ts... args) { + assert_terminate_impl(expr_str, msg, fmt::make_format_args(args...)); +} + +#define ASSERT_MSG(_a_, ...) \ + ([&]() { \ + if (!(_a_)) [[unlikely]] { \ + assert_terminate(#_a_, __VA_ARGS__); \ + } \ + }()) + +#define ASSERT(_a_) ASSERT_MSG(_a_, "") +#define UNREACHABLE() ASSERT(false, "unreachable") +#ifdef _DEBUG +#define DEBUG_ASSERT(_a_) ASSERT(_a_) +#define DEBUG_ASSERT_MSG(_a_, ...) ASSERT_MSG(_a_, __VA_ARGS__) +#else // not debug +#define DEBUG_ASSERT(_a_) +#define DEBUG_ASSERT_MSG(_a_, _desc_, ...) +#endif diff --git a/externals/dynarmic/src/dynarmic/common/atomic.h b/externals/dynarmic/src/dynarmic/common/atomic.h index 34042d3802..966921eb9a 100644 --- a/externals/dynarmic/src/dynarmic/common/atomic.h +++ b/externals/dynarmic/src/dynarmic/common/atomic.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) 2022 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Atomic { diff --git a/externals/dynarmic/src/dynarmic/common/common_types.h b/externals/dynarmic/src/dynarmic/common/common_types.h new file mode 100644 index 0000000000..8127df3623 --- /dev/null +++ b/externals/dynarmic/src/dynarmic/common/common_types.h @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include +#include + +using u8 = std::uint8_t; ///< 8-bit unsigned byte +using u16 = std::uint16_t; ///< 16-bit unsigned short +using u32 = std::uint32_t; ///< 32-bit unsigned word +using u64 = std::uint64_t; ///< 64-bit unsigned int + +using s8 = std::int8_t; ///< 8-bit signed byte +using s16 = std::int16_t; ///< 16-bit signed short +using s32 = std::int32_t; ///< 32-bit signed word +using s64 = std::int64_t; ///< 64-bit signed int + +using f32 = float; ///< 32-bit floating point +using f64 = double; ///< 64-bit floating point + +using u128 = std::array; +static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide"); diff --git a/externals/dynarmic/src/dynarmic/common/crypto/aes.cpp b/externals/dynarmic/src/dynarmic/common/crypto/aes.cpp index c431758e57..c72481fbe3 100644 --- a/externals/dynarmic/src/dynarmic/common/crypto/aes.cpp +++ b/externals/dynarmic/src/dynarmic/common/crypto/aes.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common::Crypto::AES { diff --git a/externals/dynarmic/src/dynarmic/common/crypto/aes.h b/externals/dynarmic/src/dynarmic/common/crypto/aes.h index fa6d5a81b3..f5d68fe166 100644 --- a/externals/dynarmic/src/dynarmic/common/crypto/aes.h +++ b/externals/dynarmic/src/dynarmic/common/crypto/aes.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common::Crypto::AES { diff --git a/externals/dynarmic/src/dynarmic/common/crypto/crc32.cpp b/externals/dynarmic/src/dynarmic/common/crypto/crc32.cpp index c00385078b..c2821fa2c3 100644 --- a/externals/dynarmic/src/dynarmic/common/crypto/crc32.cpp +++ b/externals/dynarmic/src/dynarmic/common/crypto/crc32.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common::Crypto::CRC32 { diff --git a/externals/dynarmic/src/dynarmic/common/crypto/crc32.h b/externals/dynarmic/src/dynarmic/common/crypto/crc32.h index 30942327d4..391bd8074b 100644 --- a/externals/dynarmic/src/dynarmic/common/crypto/crc32.h +++ b/externals/dynarmic/src/dynarmic/common/crypto/crc32.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 @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common::Crypto::CRC32 { diff --git a/externals/dynarmic/src/dynarmic/common/crypto/sm4.cpp b/externals/dynarmic/src/dynarmic/common/crypto/sm4.cpp index 5743e5be9a..d775e1bf6d 100644 --- a/externals/dynarmic/src/dynarmic/common/crypto/sm4.cpp +++ b/externals/dynarmic/src/dynarmic/common/crypto/sm4.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common::Crypto::SM4 { diff --git a/externals/dynarmic/src/dynarmic/common/crypto/sm4.h b/externals/dynarmic/src/dynarmic/common/crypto/sm4.h index 417e9b9263..af7a67f871 100644 --- a/externals/dynarmic/src/dynarmic/common/crypto/sm4.h +++ b/externals/dynarmic/src/dynarmic/common/crypto/sm4.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 @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common::Crypto::SM4 { diff --git a/externals/dynarmic/src/dynarmic/common/fp/fpcr.h b/externals/dynarmic/src/dynarmic/common/fp/fpcr.h index 287f6d2889..803c9cb2a4 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/fpcr.h +++ b/externals/dynarmic/src/dynarmic/common/fp/fpcr.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 @@ -7,9 +10,9 @@ #include -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/rounding_mode.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/fpsr.h b/externals/dynarmic/src/dynarmic/common/fp/fpsr.h index fba58ebbb7..9308132879 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/fpsr.h +++ b/externals/dynarmic/src/dynarmic/common/fp/fpsr.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 @@ -6,7 +9,7 @@ #pragma once #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::FP { diff --git a/externals/dynarmic/src/dynarmic/common/fp/info.h b/externals/dynarmic/src/dynarmic/common/fp/info.h index 8cc2d29de4..3969843f0f 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/info.h +++ b/externals/dynarmic/src/dynarmic/common/fp/info.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 @@ -6,7 +9,7 @@ #pragma once #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::FP { diff --git a/externals/dynarmic/src/dynarmic/common/fp/mantissa_util.h b/externals/dynarmic/src/dynarmic/common/fp/mantissa_util.h index 31be52f761..3999f97c27 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/mantissa_util.h +++ b/externals/dynarmic/src/dynarmic/common/fp/mantissa_util.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 @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::FP { diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPConvert.cpp b/externals/dynarmic/src/dynarmic/common/fp/op/FPConvert.cpp index 85f1eaf899..906aa781a1 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPConvert.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPConvert.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) 2019 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPMulAdd.cpp b/externals/dynarmic/src/dynarmic/common/fp/op/FPMulAdd.cpp index f97f88de17..6990b135f6 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPMulAdd.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPMulAdd.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/common/fp/op/FPMulAdd.h" -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPRSqrtEstimate.cpp b/externals/dynarmic/src/dynarmic/common/fp/op/FPRSqrtEstimate.cpp index ed28bcc5cc..6b2d43e1ce 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPRSqrtEstimate.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPRSqrtEstimate.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/common/fp/op/FPRSqrtEstimate.h" -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipEstimate.cpp b/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipEstimate.cpp index 1fd4b924b2..edab4bf147 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipEstimate.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipEstimate.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,8 +10,8 @@ #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipExponent.cpp b/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipExponent.cpp index 171b94e96e..e932e02803 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipExponent.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPRecipExponent.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,7 +9,7 @@ #include "dynarmic/common/fp/op/FPRecipExponent.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.cpp b/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.cpp index 7325909075..198a71c807 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,9 +8,9 @@ #include "dynarmic/common/fp/op/FPRoundInt.h" -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.h b/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.h index e326627ce1..1eb2bd8877 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.h +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPRoundInt.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 @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::FP { diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.cpp b/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.cpp index b1a57d3104..8e3474952a 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,10 +9,10 @@ #include "dynarmic/common/fp/op/FPToFixed.h" #include -#include +#include "dynarmic/common/assert.h" #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.h b/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.h index 53a952836e..6e19607d51 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.h +++ b/externals/dynarmic/src/dynarmic/common/fp/op/FPToFixed.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 @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::FP { diff --git a/externals/dynarmic/src/dynarmic/common/fp/process_exception.cpp b/externals/dynarmic/src/dynarmic/common/fp/process_exception.cpp index a97e0ec820..4f34ee0f34 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/process_exception.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/process_exception.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/common/fp/process_exception.h" -#include +#include "dynarmic/common/assert.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/process_nan.cpp b/externals/dynarmic/src/dynarmic/common/fp/process_nan.cpp index 516b92adb6..ff1b09f4ba 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/process_nan.cpp +++ b/externals/dynarmic/src/dynarmic/common/fp/process_nan.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include "dynarmic/common/fp/fpcr.h" diff --git a/externals/dynarmic/src/dynarmic/common/fp/unpacked.h b/externals/dynarmic/src/dynarmic/common/fp/unpacked.h index 77f33d8966..49dca74304 100644 --- a/externals/dynarmic/src/dynarmic/common/fp/unpacked.h +++ b/externals/dynarmic/src/dynarmic/common/fp/unpacked.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" diff --git a/externals/dynarmic/src/dynarmic/common/llvm_disassemble.cpp b/externals/dynarmic/src/dynarmic/common/llvm_disassemble.cpp index 636ee3a250..31d55c134c 100644 --- a/externals/dynarmic/src/dynarmic/common/llvm_disassemble.cpp +++ b/externals/dynarmic/src/dynarmic/common/llvm_disassemble.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -12,9 +15,9 @@ # include #endif -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/llvm_disassemble.h" diff --git a/externals/dynarmic/src/dynarmic/common/llvm_disassemble.h b/externals/dynarmic/src/dynarmic/common/llvm_disassemble.h index 56de791a56..226b742ec5 100644 --- a/externals/dynarmic/src/dynarmic/common/llvm_disassemble.h +++ b/externals/dynarmic/src/dynarmic/common/llvm_disassemble.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common { diff --git a/externals/dynarmic/src/dynarmic/common/math_util.h b/externals/dynarmic/src/dynarmic/common/math_util.h index 5c1f784c89..8915100ae4 100644 --- a/externals/dynarmic/src/dynarmic/common/math_util.h +++ b/externals/dynarmic/src/dynarmic/common/math_util.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common { diff --git a/externals/dynarmic/src/dynarmic/common/safe_ops.h b/externals/dynarmic/src/dynarmic/common/safe_ops.h index aef3134762..f494bdb24b 100644 --- a/externals/dynarmic/src/dynarmic/common/safe_ops.h +++ b/externals/dynarmic/src/dynarmic/common/safe_ops.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/u128.h" diff --git a/externals/dynarmic/src/dynarmic/common/u128.cpp b/externals/dynarmic/src/dynarmic/common/u128.cpp index dd78ac97ef..fb7de7a495 100644 --- a/externals/dynarmic/src/dynarmic/common/u128.cpp +++ b/externals/dynarmic/src/dynarmic/common/u128.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/common/u128.h" -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic { diff --git a/externals/dynarmic/src/dynarmic/common/u128.h b/externals/dynarmic/src/dynarmic/common/u128.h index f6df1ae6cc..9ab4aa0bd5 100644 --- a/externals/dynarmic/src/dynarmic/common/u128.h +++ b/externals/dynarmic/src/dynarmic/common/u128.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 @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic { diff --git a/externals/dynarmic/src/dynarmic/common/x64_disassemble.cpp b/externals/dynarmic/src/dynarmic/common/x64_disassemble.cpp index 854de23a77..af37c93c02 100644 --- a/externals/dynarmic/src/dynarmic/common/x64_disassemble.cpp +++ b/externals/dynarmic/src/dynarmic/common/x64_disassemble.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) 2021 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common { diff --git a/externals/dynarmic/src/dynarmic/common/x64_disassemble.h b/externals/dynarmic/src/dynarmic/common/x64_disassemble.h index 03c511bfda..0f56464175 100644 --- a/externals/dynarmic/src/dynarmic/common/x64_disassemble.h +++ b/externals/dynarmic/src/dynarmic/common/x64_disassemble.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) 2021 MerryMage * SPDX-License-Identifier: 0BSD @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::Common { diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/FPSCR.h b/externals/dynarmic/src/dynarmic/frontend/A32/FPSCR.h index 28414e9fa1..7a4c738e9e 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/FPSCR.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/FPSCR.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/rounding_mode.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/ITState.h b/externals/dynarmic/src/dynarmic/frontend/A32/ITState.h index ae69fa1e3f..eeddaeb6b5 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/ITState.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/ITState.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) 2019 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,7 +9,7 @@ #pragma once #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/ir/cond.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/PSR.h b/externals/dynarmic/src/dynarmic/frontend/A32/PSR.h index 9af78eaae5..328fdb17c0 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/PSR.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/PSR.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 @@ -6,7 +9,7 @@ #pragma once #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A32/ITState.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.cpp index 343e521aba..396ab938f7 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/frontend/A32/a32_ir_emitter.h" -#include +#include "dynarmic/common/assert.h" #include "dynarmic/frontend/A32/a32_types.h" #include "dynarmic/interface/A32/arch_version.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.h b/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.h index 38160f96d4..0492b872ec 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/a32_ir_emitter.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A32/a32_location_descriptor.h" #include "dynarmic/ir/ir_emitter.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/a32_location_descriptor.h b/externals/dynarmic/src/dynarmic/frontend/A32/a32_location_descriptor.h index c53e75d4b7..cd850d0087 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/a32_location_descriptor.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/a32_location_descriptor.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 @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A32/FPSCR.h" #include "dynarmic/frontend/A32/ITState.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/a32_types.h b/externals/dynarmic/src/dynarmic/frontend/A32/a32_types.h index 6f56bea51a..5afd82f77f 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/a32_types.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/a32_types.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 @@ -9,8 +12,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/interface/A32/coprocessor_util.h" #include "dynarmic/ir/cond.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/arm.h b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/arm.h index e4cf4a2865..0257c28ddb 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/arm.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/arm.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 @@ -13,7 +16,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/decoder/decoder_detail.h" #include "dynarmic/frontend/decoder/matcher.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/asimd.h b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/asimd.h index cfcd28c6e6..f2e206695b 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/asimd.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/asimd.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) 2020 MerryMage * SPDX-License-Identifier: 0BSD @@ -12,7 +15,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/decoder/decoder_detail.h" #include "dynarmic/frontend/decoder/matcher.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb16.h b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb16.h index 6a4275f726..8073ee5d47 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb16.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb16.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 @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/decoder/decoder_detail.h" #include "dynarmic/frontend/decoder/matcher.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb32.h b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb32.h index f3f4b3b9ee..86a4d767a7 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb32.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/thumb32.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 @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/decoder/decoder_detail.h" #include "dynarmic/frontend/decoder/matcher.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/vfp.h b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/vfp.h index f79a859bf7..5fcacd2bda 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/decoder/vfp.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/decoder/vfp.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) 2032 MerryMage * SPDX-License-Identifier: 0BSD @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/decoder/decoder_detail.h" #include "dynarmic/frontend/decoder/matcher.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/disassembler/disassembler.h b/externals/dynarmic/src/dynarmic/frontend/A32/disassembler/disassembler.h index 6a61afdefa..1b16584dcf 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/disassembler/disassembler.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/disassembler/disassembler.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::A32 { diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/a32_translate.h b/externals/dynarmic/src/dynarmic/frontend/A32/translate/a32_translate.h index 0f2c3a121f..df0b86e9ff 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/a32_translate.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/a32_translate.h @@ -1,10 +1,13 @@ +// 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 */ #pragma once -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/interface/A32/arch_version.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.cpp index 2675657483..725418ec04 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.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) 2020 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,8 +10,8 @@ #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A32/a32_ir_emitter.h" #include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.h b/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.h index 27e1c98da7..ab52dd7198 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/conditional_state.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) 2020 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::IR { enum class Cond; diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.cpp index c83529f343..64040124fe 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h" -#include +#include "dynarmic/common/assert.h" #include "dynarmic/interface/A32/config.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.h b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.h index d33069c6e0..0a3cab3c12 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.h +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/a32_translate_impl.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 @@ -5,7 +8,7 @@ #pragma once -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_misc.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_misc.cpp index e30c438eff..9d73e7d4ae 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_misc.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_misc.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) 2020 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_one_reg_modified_immediate.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_one_reg_modified_immediate.cpp index 94e3e841e8..459cbfea06 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_one_reg_modified_immediate.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_one_reg_modified_immediate.cpp @@ -1,9 +1,12 @@ +// 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) 2020 MerryMage * SPDX-License-Identifier: 0BSD */ -#include +#include "dynarmic/common/assert.h" #include #include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_scalar.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_scalar.cpp index 8d1876a05d..4d6855f1ed 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_scalar.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_scalar.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) 2020 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_shift.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_shift.cpp index cbdfea04ce..27e94628a8 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_shift.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/asimd_two_regs_shift.cpp @@ -1,9 +1,12 @@ +// 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) 2020 MerryMage * SPDX-License-Identifier: 0BSD */ -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp index 14a3fef2d1..874edd4e16 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp @@ -1,9 +1,12 @@ +// 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 +#include "dynarmic/common/assert.h" #include #include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp index 24b5797de8..05316f8992 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_arm.cpp @@ -1,9 +1,12 @@ +// 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 */ -#include +#include "dynarmic/common/assert.h" #include "dynarmic/frontend/A32/a32_location_descriptor.h" #include "dynarmic/frontend/A32/a32_types.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.cpp b/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.cpp index d61d8ccbff..5bb516ccfd 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A32/translate/translate_thumb.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/frontend/A64/a64_ir_emitter.h b/externals/dynarmic/src/dynarmic/frontend/A64/a64_ir_emitter.h index 3bf633a3da..18f32cdcc9 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A64/a64_ir_emitter.h +++ b/externals/dynarmic/src/dynarmic/frontend/A64/a64_ir_emitter.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 @@ -7,8 +10,8 @@ #include -#include -#include +#include "dynarmic/common/common_types.h" +#include "dynarmic/common/assert.h" #include "dynarmic/frontend/A64/a64_location_descriptor.h" #include "dynarmic/frontend/A64/a64_types.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A64/a64_location_descriptor.h b/externals/dynarmic/src/dynarmic/frontend/A64/a64_location_descriptor.h index 122bebbcb7..4bfc5f890e 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A64/a64_location_descriptor.h +++ b/externals/dynarmic/src/dynarmic/frontend/A64/a64_location_descriptor.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 @@ -11,7 +14,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/ir/location_descriptor.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A64/a64_types.h b/externals/dynarmic/src/dynarmic/frontend/A64/a64_types.h index 6bc7a24536..8d0f0abe80 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A64/a64_types.h +++ b/externals/dynarmic/src/dynarmic/frontend/A64/a64_types.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 @@ -8,8 +11,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/ir/cond.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A64/decoder/a64.h b/externals/dynarmic/src/dynarmic/frontend/A64/decoder/a64.h index e807490d16..c651dd7cde 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A64/decoder/a64.h +++ b/externals/dynarmic/src/dynarmic/frontend/A64/decoder/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 @@ -13,7 +16,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/decoder/decoder_detail.h" #include "dynarmic/frontend/decoder/matcher.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.h b/externals/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.h index 2f62ac6e50..be55fb3970 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.h +++ b/externals/dynarmic/src/dynarmic/frontend/A64/translate/a64_translate.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 @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic { diff --git a/externals/dynarmic/src/dynarmic/frontend/A64/translate/impl/simd_vector_x_indexed_element.cpp b/externals/dynarmic/src/dynarmic/frontend/A64/translate/impl/simd_vector_x_indexed_element.cpp index d23b5fc144..1956c53acc 100644 --- a/externals/dynarmic/src/dynarmic/frontend/A64/translate/impl/simd_vector_x_indexed_element.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/A64/translate/impl/simd_vector_x_indexed_element.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include "dynarmic/frontend/A64/translate/impl/impl.h" diff --git a/externals/dynarmic/src/dynarmic/frontend/decoder/decoder_detail.h b/externals/dynarmic/src/dynarmic/frontend/decoder/decoder_detail.h index cf7d0e64bc..bd76efda2a 100644 --- a/externals/dynarmic/src/dynarmic/frontend/decoder/decoder_detail.h +++ b/externals/dynarmic/src/dynarmic/frontend/decoder/decoder_detail.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 @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include #include diff --git a/externals/dynarmic/src/dynarmic/frontend/decoder/matcher.h b/externals/dynarmic/src/dynarmic/frontend/decoder/matcher.h index adf9556dd4..7e5c9c5a8f 100644 --- a/externals/dynarmic/src/dynarmic/frontend/decoder/matcher.h +++ b/externals/dynarmic/src/dynarmic/frontend/decoder/matcher.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 @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" namespace Dynarmic::Decoder { diff --git a/externals/dynarmic/src/dynarmic/frontend/imm.cpp b/externals/dynarmic/src/dynarmic/frontend/imm.cpp index c802864df9..95e24206d7 100644 --- a/externals/dynarmic/src/dynarmic/frontend/imm.cpp +++ b/externals/dynarmic/src/dynarmic/frontend/imm.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,9 +8,9 @@ #include "dynarmic/frontend/imm.h" -#include +#include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic { diff --git a/externals/dynarmic/src/dynarmic/frontend/imm.h b/externals/dynarmic/src/dynarmic/frontend/imm.h index 7d86abbb61..2d529a23b8 100644 --- a/externals/dynarmic/src/dynarmic/frontend/imm.h +++ b/externals/dynarmic/src/dynarmic/frontend/imm.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 @@ -7,10 +10,10 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/math_util.h" diff --git a/externals/dynarmic/src/dynarmic/ir/basic_block.cpp b/externals/dynarmic/src/dynarmic/ir/basic_block.cpp index c818fe0b17..12765e26a8 100644 --- a/externals/dynarmic/src/dynarmic/ir/basic_block.cpp +++ b/externals/dynarmic/src/dynarmic/ir/basic_block.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -11,7 +14,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include "dynarmic/common/memory_pool.h" #include "dynarmic/frontend/A32/a32_types.h" diff --git a/externals/dynarmic/src/dynarmic/ir/basic_block.h b/externals/dynarmic/src/dynarmic/ir/basic_block.h index 6608f0e3a2..45b1f4ecde 100644 --- a/externals/dynarmic/src/dynarmic/ir/basic_block.h +++ b/externals/dynarmic/src/dynarmic/ir/basic_block.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 @@ -11,7 +14,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/ir/location_descriptor.h" #include "dynarmic/ir/microinstruction.h" diff --git a/externals/dynarmic/src/dynarmic/ir/ir_emitter.cpp b/externals/dynarmic/src/dynarmic/ir/ir_emitter.cpp index 3734aae4d5..a8ef7e2989 100644 --- a/externals/dynarmic/src/dynarmic/ir/ir_emitter.cpp +++ b/externals/dynarmic/src/dynarmic/ir/ir_emitter.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include "dynarmic/ir/opcodes.h" diff --git a/externals/dynarmic/src/dynarmic/ir/ir_emitter.h b/externals/dynarmic/src/dynarmic/ir/ir_emitter.h index 23cfb47498..dba34bcc56 100644 --- a/externals/dynarmic/src/dynarmic/ir/ir_emitter.h +++ b/externals/dynarmic/src/dynarmic/ir/ir_emitter.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 @@ -7,8 +10,8 @@ #include -#include -#include +#include "dynarmic/common/common_types.h" +#include "dynarmic/common/assert.h" #include #include "dynarmic/ir/opcodes.h" diff --git a/externals/dynarmic/src/dynarmic/ir/location_descriptor.h b/externals/dynarmic/src/dynarmic/ir/location_descriptor.h index 48e5e32bb1..5c7c954d38 100644 --- a/externals/dynarmic/src/dynarmic/ir/location_descriptor.h +++ b/externals/dynarmic/src/dynarmic/ir/location_descriptor.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 @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::IR { diff --git a/externals/dynarmic/src/dynarmic/ir/microinstruction.cpp b/externals/dynarmic/src/dynarmic/ir/microinstruction.cpp index 3f67a3ad78..f0ea4ac2c2 100644 --- a/externals/dynarmic/src/dynarmic/ir/microinstruction.cpp +++ b/externals/dynarmic/src/dynarmic/ir/microinstruction.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include "dynarmic/ir/opcodes.h" #include "dynarmic/ir/type.h" diff --git a/externals/dynarmic/src/dynarmic/ir/microinstruction.h b/externals/dynarmic/src/dynarmic/ir/microinstruction.h index a26a9d80b3..bc5a355793 100644 --- a/externals/dynarmic/src/dynarmic/ir/microinstruction.h +++ b/externals/dynarmic/src/dynarmic/ir/microinstruction.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/ir/value.h" #include "dynarmic/ir/opcodes.h" diff --git a/externals/dynarmic/src/dynarmic/ir/opcodes.h b/externals/dynarmic/src/dynarmic/ir/opcodes.h index 2af7a9b24f..c11ad549da 100644 --- a/externals/dynarmic/src/dynarmic/ir/opcodes.h +++ b/externals/dynarmic/src/dynarmic/ir/opcodes.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::IR { diff --git a/externals/dynarmic/src/dynarmic/ir/opt/a32_get_set_elimination_pass.cpp b/externals/dynarmic/src/dynarmic/ir/opt/a32_get_set_elimination_pass.cpp index 06e159ba48..499b38b120 100644 --- a/externals/dynarmic/src/dynarmic/ir/opt/a32_get_set_elimination_pass.cpp +++ b/externals/dynarmic/src/dynarmic/ir/opt/a32_get_set_elimination_pass.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,8 +10,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A32/a32_ir_emitter.h" #include "dynarmic/frontend/A32/a32_types.h" diff --git a/externals/dynarmic/src/dynarmic/ir/opt/a64_get_set_elimination_pass.cpp b/externals/dynarmic/src/dynarmic/ir/opt/a64_get_set_elimination_pass.cpp index 4034eebfc3..53e3b27176 100644 --- a/externals/dynarmic/src/dynarmic/ir/opt/a64_get_set_elimination_pass.cpp +++ b/externals/dynarmic/src/dynarmic/ir/opt/a64_get_set_elimination_pass.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A64/a64_types.h" #include "dynarmic/ir/basic_block.h" diff --git a/externals/dynarmic/src/dynarmic/ir/opt/a64_merge_interpret_blocks.cpp b/externals/dynarmic/src/dynarmic/ir/opt/a64_merge_interpret_blocks.cpp index 00a0e1b672..25b7ef0ff1 100644 --- a/externals/dynarmic/src/dynarmic/ir/opt/a64_merge_interpret_blocks.cpp +++ b/externals/dynarmic/src/dynarmic/ir/opt/a64_merge_interpret_blocks.cpp @@ -1,10 +1,13 @@ +// 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 */ #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/frontend/A64/a64_location_descriptor.h" #include "dynarmic/frontend/A64/translate/a64_translate.h" diff --git a/externals/dynarmic/src/dynarmic/ir/opt/constant_propagation_pass.cpp b/externals/dynarmic/src/dynarmic/ir/opt/constant_propagation_pass.cpp index 83530fc453..86ebca87d2 100644 --- a/externals/dynarmic/src/dynarmic/ir/opt/constant_propagation_pass.cpp +++ b/externals/dynarmic/src/dynarmic/ir/opt/constant_propagation_pass.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,10 +8,10 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/safe_ops.h" #include "dynarmic/ir/basic_block.h" diff --git a/externals/dynarmic/src/dynarmic/ir/opt/verification_pass.cpp b/externals/dynarmic/src/dynarmic/ir/opt/verification_pass.cpp index 9252997fcf..c6c2cff231 100644 --- a/externals/dynarmic/src/dynarmic/ir/opt/verification_pass.cpp +++ b/externals/dynarmic/src/dynarmic/ir/opt/verification_pass.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,8 +9,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include #include "dynarmic/ir/basic_block.h" diff --git a/externals/dynarmic/src/dynarmic/ir/terminal.h b/externals/dynarmic/src/dynarmic/ir/terminal.h index d437ffd5b6..130dfc6574 100644 --- a/externals/dynarmic/src/dynarmic/ir/terminal.h +++ b/externals/dynarmic/src/dynarmic/ir/terminal.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 @@ -6,7 +9,7 @@ #pragma once #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/ir/cond.h" #include "dynarmic/ir/location_descriptor.h" diff --git a/externals/dynarmic/src/dynarmic/ir/type.h b/externals/dynarmic/src/dynarmic/ir/type.h index 65fe76dd65..0aaf9d9414 100644 --- a/externals/dynarmic/src/dynarmic/ir/type.h +++ b/externals/dynarmic/src/dynarmic/ir/type.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" namespace Dynarmic::IR { diff --git a/externals/dynarmic/src/dynarmic/ir/value.cpp b/externals/dynarmic/src/dynarmic/ir/value.cpp index 957e78d8fa..6f8a386827 100644 --- a/externals/dynarmic/src/dynarmic/ir/value.cpp +++ b/externals/dynarmic/src/dynarmic/ir/value.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "dynarmic/ir/value.h" -#include +#include "dynarmic/common/assert.h" #include #include "dynarmic/ir/microinstruction.h" diff --git a/externals/dynarmic/src/dynarmic/ir/value.h b/externals/dynarmic/src/dynarmic/ir/value.h index e396641144..4eca82ae94 100644 --- a/externals/dynarmic/src/dynarmic/ir/value.h +++ b/externals/dynarmic/src/dynarmic/ir/value.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 @@ -8,8 +11,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/ir/type.h" diff --git a/externals/dynarmic/tests/A32/fuzz_arm.cpp b/externals/dynarmic/tests/A32/fuzz_arm.cpp index cda424e27d..9498f86d9b 100644 --- a/externals/dynarmic/tests/A32/fuzz_arm.cpp +++ b/externals/dynarmic/tests/A32/fuzz_arm.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -15,7 +18,7 @@ #include #include #include -#include +#include "dynarmic/common/common_types.h" #include "../fuzz_util.h" #include "../rand_int.h" diff --git a/externals/dynarmic/tests/A32/fuzz_thumb.cpp b/externals/dynarmic/tests/A32/fuzz_thumb.cpp index f13c5ee018..dfd5672772 100644 --- a/externals/dynarmic/tests/A32/fuzz_thumb.cpp +++ b/externals/dynarmic/tests/A32/fuzz_thumb.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) 2016 MerryMage * SPDX-License-Identifier: 0BSD @@ -14,7 +17,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "../rand_int.h" #include "../unicorn_emu/a32_unicorn.h" diff --git a/externals/dynarmic/tests/A32/test_thumb_instructions.cpp b/externals/dynarmic/tests/A32/test_thumb_instructions.cpp index dda0fc46b5..b34e60749b 100644 --- a/externals/dynarmic/tests/A32/test_thumb_instructions.cpp +++ b/externals/dynarmic/tests/A32/test_thumb_instructions.cpp @@ -1,10 +1,13 @@ +// 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 */ #include -#include +#include "dynarmic/common/common_types.h" #include "./testenv.h" #include "dynarmic/interface/A32/a32.h" diff --git a/externals/dynarmic/tests/A32/testenv.h b/externals/dynarmic/tests/A32/testenv.h index 4345663b34..b196c5e568 100644 --- a/externals/dynarmic/tests/A32/testenv.h +++ b/externals/dynarmic/tests/A32/testenv.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 @@ -11,8 +14,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/interface/A32/a32.h" diff --git a/externals/dynarmic/tests/A64/fibonacci.cpp b/externals/dynarmic/tests/A64/fibonacci.cpp index 29dcbdcd72..cbb02d1b01 100644 --- a/externals/dynarmic/tests/A64/fibonacci.cpp +++ b/externals/dynarmic/tests/A64/fibonacci.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) 2023 MerryMage * SPDX-License-Identifier: 0BSD @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include #include "dynarmic/interface/A64/a64.h" diff --git a/externals/dynarmic/tests/A64/fp_min_max.cpp b/externals/dynarmic/tests/A64/fp_min_max.cpp index a857005d15..3d997d956d 100644 --- a/externals/dynarmic/tests/A64/fp_min_max.cpp +++ b/externals/dynarmic/tests/A64/fp_min_max.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 @@ -6,7 +9,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "./testenv.h" diff --git a/externals/dynarmic/tests/A64/fuzz_with_unicorn.cpp b/externals/dynarmic/tests/A64/fuzz_with_unicorn.cpp index 27d014f71e..8eda62f21e 100644 --- a/externals/dynarmic/tests/A64/fuzz_with_unicorn.cpp +++ b/externals/dynarmic/tests/A64/fuzz_with_unicorn.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "../fuzz_util.h" #include "../rand_int.h" diff --git a/externals/dynarmic/tests/A64/testenv.h b/externals/dynarmic/tests/A64/testenv.h index 73525242c3..2c5a500f75 100644 --- a/externals/dynarmic/tests/A64/testenv.h +++ b/externals/dynarmic/tests/A64/testenv.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 @@ -8,8 +11,8 @@ #include #include -#include -#include +#include "dynarmic/common/assert.h" +#include "dynarmic/common/common_types.h" #include "dynarmic/interface/A64/a64.h" diff --git a/externals/dynarmic/tests/decoder_tests.cpp b/externals/dynarmic/tests/decoder_tests.cpp index 2028ac98cd..e545309960 100644 --- a/externals/dynarmic/tests/decoder_tests.cpp +++ b/externals/dynarmic/tests/decoder_tests.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) 2020 MerryMage * SPDX-License-Identifier: 0BSD @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include "dynarmic/frontend/A32/decoder/asimd.h" #include "dynarmic/frontend/A32/translate/impl/a32_translate_impl.h" diff --git a/externals/dynarmic/tests/fp/FPToFixed.cpp b/externals/dynarmic/tests/fp/FPToFixed.cpp index 31a684a687..570ebcbbd7 100644 --- a/externals/dynarmic/tests/fp/FPToFixed.cpp +++ b/externals/dynarmic/tests/fp/FPToFixed.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "../rand_int.h" #include "dynarmic/common/fp/fpcr.h" diff --git a/externals/dynarmic/tests/fp/mantissa_util_tests.cpp b/externals/dynarmic/tests/fp/mantissa_util_tests.cpp index cff942c73f..de29d51865 100644 --- a/externals/dynarmic/tests/fp/mantissa_util_tests.cpp +++ b/externals/dynarmic/tests/fp/mantissa_util_tests.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "../rand_int.h" #include "dynarmic/common/fp/mantissa_util.h" diff --git a/externals/dynarmic/tests/fp/unpacked_tests.cpp b/externals/dynarmic/tests/fp/unpacked_tests.cpp index 827b85ac9e..919f21bf2f 100644 --- a/externals/dynarmic/tests/fp/unpacked_tests.cpp +++ b/externals/dynarmic/tests/fp/unpacked_tests.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "../rand_int.h" #include "dynarmic/common/fp/fpcr.h" diff --git a/externals/dynarmic/tests/fuzz_util.cpp b/externals/dynarmic/tests/fuzz_util.cpp index 12dc850b42..351eb1e10f 100644 --- a/externals/dynarmic/tests/fuzz_util.cpp +++ b/externals/dynarmic/tests/fuzz_util.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -9,7 +12,7 @@ #include #include -#include +#include "dynarmic/common/assert.h" #include "./rand_int.h" #include "dynarmic/common/fp/fpcr.h" diff --git a/externals/dynarmic/tests/fuzz_util.h b/externals/dynarmic/tests/fuzz_util.h index 9530307725..a0b8666969 100644 --- a/externals/dynarmic/tests/fuzz_util.h +++ b/externals/dynarmic/tests/fuzz_util.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 @@ -8,7 +11,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" using Vector = std::array; diff --git a/externals/dynarmic/tests/print_info.cpp b/externals/dynarmic/tests/print_info.cpp index a8580b7b03..ef8b87bbd1 100644 --- a/externals/dynarmic/tests/print_info.cpp +++ b/externals/dynarmic/tests/print_info.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -15,7 +18,7 @@ #include #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/llvm_disassemble.h" #include "dynarmic/frontend/A32/a32_location_descriptor.h" diff --git a/externals/dynarmic/tests/rsqrt_test.cpp b/externals/dynarmic/tests/rsqrt_test.cpp index 7adbe39e12..6af71ede64 100644 --- a/externals/dynarmic/tests/rsqrt_test.cpp +++ b/externals/dynarmic/tests/rsqrt_test.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) 2021 MerryMage * SPDX-License-Identifier: 0BSD @@ -6,7 +9,7 @@ #include #include #include -#include +#include "dynarmic/common/common_types.h" #include "dynarmic/common/fp/fpcr.h" #include "dynarmic/common/fp/fpsr.h" diff --git a/externals/dynarmic/tests/test_generator.cpp b/externals/dynarmic/tests/test_generator.cpp index 450d3e3fc4..c8f05d06f8 100644 --- a/externals/dynarmic/tests/test_generator.cpp +++ b/externals/dynarmic/tests/test_generator.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 @@ -15,7 +18,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "./A32/testenv.h" #include "./A64/testenv.h" diff --git a/externals/dynarmic/tests/test_reader.cpp b/externals/dynarmic/tests/test_reader.cpp index 211d26adda..dd7fccc7d7 100644 --- a/externals/dynarmic/tests/test_reader.cpp +++ b/externals/dynarmic/tests/test_reader.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) 2023 MerryMage * SPDX-License-Identifier: 0BSD @@ -10,7 +13,7 @@ #include #include -#include +#include "dynarmic/common/common_types.h" #include "./A32/testenv.h" #include "./A64/testenv.h" diff --git a/externals/dynarmic/tests/unicorn_emu/a32_unicorn.cpp b/externals/dynarmic/tests/unicorn_emu/a32_unicorn.cpp index db704c97df..415ad311e5 100644 --- a/externals/dynarmic/tests/unicorn_emu/a32_unicorn.cpp +++ b/externals/dynarmic/tests/unicorn_emu/a32_unicorn.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -7,7 +10,7 @@ #include -#include +#include "dynarmic/common/assert.h" #include #include "../A32/testenv.h" diff --git a/externals/dynarmic/tests/unicorn_emu/a32_unicorn.h b/externals/dynarmic/tests/unicorn_emu/a32_unicorn.h index d4fe3c41a4..79831b8111 100644 --- a/externals/dynarmic/tests/unicorn_emu/a32_unicorn.h +++ b/externals/dynarmic/tests/unicorn_emu/a32_unicorn.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 @@ -16,7 +19,7 @@ # include #endif -#include +#include "dynarmic/common/common_types.h" #include "../A32/testenv.h" diff --git a/externals/dynarmic/tests/unicorn_emu/a64_unicorn.cpp b/externals/dynarmic/tests/unicorn_emu/a64_unicorn.cpp index 3c202c7c8e..42b72bdb91 100644 --- a/externals/dynarmic/tests/unicorn_emu/a64_unicorn.cpp +++ b/externals/dynarmic/tests/unicorn_emu/a64_unicorn.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) 2018 MerryMage * SPDX-License-Identifier: 0BSD @@ -5,7 +8,7 @@ #include "./a64_unicorn.h" -#include +#include "dynarmic/common/assert.h" #define CHECKED(expr) \ do { \ diff --git a/externals/dynarmic/tests/unicorn_emu/a64_unicorn.h b/externals/dynarmic/tests/unicorn_emu/a64_unicorn.h index 57759605f0..54f09c3b28 100644 --- a/externals/dynarmic/tests/unicorn_emu/a64_unicorn.h +++ b/externals/dynarmic/tests/unicorn_emu/a64_unicorn.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 @@ -16,7 +19,7 @@ # include #endif -#include +#include "dynarmic/common/common_types.h" #include "../A64/testenv.h" From 57f11fbf1ed775f2e3a5ea9660f2b8423574a845 Mon Sep 17 00:00:00 2001 From: crueter Date: Thu, 24 Jul 2025 14:08:18 -0400 Subject: [PATCH 14/22] [desktop] fix links n such Signed-off-by: crueter --- src/yuzu/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index de63305435..52e7500cd3 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -3656,7 +3656,7 @@ void GMainWindow::OpenURL(const QUrl& url) { } void GMainWindow::OnOpenModsPage() { - OpenURL(QUrl(QStringLiteral("https://github.com/yuzu-emu/yuzu/wiki/Switch-Mods"))); + OpenURL(QUrl(QStringLiteral("https://github.com/eden-emulator/yuzu-mod-archive"))); } void GMainWindow::OnOpenQuickstartGuide() { @@ -3664,7 +3664,7 @@ void GMainWindow::OnOpenQuickstartGuide() { } void GMainWindow::OnOpenFAQ() { - OpenURL(QUrl(QStringLiteral("https://eden-emu.dev"))); + OpenURL(QUrl(QStringLiteral("https://yuzu-mirror.github.io/help"))); } void GMainWindow::OnOpenDiscord() { From 7617f743f9701bb76bbc986f6b641903224c73fd Mon Sep 17 00:00:00 2001 From: crueter Date: Thu, 24 Jul 2025 14:00:38 -0400 Subject: [PATCH 15/22] [android] fix erroneous placement of early release fences Signed-off-by: crueter --- .../yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 6ed7fee8a4..8555b334ee 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -448,9 +448,9 @@ class SettingsFragmentPresenter( add(HeaderSetting(R.string.veil_renderer)) add(BooleanSetting.ENABLE_RAII.key) + add(BooleanSetting.RENDERER_EARLY_RELEASE_FENCES.key) add(BooleanSetting.FRAME_INTERPOLATION.key) add(BooleanSetting.RENDERER_FAST_GPU.key) - add(BooleanSetting.RENDERER_EARLY_RELEASE_FENCES.key) add(IntSetting.FAST_GPU_TIME.key) add(IntSetting.RENDERER_SHADER_BACKEND.key) add(IntSetting.RENDERER_NVDEC_EMULATION.key) From bdfcb6c950ad59bb2c4637c741985ab228c8dab6 Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 25 Jul 2025 04:38:50 +0200 Subject: [PATCH 16/22] [shader_recompiler/ Maxwell] ISBERD initial implementation Adds the initial support for Internal Stage Buffer Entry Read - ISBERD, a mechanism used to read internal stage buffer entries with accurate per-stage synchronization. This enables more precise tracking of GPU buffer accesses, improving compatibility with games relying on fine-grained intermediate rendering stages (especially UE4 titles and post-processing heavy engines). Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/124 Co-authored-by: lizzie Co-committed-by: lizzie --- .../impl/internal_stage_buffer_entry_read.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp index 7025f14a2f..59ca4b15a3 100644 --- a/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp +++ b/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp @@ -22,11 +22,14 @@ enum class Shift : u64 { } // Anonymous namespace +// Valid only for GS, TI, VS and trap void TranslatorVisitor::ISBERD(u64 insn) { union { u64 raw; BitField<0, 8, IR::Reg> dest_reg; BitField<8, 8, IR::Reg> src_reg; + BitField<8, 8, u32> src_reg_num; + BitField<24, 8, u32> imm; BitField<31, 1, u64> skew; BitField<32, 1, u64> o; BitField<33, 2, Mode> mode; @@ -45,8 +48,14 @@ void TranslatorVisitor::ISBERD(u64 insn) { if (isberd.shift != Shift::Default) { throw NotImplementedException("Shift {}", isberd.shift.Value()); } - LOG_WARNING(Shader, "(STUBBED) called"); - X(isberd.dest_reg, X(isberd.src_reg)); + //LOG_DEBUG(Shader, "(STUBBED) called {}", insn); + if (isberd.src_reg_num == 0xFF) { + IR::U32 src_imm{ir.Imm32(static_cast(isberd.imm))}; + IR::U32 result{ir.IAdd(X(isberd.src_reg), src_imm)}; + X(isberd.dest_reg, result); + } else { + X(isberd.dest_reg, X(isberd.src_reg)); + } } } // namespace Shader::Maxwell From 35e45fbad3ff6ad19fb862844b8a990e4dedbfff Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 25 Jul 2025 08:37:38 +0200 Subject: [PATCH 17/22] [deps] update dynarmic deps (#110) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/110 Co-authored-by: lizzie Co-committed-by: lizzie --- externals/dynarmic/externals/catch | 2 +- externals/dynarmic/externals/fmt | 2 +- externals/dynarmic/externals/xbyak | 2 +- externals/dynarmic/externals/zycore-c | 2 +- externals/dynarmic/externals/zydis | 2 +- externals/xbyak | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/externals/dynarmic/externals/catch b/externals/dynarmic/externals/catch index 74fcff6e5b..5aa8d11321 160000 --- a/externals/dynarmic/externals/catch +++ b/externals/dynarmic/externals/catch @@ -1 +1 @@ -Subproject commit 74fcff6e5b190fb833a231b7f7c1829e3c3ac54d +Subproject commit 5aa8d113215bd9a97ecc1a2f3fc9506947a2fa57 diff --git a/externals/dynarmic/externals/fmt b/externals/dynarmic/externals/fmt index 02de29e003..35dcc58263 160000 --- a/externals/dynarmic/externals/fmt +++ b/externals/dynarmic/externals/fmt @@ -1 +1 @@ -Subproject commit 02de29e00321787fa515ca60f0f5911e61892dc6 +Subproject commit 35dcc58263d6b55419a5932bd6b0b3029a0a8c00 diff --git a/externals/dynarmic/externals/xbyak b/externals/dynarmic/externals/xbyak index 44a72f3692..12557954c6 160000 --- a/externals/dynarmic/externals/xbyak +++ b/externals/dynarmic/externals/xbyak @@ -1 +1 @@ -Subproject commit 44a72f369268f7d552650891b296693e91db86bb +Subproject commit 12557954c68a780563f9ab9fc24a3a156c96cba1 diff --git a/externals/dynarmic/externals/zycore-c b/externals/dynarmic/externals/zycore-c index 7ad36e5211..75a36c45ae 160000 --- a/externals/dynarmic/externals/zycore-c +++ b/externals/dynarmic/externals/zycore-c @@ -1 +1 @@ -Subproject commit 7ad36e52110b39cfb62b47bfdb6def94ac531309 +Subproject commit 75a36c45ae1ad382b0f4e0ede0af84c11ee69928 diff --git a/externals/dynarmic/externals/zydis b/externals/dynarmic/externals/zydis index 6372690e30..c2d2bab025 160000 --- a/externals/dynarmic/externals/zydis +++ b/externals/dynarmic/externals/zydis @@ -1 +1 @@ -Subproject commit 6372690e30389a94db65ece2d8a1f0a2310475ed +Subproject commit c2d2bab0255e53a7c3e9b615f4eb69449eb942df diff --git a/externals/xbyak b/externals/xbyak index 0d67fd1530..12557954c6 160000 --- a/externals/xbyak +++ b/externals/xbyak @@ -1 +1 @@ -Subproject commit 0d67fd1530016b7c56f3cd74b3fca920f4c3e2b4 +Subproject commit 12557954c68a780563f9ab9fc24a3a156c96cba1 From 5de03f47df1275058c3f42075ee4252662a4c9e5 Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 25 Jul 2025 09:52:12 +0200 Subject: [PATCH 18/22] [renderdoc] update (#100) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/100 Co-authored-by: lizzie Co-committed-by: lizzie --- externals/renderdoc/renderdoc_app.h | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/externals/renderdoc/renderdoc_app.h b/externals/renderdoc/renderdoc_app.h index f4eb12526e..3fdc233165 100644 --- a/externals/renderdoc/renderdoc_app.h +++ b/externals/renderdoc/renderdoc_app.h @@ -7,7 +7,7 @@ /****************************************************************************** * The MIT License (MIT) * - * Copyright (c) 2019-2023 Baldur Karlsson + * Copyright (c) 2019-2025 Baldur Karlsson * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -41,8 +41,12 @@ #if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) #define RENDERDOC_CC __cdecl -#else +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__sun__) #define RENDERDOC_CC +#elif defined(__APPLE__) +#define RENDERDOC_CC +#else +#error "Unknown platform" #endif #ifdef __cplusplus @@ -357,14 +361,14 @@ typedef enum RENDERDOC_OverlayBits eRENDERDOC_Overlay_FrameNumber | eRENDERDOC_Overlay_CaptureList), // Enable all bits - eRENDERDOC_Overlay_All = ~0U, + eRENDERDOC_Overlay_All = 0x7ffffff, // Disable all bits eRENDERDOC_Overlay_None = 0, } RENDERDOC_OverlayBits; // returns the overlay bits that have been set -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetOverlayBits)(); +typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetOverlayBits)(void); // sets the overlay bits with an and & or mask typedef void(RENDERDOC_CC *pRENDERDOC_MaskOverlayBits)(uint32_t And, uint32_t Or); @@ -375,7 +379,7 @@ typedef void(RENDERDOC_CC *pRENDERDOC_MaskOverlayBits)(uint32_t And, uint32_t Or // injected hooks and shut down. Behaviour is undefined if this is called // after any API functions have been called, and there is still no guarantee of // success. -typedef void(RENDERDOC_CC *pRENDERDOC_RemoveHooks)(); +typedef void(RENDERDOC_CC *pRENDERDOC_RemoveHooks)(void); // DEPRECATED: compatibility for code compiled against pre-1.4.1 headers. typedef pRENDERDOC_RemoveHooks pRENDERDOC_Shutdown; @@ -385,7 +389,7 @@ typedef pRENDERDOC_RemoveHooks pRENDERDOC_Shutdown; // If you use your own crash handler and don't want RenderDoc's handler to // intercede, you can call this function to unload it and any unhandled // exceptions will pass to the next handler. -typedef void(RENDERDOC_CC *pRENDERDOC_UnloadCrashHandler)(); +typedef void(RENDERDOC_CC *pRENDERDOC_UnloadCrashHandler)(void); // Sets the capture file path template // @@ -407,14 +411,14 @@ typedef void(RENDERDOC_CC *pRENDERDOC_UnloadCrashHandler)(); typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureFilePathTemplate)(const char *pathtemplate); // returns the current capture path template, see SetCaptureFileTemplate above, as a UTF-8 string -typedef const char *(RENDERDOC_CC *pRENDERDOC_GetCaptureFilePathTemplate)(); +typedef const char *(RENDERDOC_CC *pRENDERDOC_GetCaptureFilePathTemplate)(void); // DEPRECATED: compatibility for code compiled against pre-1.1.2 headers. typedef pRENDERDOC_SetCaptureFilePathTemplate pRENDERDOC_SetLogFilePathTemplate; typedef pRENDERDOC_GetCaptureFilePathTemplate pRENDERDOC_GetLogFilePathTemplate; // returns the number of captures that have been made -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetNumCaptures)(); +typedef uint32_t(RENDERDOC_CC *pRENDERDOC_GetNumCaptures)(void); // This function returns the details of a capture, by index. New captures are added // to the end of the list. @@ -445,7 +449,7 @@ typedef void(RENDERDOC_CC *pRENDERDOC_SetCaptureFileComments)(const char *filePa const char *comments); // returns 1 if the RenderDoc UI is connected to this application, 0 otherwise -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsTargetControlConnected)(); +typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsTargetControlConnected)(void); // DEPRECATED: compatibility for code compiled against pre-1.1.1 headers. // This was renamed to IsTargetControlConnected in API 1.1.1, the old typedef is kept here for @@ -477,7 +481,7 @@ typedef void(RENDERDOC_CC *pRENDERDOC_GetAPIVersion)(int *major, int *minor, int // This will return 1 if the request was successfully passed on, though it's not guaranteed that // the UI will be on top in all cases depending on OS rules. It will return 0 if there is no current // target control connection to make such a request, or if there was another error -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_ShowReplayUI)(); +typedef uint32_t(RENDERDOC_CC *pRENDERDOC_ShowReplayUI)(void); ////////////////////////////////////////////////////////////////////////// // Capturing functions @@ -508,7 +512,7 @@ typedef void(RENDERDOC_CC *pRENDERDOC_SetActiveWindow)(RENDERDOC_DevicePointer d RENDERDOC_WindowHandle wndHandle); // capture the next frame on whichever window and API is currently considered active -typedef void(RENDERDOC_CC *pRENDERDOC_TriggerCapture)(); +typedef void(RENDERDOC_CC *pRENDERDOC_TriggerCapture)(void); // capture the next N frames on whichever window and API is currently considered active typedef void(RENDERDOC_CC *pRENDERDOC_TriggerMultiFrameCapture)(uint32_t numFrames); @@ -537,7 +541,7 @@ typedef void(RENDERDOC_CC *pRENDERDOC_StartFrameCapture)(RENDERDOC_DevicePointer // Returns whether or not a frame capture is currently ongoing anywhere. // // This will return 1 if a capture is ongoing, and 0 if there is no capture running -typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsFrameCapturing)(); +typedef uint32_t(RENDERDOC_CC *pRENDERDOC_IsFrameCapturing)(void); // Ends capturing immediately. // From 410e78229113070835f1fd62074431f85e2b544a Mon Sep 17 00:00:00 2001 From: Maufeat Date: Fri, 25 Jul 2025 19:58:35 +0200 Subject: [PATCH 19/22] [nvnflinger] unstub AdjustRefcount (#120) Co-authored-by: Maufeat Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/120 Co-authored-by: Maufeat Co-committed-by: Maufeat --- .../nvnflinger/buffer_queue_producer.cpp | 20 +++++++++------- .../service/nvnflinger/hos_binder_driver.cpp | 9 +++++-- .../nvnflinger/hos_binder_driver_server.cpp | 24 +++++++++++++++++++ .../nvnflinger/hos_binder_driver_server.h | 12 ++++++++-- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp b/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp index 4317aee1c4..1bb88a45fa 100644 --- a/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp +++ b/src/core/hle/service/nvnflinger/buffer_queue_producer.cpp @@ -728,22 +728,26 @@ Status BufferQueueProducer::Connect(const std::shared_ptr& li return status; } +// https://android.googlesource.com/platform/frameworks/native/%2B/master/libs/gui/BufferQueueProducer.cpp#1457 Status BufferQueueProducer::Disconnect(NativeWindowApi api) { - LOG_DEBUG(Service_Nvnflinger, "api = {}", api); + LOG_DEBUG(Service_Nvnflinger, "disconnect api = {}", api); - Status status = Status::NoError; std::shared_ptr listener; + Status status = Status::NoError; { std::scoped_lock lock{core->mutex}; - core->WaitWhileAllocatingLocked(); if (core->is_abandoned) { - // Disconnecting after the surface has been abandoned is a no-op. return Status::NoError; } + if (core->connected_api == NativeWindowApi::NoConnectedApi) { + LOG_DEBUG(Service_Nvnflinger, "disconnect: not connected (req = {})", api); + return Status::NoInit; + } + switch (api) { case NativeWindowApi::Egl: case NativeWindowApi::Cpu: @@ -758,20 +762,20 @@ Status BufferQueueProducer::Disconnect(NativeWindowApi api) { buffer_wait_event->Signal(); listener = core->consumer_listener; } else { - LOG_ERROR(Service_Nvnflinger, "still connected to another api (cur = {} req = {})", + LOG_ERROR(Service_Nvnflinger, + "disconnect: still connected to another api (cur = {} req = {})", core->connected_api, api); status = Status::BadValue; } break; default: - LOG_ERROR(Service_Nvnflinger, "unknown api = {}", api); + LOG_ERROR(Service_Nvnflinger, "disconnect: unknown api = {}", api); status = Status::BadValue; break; } } - // Call back without lock held - if (listener != nullptr) { + if (listener) { listener->OnBuffersReleased(); } diff --git a/src/core/hle/service/nvnflinger/hos_binder_driver.cpp b/src/core/hle/service/nvnflinger/hos_binder_driver.cpp index 8629a2e89b..d30aa3717d 100644 --- a/src/core/hle/service/nvnflinger/hos_binder_driver.cpp +++ b/src/core/hle/service/nvnflinger/hos_binder_driver.cpp @@ -40,17 +40,22 @@ Result IHOSBinderDriver::TransactParcel(s32 binder_id, u32 transaction_id, } Result IHOSBinderDriver::AdjustRefcount(s32 binder_id, s32 addval, s32 type) { - LOG_WARNING(Service_VI, "(STUBBED) called id={}, addval={}, type={}", binder_id, addval, type); + LOG_DEBUG(Service_VI, "called id={}, addval={}, type={}", binder_id, addval, type); + R_UNLESS(type == 0 || type == 1, ResultUnknown); + m_server->AdjustRefcount(binder_id, addval, type == 1); R_SUCCEED(); } Result IHOSBinderDriver::GetNativeHandle(s32 binder_id, u32 type_id, OutCopyHandle out_handle) { - LOG_WARNING(Service_VI, "(STUBBED) called id={}, type_id={}", binder_id, type_id); + LOG_DEBUG(Service_VI, "called id={}, type_id={}", binder_id, type_id); const auto binder = m_server->TryGetBinder(binder_id); R_UNLESS(binder != nullptr, ResultUnknown); + auto native_handle = binder->GetNativeHandle(type_id); + R_UNLESS(native_handle != nullptr, ResultUnknown); + *out_handle = binder->GetNativeHandle(type_id); R_SUCCEED(); diff --git a/src/core/hle/service/nvnflinger/hos_binder_driver_server.cpp b/src/core/hle/service/nvnflinger/hos_binder_driver_server.cpp index 29addda44d..b85f1a4fa4 100644 --- a/src/core/hle/service/nvnflinger/hos_binder_driver_server.cpp +++ b/src/core/hle/service/nvnflinger/hos_binder_driver_server.cpp @@ -17,6 +17,7 @@ s32 HosBinderDriverServer::RegisterBinder(std::shared_ptr&& bi last_id++; binders[last_id] = std::move(binder); + refcounts[last_id] = {}; // strong = 1, weak = 0 return last_id; } @@ -25,6 +26,29 @@ void HosBinderDriverServer::UnregisterBinder(s32 binder_id) { std::scoped_lock lk{lock}; binders.erase(binder_id); + refcounts.erase(binder_id); +} + +void HosBinderDriverServer::AdjustRefcount(s32 binder_id, s32 delta, bool is_weak) { + std::scoped_lock lk{lock}; + + auto search_rc = refcounts.find(binder_id); + if (search_rc == refcounts.end()) { + LOG_WARNING(Service_VI, "AdjustRefcount called for unknown binder id {}", binder_id); + return; + } + + auto& rc = search_rc->second; + s32& counter = is_weak ? rc.weak : rc.strong; + counter += delta; + + if (counter < 0) + counter = 0; + + if (rc.strong == 0 && rc.weak == 0) { + binders.erase(binder_id); + refcounts.erase(search_rc); + } } std::shared_ptr HosBinderDriverServer::TryGetBinder(s32 id) const { diff --git a/src/core/hle/service/nvnflinger/hos_binder_driver_server.h b/src/core/hle/service/nvnflinger/hos_binder_driver_server.h index d72b50833d..f4b4060115 100644 --- a/src/core/hle/service/nvnflinger/hos_binder_driver_server.h +++ b/src/core/hle/service/nvnflinger/hos_binder_driver_server.h @@ -26,10 +26,18 @@ public: std::shared_ptr TryGetBinder(s32 id) const; + void AdjustRefcount(s32 binder_id, s32 delta, bool is_weak); + private: - std::unordered_map> binders; + struct RefCounts { + s32 strong{1}; + s32 weak{0}; + }; + mutable std::mutex lock; - s32 last_id{}; + s32 last_id = 0; + std::unordered_map> binders; + std::unordered_map refcounts; }; } // namespace Service::Nvnflinger From 8dd0e8434385e396779ea9ddc792c3b741f83d59 Mon Sep 17 00:00:00 2001 From: crueter Date: Sat, 26 Jul 2025 03:59:33 +0200 Subject: [PATCH 20/22] [android, ci] disable workflows, update ERF desc, default flush_lines to on (#132) title says it all Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/132 --- .github/workflows/build.yml | 6 +++--- .github/workflows/trigger_release.yml | 6 +++--- README.md | 5 ++--- src/android/app/src/main/res/values/strings.xml | 2 +- src/common/settings.h | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 941f94ae26..ac67f73d00 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ # some stuff needs cleaned up etc name: eden-build -on: - push: - branches: [ "master" ] +#on: +# push: +# branches: [ "master" ] # TODO: combine build.yml into trigger_release.yml jobs: diff --git a/.github/workflows/trigger_release.yml b/.github/workflows/trigger_release.yml index 638ab3424b..645b21e25a 100644 --- a/.github/workflows/trigger_release.yml +++ b/.github/workflows/trigger_release.yml @@ -1,8 +1,8 @@ name: Build Application and Make Release -on: - push: - tags: [ "*" ] +#on: +# push: +# tags: [ "*" ] permissions: contents: write diff --git a/README.md b/README.md index 724e567516..8e8c769070 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,7 @@
-

Eden is a open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team. -
+

Eden is an open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team. It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.

@@ -76,7 +75,7 @@ Any donations received will go towards things such as: * Additional hardware (e.g. GPUs as needed to improve rendering support, other peripherals to add support for, etc.) * CI Infrastructure -If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/edenemu), once public, and talk to Camille or any of our other developers. +If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/edenemu) and talk to Camille or any of our other developers. ## License diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index c78487e327..324deaa255 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -89,7 +89,7 @@ Enhanced Frame Pacing Ensures smooth and consistent frame delivery by synchronizing the timing between frames, reducing stuttering and uneven animation. Ideal for games that experience frame timing instability or micro-stutters during gameplay. Release fences early - Some games may require this to get past 0FPS errors, such as DKCR:HD, Subnautica, and Ori 2. + Some games may require this to get past 0FPS errors, such as DKCR:HD, Subnautica, and Ori 2. Other games, notably Unreal Engine games, may work improperly or not boot with this enabled. CPU and Memory Synchronize Core Speed diff --git a/src/common/settings.h b/src/common/settings.h index e3c2bd57cc..702926d82a 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -705,7 +705,7 @@ struct Values { // Miscellaneous Setting log_filter{linkage, "*:Info", "log_filter", Category::Miscellaneous}; - Setting log_flush_lines{linkage, false, "flush_lines", Category::Miscellaneous}; + Setting log_flush_lines{linkage, true, "flush_lines", Category::Miscellaneous, Specialization::Default, true, true}; Setting censor_username{linkage, true, "censor_username", Category::Miscellaneous}; Setting use_dev_keys{linkage, false, "use_dev_keys", Category::Miscellaneous}; Setting first_launch{linkage, true, "first_launch", Category::Miscellaneous}; From ac675c52966f656dd308346b982393199d32ead3 Mon Sep 17 00:00:00 2001 From: Gamer64 Date: Sat, 26 Jul 2025 04:11:40 +0200 Subject: [PATCH 21/22] [core]: Custom CPU Ticks rewrite (#118) For now this is for testing purposes Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/118 Co-authored-by: Gamer64 Co-committed-by: Gamer64 --- src/core/core_timing.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index c4ea15c1dd..ed07e80ce2 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp @@ -174,15 +174,21 @@ void CoreTiming::UnscheduleEvent(const std::shared_ptr& event_type, } } +static u64 GetNextTickCount(u64 next_ticks) { + if (Settings::values.use_custom_cpu_ticks.GetValue()) { + return Settings::values.cpu_ticks.GetValue(); + } + return next_ticks; +} + void CoreTiming::AddTicks(u64 ticks_to_add) { - cpu_ticks = Settings::values.use_custom_cpu_ticks.GetValue() - ? Settings::values.cpu_ticks.GetValue() - : cpu_ticks + ticks_to_add; - downcount -= static_cast(cpu_ticks); + const u64 ticks = GetNextTickCount(ticks_to_add); + cpu_ticks += ticks; + downcount -= static_cast(ticks); } void CoreTiming::Idle() { - cpu_ticks += 1000U; + AddTicks(1000U); } void CoreTiming::ResetTicks() { From c7c2ed7b46b82ce1fe85a45b32a8fe9de72d3abb Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 26 Jul 2025 05:58:04 +0200 Subject: [PATCH 22/22] [vk] copy incompatible alpha patch 1.5(2) (#123) Avoid copy size incompatible textures and reinterpret it instead. Uses existing logic to properly re-interpret to a compatible texture. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/123 Co-authored-by: lizzie Co-committed-by: lizzie --- .../renderer_vulkan/vk_rasterizer.cpp | 8 +++++ .../renderer_vulkan/vk_texture_cache.cpp | 13 ++++++++ src/video_core/surface.cpp | 32 +++++++++++++++++++ src/video_core/surface.h | 2 ++ 4 files changed, 55 insertions(+) diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 33b90a1ec9..92992c1ee7 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -518,6 +518,14 @@ void RasterizerVulkan::DispatchCompute() { } const std::array dim{qmd.grid_dim_x, qmd.grid_dim_y, qmd.grid_dim_z}; scheduler.RequestOutsideRenderPassOperationContext(); + static constexpr VkMemoryBarrier READ_BARRIER{ + .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, + .pNext = nullptr, + .srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT, + .dstAccessMask = VK_ACCESS_MEMORY_READ_BIT, + }; + scheduler.Record([](vk::CommandBuffer cmdbuf) { cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + 0, READ_BARRIER); }); scheduler.Record([dim](vk::CommandBuffer cmdbuf) { cmdbuf.Dispatch(dim[0], dim[1], dim[2]); }); } diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 022a9ae572..6272d6231a 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -38,6 +38,7 @@ using VideoCommon::ImageInfo; using VideoCommon::ImageType; using VideoCommon::SubresourceRange; using VideoCore::Surface::BytesPerBlock; +using VideoCore::Surface::HasAlpha; using VideoCore::Surface::IsPixelFormatASTC; using VideoCore::Surface::IsPixelFormatInteger; using VideoCore::Surface::SurfaceType; @@ -1323,6 +1324,7 @@ void TextureCacheRuntime::ConvertImage(Framebuffer* dst, ImageView& dst_view, Im case PixelFormat::D32_FLOAT_S8_UINT: case PixelFormat::Invalid: default: + LOG_ERROR(Render_Vulkan, "Unimplemented texture conversion from {} to {} format type", src_view.format, dst_view.format); break; } } @@ -1364,6 +1366,17 @@ bool TextureCacheRuntime::IsFormatScalable(PixelFormat format) { void TextureCacheRuntime::CopyImage(Image& dst, Image& src, std::span copies) { + // As per the size-compatible formats section of vulkan, copy manually via ReinterpretImage + // these images that aren't size-compatible + if (HasAlpha(src.info.format) != HasAlpha(dst.info.format) || + BytesPerBlock(src.info.format) != BytesPerBlock(dst.info.format)) { + auto oneCopy = VideoCommon::ImageCopy{ + .src_offset = VideoCommon::Offset3D(0, 0, 0), + .dst_offset = VideoCommon::Offset3D(0, 0, 0), + .extent = dst.info.size + }; + return ReinterpretImage(dst, src, std::span{&oneCopy, 1}); + } boost::container::small_vector vk_copies(copies.size()); const VkImageAspectFlags aspect_mask = dst.AspectMask(); ASSERT(aspect_mask == src.AspectMask()); diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp index 9055b1b929..c791bfa4e4 100644 --- a/src/video_core/surface.cpp +++ b/src/video_core/surface.cpp @@ -237,6 +237,38 @@ SurfaceType GetFormatType(PixelFormat pixel_format) { return SurfaceType::Invalid; } +bool HasAlpha(PixelFormat pixel_format) { + switch (pixel_format) { + case PixelFormat::A8B8G8R8_UNORM: + case PixelFormat::A8B8G8R8_SNORM: + case PixelFormat::A8B8G8R8_SINT: + case PixelFormat::A8B8G8R8_UINT: + case PixelFormat::A1R5G5B5_UNORM: + case PixelFormat::A2B10G10R10_UNORM: + case PixelFormat::A2B10G10R10_UINT: + case PixelFormat::A2R10G10B10_UNORM: + case PixelFormat::A1B5G5R5_UNORM: + case PixelFormat::A5B5G5R1_UNORM: + case PixelFormat::R16G16B16A16_FLOAT: + case PixelFormat::R16G16B16A16_UNORM: + case PixelFormat::R16G16B16A16_SNORM: + case PixelFormat::R16G16B16A16_SINT: + case PixelFormat::R16G16B16A16_UINT: + case PixelFormat::R32G32B32A32_UINT: + case PixelFormat::BC1_RGBA_UNORM: + case PixelFormat::B8G8R8A8_UNORM: + case PixelFormat::R32G32B32A32_FLOAT: + case PixelFormat::R32G32B32A32_SINT: + case PixelFormat::A8B8G8R8_SRGB: + case PixelFormat::B8G8R8A8_SRGB: + case PixelFormat::BC1_RGBA_SRGB: + case PixelFormat::A4B4G4R4_UNORM: + return true; + default: + return false; + } +} + bool IsPixelFormatASTC(PixelFormat format) { switch (format) { case PixelFormat::ASTC_2D_4X4_UNORM: diff --git a/src/video_core/surface.h b/src/video_core/surface.h index ec9cd2fbf0..4ccb24f27d 100644 --- a/src/video_core/surface.h +++ b/src/video_core/surface.h @@ -503,6 +503,8 @@ PixelFormat PixelFormatFromGPUPixelFormat(Service::android::PixelFormat format); SurfaceType GetFormatType(PixelFormat pixel_format); +bool HasAlpha(PixelFormat pixel_format); + bool IsPixelFormatASTC(PixelFormat format); bool IsPixelFormatBCn(PixelFormat format);