|
|
@ -269,8 +269,13 @@ 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
|
|
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) { |
|
|
|
|
|
|
|
|
case 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; |
|
|
@ -287,21 +292,22 @@ 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
|
|
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Auto) { |
|
|
|
|
|
|
|
|
case 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
|
|
|
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Paranoid) { |
|
|
|
|
|
|
|
|
case Settings::CpuAccuracy::Paranoid: |
|
|
config.unsafe_optimizations = false; |
|
|
config.unsafe_optimizations = false; |
|
|
config.optimizations = Dynarmic::no_optimizations; |
|
|
config.optimizations = Dynarmic::no_optimizations; |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|