Browse Source

Add an option to control Host MMU Emulation

pull/324/head
MaranBr 7 months ago
committed by crueter
parent
commit
7b5bfb0743
  1. 3
      src/common/settings.cpp
  2. 9
      src/common/settings.h
  3. 4
      src/core/arm/dynarmic/arm_dynarmic_32.cpp
  4. 4
      src/core/arm/dynarmic/arm_dynarmic_64.cpp
  5. 2
      src/yuzu/configuration/shared_translation.cpp

3
src/common/settings.cpp

@ -158,6 +158,9 @@ bool IsFastmemEnabled() {
if (values.cpu_debug_mode) {
return static_cast<bool>(values.cpuopt_fastmem);
}
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) {
return static_cast<bool>(values.cpuopt_unsafe_mmu);
}
return true;
}

9
src/common/settings.h

@ -299,6 +299,15 @@ struct Values {
Category::CpuDebug};
Setting<bool> cpuopt_ignore_memory_aborts{linkage, true, "cpuopt_ignore_memory_aborts",
Category::CpuDebug};
SwitchableSetting<bool> cpuopt_unsafe_mmu{linkage,
#if defined(_WIN32) || defined(__linux__) || defined(__ANDROID__)
true,
#else
false,
#endif
"cpuopt_unsafe_mmu",
Category::CpuUnsafe};
SwitchableSetting<bool> cpuopt_unsafe_unfuse_fma{linkage, true, "cpuopt_unsafe_unfuse_fma",
Category::CpuUnsafe};
SwitchableSetting<bool> cpuopt_unsafe_reduce_fp_error{

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

@ -272,6 +272,10 @@ std::shared_ptr<Dynarmic::A32::Jit> ArmDynarmic32::MakeJit(Common::PageTable* pa
// Unsafe optimizations
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) {
config.unsafe_optimizations = true;
if (!Settings::values.cpuopt_unsafe_mmu) {
config.fastmem_pointer = nullptr;
config.fastmem_exclusive_access = false;
}
if (Settings::values.cpuopt_unsafe_unfuse_fma) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
}

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

@ -330,6 +330,10 @@ std::shared_ptr<Dynarmic::A64::Jit> ArmDynarmic64::MakeJit(Common::PageTable* pa
// Unsafe optimizations
if (Settings::values.cpu_accuracy.GetValue() == Settings::CpuAccuracy::Unsafe) {
config.unsafe_optimizations = true;
if (!Settings::values.cpuopt_unsafe_mmu) {
config.fastmem_pointer = nullptr;
config.fastmem_exclusive_access = false;
}
if (Settings::values.cpuopt_unsafe_unfuse_fma) {
config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
}

2
src/yuzu/configuration/shared_translation.cpp

@ -118,6 +118,8 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent)
// Cpu Debug
// Cpu Unsafe
INSERT(Settings, cpuopt_unsafe_mmu, tr("Enable Host MMU Emulation"),
tr("This optimization speeds up memory accesses by the guest program.\nEnabling it causes guest memory reads/writes to be done directly into memory and make use of Host's MMU.\nDisabling this forces all memory accesses to use Software MMU Emulation."));
INSERT(
Settings,
cpuopt_unsafe_unfuse_fma,

Loading…
Cancel
Save