From eb80a30c42e956ff26076575b20642e330217b2d Mon Sep 17 00:00:00 2001 From: Shinmegumi Date: Wed, 27 Aug 2025 15:12:16 +0200 Subject: [PATCH] revert 22847ec78a4369497855672db71977ead871c49d (#331) revert [jit] Disable fastmem (by default) on FreeBSD, Solaris and OpenBSD due to subpar timings of SIGSEGV (#319) According to MaranBR, this should have never been merged and should have been closed instead as they iterated on it in 324. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/319 Reviewed-by: Shinmegumi Co-authored-by: lizzie Co-committed-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/331 Co-authored-by: Shinmegumi Co-committed-by: Shinmegumi --- src/core/arm/dynarmic/arm_dynarmic_32.cpp | 20 +++++++------------- src/core/arm/dynarmic/arm_dynarmic_64.cpp | 20 +++++++------------- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 798623a5fa..db159388bf 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp @@ -269,13 +269,8 @@ std::shared_ptr ArmDynarmic32::MakeJit(Common::PageTable* pa config.check_halt_on_memory_access = true; } } else { -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__) - config.fastmem_pointer = std::nullopt; - config.fastmem_exclusive_access = false; -#endif - switch (Settings::values.cpu_accuracy.GetValue()) { // Unsafe optimizations - case Settings::CpuAccuracy::Unsafe: + if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) { config.unsafe_optimizations = true; if (Settings::values.cpuopt_unsafe_unfuse_fma) { config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; @@ -292,22 +287,21 @@ std::shared_ptr ArmDynarmic32::MakeJit(Common::PageTable* pa if (Settings::values.cpuopt_unsafe_ignore_global_monitor) { config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; } - break; + } + // Curated optimizations - case Settings::CpuAccuracy::Auto: + if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Auto) { config.unsafe_optimizations = true; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; - break; + } + // Paranoia mode for debugging optimizations - case Settings::CpuAccuracy::Paranoid: + if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Paranoid) { config.unsafe_optimizations = false; config.optimizations = Dynarmic::no_optimizations; - break; - default: - break; } } diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 7b59ce2633..dcff0ddf3f 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp @@ -327,13 +327,8 @@ std::shared_ptr ArmDynarmic64::MakeJit(Common::PageTable* pa config.check_halt_on_memory_access = true; } } else { -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__) - config.fastmem_pointer = std::nullopt; - config.fastmem_exclusive_access = false; -#endif // Unsafe optimizations - switch(Settings::values.cpu_accuracy.GetValue()) { - case Settings::CpuAccuracy::Unsafe: + if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) { config.unsafe_optimizations = true; if (Settings::values.cpuopt_unsafe_unfuse_fma) { config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; @@ -350,21 +345,20 @@ std::shared_ptr ArmDynarmic64::MakeJit(Common::PageTable* pa if (Settings::values.cpuopt_unsafe_ignore_global_monitor) { config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; } - break; + } + // Curated optimizations - case Settings::CpuAccuracy::Auto: + if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Auto) { config.unsafe_optimizations = true; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; config.fastmem_address_space_bits = 64; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; - break; + } + // Paranoia mode for debugging optimizations - case Settings::CpuAccuracy::Paranoid: + if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Paranoid) { config.unsafe_optimizations = false; config.optimizations = Dynarmic::no_optimizations; - break; - default: - break; } }