|
|
|
@ -143,29 +143,31 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable& |
|
|
|
config.wall_clock_cntpct = uses_wall_clock; |
|
|
|
|
|
|
|
// Safe optimizations
|
|
|
|
if (!Settings::values.cpuopt_page_tables) { |
|
|
|
config.page_table = nullptr; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_block_linking) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_return_stack_buffer) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_fast_dispatcher) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_context_elimination) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_const_prop) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_misc_ir) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_reduce_misalign_checks) { |
|
|
|
config.only_detect_misalignment_via_page_table_on_page_boundary = false; |
|
|
|
if (Settings::values.cpu_accuracy != Settings::CPUAccuracy::Accurate) { |
|
|
|
if (!Settings::values.cpuopt_page_tables) { |
|
|
|
config.page_table = nullptr; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_block_linking) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_return_stack_buffer) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_fast_dispatcher) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_context_elimination) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_const_prop) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_misc_ir) { |
|
|
|
config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; |
|
|
|
} |
|
|
|
if (!Settings::values.cpuopt_reduce_misalign_checks) { |
|
|
|
config.only_detect_misalignment_via_page_table_on_page_boundary = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return std::make_unique<Dynarmic::A32::Jit>(config); |
|
|
|
|