Add an option to control Host MMU Emulation
This commit is contained in:
parent
eb80a30c42
commit
7b5bfb0743
5 changed files with 22 additions and 0 deletions
|
@ -158,6 +158,9 @@ bool IsFastmemEnabled() {
|
||||||
if (values.cpu_debug_mode) {
|
if (values.cpu_debug_mode) {
|
||||||
return static_cast<bool>(values.cpuopt_fastmem);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -299,6 +299,15 @@ struct Values {
|
||||||
Category::CpuDebug};
|
Category::CpuDebug};
|
||||||
Setting<bool> cpuopt_ignore_memory_aborts{linkage, true, "cpuopt_ignore_memory_aborts",
|
Setting<bool> cpuopt_ignore_memory_aborts{linkage, true, "cpuopt_ignore_memory_aborts",
|
||||||
Category::CpuDebug};
|
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",
|
SwitchableSetting<bool> cpuopt_unsafe_unfuse_fma{linkage, true, "cpuopt_unsafe_unfuse_fma",
|
||||||
Category::CpuUnsafe};
|
Category::CpuUnsafe};
|
||||||
SwitchableSetting<bool> cpuopt_unsafe_reduce_fp_error{
|
SwitchableSetting<bool> cpuopt_unsafe_reduce_fp_error{
|
||||||
|
|
|
@ -272,6 +272,10 @@ std::shared_ptr<Dynarmic::A32::Jit> ArmDynarmic32::MakeJit(Common::PageTable* pa
|
||||||
// Unsafe optimizations
|
// Unsafe optimizations
|
||||||
if (Settings::values.cpu_accuracy.GetValue() == 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_mmu) {
|
||||||
|
config.fastmem_pointer = nullptr;
|
||||||
|
config.fastmem_exclusive_access = false;
|
||||||
|
}
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -330,6 +330,10 @@ std::shared_ptr<Dynarmic::A64::Jit> ArmDynarmic64::MakeJit(Common::PageTable* pa
|
||||||
// Unsafe optimizations
|
// Unsafe optimizations
|
||||||
if (Settings::values.cpu_accuracy.GetValue() == 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_mmu) {
|
||||||
|
config.fastmem_pointer = nullptr;
|
||||||
|
config.fastmem_exclusive_access = false;
|
||||||
|
}
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,8 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent)
|
||||||
// Cpu Debug
|
// Cpu Debug
|
||||||
|
|
||||||
// Cpu Unsafe
|
// 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(
|
INSERT(
|
||||||
Settings,
|
Settings,
|
||||||
cpuopt_unsafe_unfuse_fma,
|
cpuopt_unsafe_unfuse_fma,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue