Browse Source

revert 22847ec78a (#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 <shinmegumi@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/331
Co-authored-by: Shinmegumi <shinmegumi@eden-emu.dev>
Co-committed-by: Shinmegumi <shinmegumi@eden-emu.dev>
release/0.0.3
Shinmegumi 4 months ago
committed by crueter
parent
commit
5ce16c4b05
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 20
      src/core/arm/dynarmic/arm_dynarmic_32.cpp
  2. 20
      src/core/arm/dynarmic/arm_dynarmic_64.cpp

20
src/core/arm/dynarmic/arm_dynarmic_32.cpp

@ -269,13 +269,8 @@ std::shared_ptr<Dynarmic::A32::Jit> ArmDynarmic32::MakeJit(Common::PageTable* pa
config.check_halt_on_memory_access = true; config.check_halt_on_memory_access = true;
} }
} else { } 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 // Unsafe optimizations
case Settings::CpuAccuracy::Unsafe:
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) {
config.unsafe_optimizations = true; config.unsafe_optimizations = true;
if (Settings::values.cpuopt_unsafe_unfuse_fma) { if (Settings::values.cpuopt_unsafe_unfuse_fma) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
@ -292,22 +287,21 @@ std::shared_ptr<Dynarmic::A32::Jit> ArmDynarmic32::MakeJit(Common::PageTable* pa
if (Settings::values.cpuopt_unsafe_ignore_global_monitor) { if (Settings::values.cpuopt_unsafe_ignore_global_monitor) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
} }
break;
}
// Curated optimizations // Curated optimizations
case Settings::CpuAccuracy::Auto:
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Auto) {
config.unsafe_optimizations = true; config.unsafe_optimizations = true;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
break;
}
// Paranoia mode for debugging optimizations // Paranoia mode for debugging optimizations
case Settings::CpuAccuracy::Paranoid:
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Paranoid) {
config.unsafe_optimizations = false; config.unsafe_optimizations = false;
config.optimizations = Dynarmic::no_optimizations; config.optimizations = Dynarmic::no_optimizations;
break;
default:
break;
} }
} }

20
src/core/arm/dynarmic/arm_dynarmic_64.cpp

@ -327,13 +327,8 @@ std::shared_ptr<Dynarmic::A64::Jit> ArmDynarmic64::MakeJit(Common::PageTable* pa
config.check_halt_on_memory_access = true; config.check_halt_on_memory_access = true;
} }
} else { } else {
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__sun__)
config.fastmem_pointer = std::nullopt;
config.fastmem_exclusive_access = false;
#endif
// Unsafe optimizations // 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; config.unsafe_optimizations = true;
if (Settings::values.cpuopt_unsafe_unfuse_fma) { if (Settings::values.cpuopt_unsafe_unfuse_fma) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
@ -350,21 +345,20 @@ std::shared_ptr<Dynarmic::A64::Jit> ArmDynarmic64::MakeJit(Common::PageTable* pa
if (Settings::values.cpuopt_unsafe_ignore_global_monitor) { if (Settings::values.cpuopt_unsafe_ignore_global_monitor) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
} }
break;
}
// Curated optimizations // Curated optimizations
case Settings::CpuAccuracy::Auto:
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Auto) {
config.unsafe_optimizations = true; config.unsafe_optimizations = true;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
config.fastmem_address_space_bits = 64; config.fastmem_address_space_bits = 64;
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor; config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreGlobalMonitor;
break;
}
// Paranoia mode for debugging optimizations // Paranoia mode for debugging optimizations
case Settings::CpuAccuracy::Paranoid:
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Paranoid) {
config.unsafe_optimizations = false; config.unsafe_optimizations = false;
config.optimizations = Dynarmic::no_optimizations; config.optimizations = Dynarmic::no_optimizations;
break;
default:
break;
} }
} }

Loading…
Cancel
Save