diff options
| author | 2020-07-11 16:25:49 +0100 | |
|---|---|---|
| committer | 2020-07-11 16:38:38 +0100 | |
| commit | 505aa3a4c1eb2384ab5a46aecf6431db239b74e3 (patch) | |
| tree | 8576d3b825f7cd85122b857f5b10c6f9eae1b87e /src/core | |
| parent | configuration: Add settings to enable/disable specific CPU optimizations (diff) | |
| download | yuzu-505aa3a4c1eb2384ab5a46aecf6431db239b74e3.tar.gz yuzu-505aa3a4c1eb2384ab5a46aecf6431db239b74e3.tar.xz yuzu-505aa3a4c1eb2384ab5a46aecf6431db239b74e3.zip | |
configure_cpu: Show/Hide debugging options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 48 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 48 | ||||
| -rw-r--r-- | src/core/settings.h | 7 |
3 files changed, 57 insertions, 46 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 369a081cd..443ca72eb 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -143,29 +143,31 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable& | |||
| 143 | config.wall_clock_cntpct = uses_wall_clock; | 143 | config.wall_clock_cntpct = uses_wall_clock; |
| 144 | 144 | ||
| 145 | // Safe optimizations | 145 | // Safe optimizations |
| 146 | if (!Settings::values.cpuopt_page_tables) { | 146 | if (Settings::values.cpu_accuracy != Settings::CPUAccuracy::Accurate) { |
| 147 | config.page_table = nullptr; | 147 | if (!Settings::values.cpuopt_page_tables) { |
| 148 | } | 148 | config.page_table = nullptr; |
| 149 | if (!Settings::values.cpuopt_block_linking) { | 149 | } |
| 150 | config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; | 150 | if (!Settings::values.cpuopt_block_linking) { |
| 151 | } | 151 | config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; |
| 152 | if (!Settings::values.cpuopt_return_stack_buffer) { | 152 | } |
| 153 | config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; | 153 | if (!Settings::values.cpuopt_return_stack_buffer) { |
| 154 | } | 154 | config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; |
| 155 | if (!Settings::values.cpuopt_fast_dispatcher) { | 155 | } |
| 156 | config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; | 156 | if (!Settings::values.cpuopt_fast_dispatcher) { |
| 157 | } | 157 | config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; |
| 158 | if (!Settings::values.cpuopt_context_elimination) { | 158 | } |
| 159 | config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; | 159 | if (!Settings::values.cpuopt_context_elimination) { |
| 160 | } | 160 | config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; |
| 161 | if (!Settings::values.cpuopt_const_prop) { | 161 | } |
| 162 | config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; | 162 | if (!Settings::values.cpuopt_const_prop) { |
| 163 | } | 163 | config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; |
| 164 | if (!Settings::values.cpuopt_misc_ir) { | 164 | } |
| 165 | config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; | 165 | if (!Settings::values.cpuopt_misc_ir) { |
| 166 | } | 166 | config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; |
| 167 | if (!Settings::values.cpuopt_reduce_misalign_checks) { | 167 | } |
| 168 | config.only_detect_misalignment_via_page_table_on_page_boundary = false; | 168 | if (!Settings::values.cpuopt_reduce_misalign_checks) { |
| 169 | config.only_detect_misalignment_via_page_table_on_page_boundary = false; | ||
| 170 | } | ||
| 169 | } | 171 | } |
| 170 | 172 | ||
| 171 | return std::make_unique<Dynarmic::A32::Jit>(config); | 173 | return std::make_unique<Dynarmic::A32::Jit>(config); |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index e208a4aa7..a63a04a25 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp | |||
| @@ -195,29 +195,31 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable& | |||
| 195 | config.wall_clock_cntpct = uses_wall_clock; | 195 | config.wall_clock_cntpct = uses_wall_clock; |
| 196 | 196 | ||
| 197 | // Safe optimizations | 197 | // Safe optimizations |
| 198 | if (!Settings::values.cpuopt_page_tables) { | 198 | if (Settings::values.cpu_accuracy != Settings::CPUAccuracy::Accurate) { |
| 199 | config.page_table = nullptr; | 199 | if (!Settings::values.cpuopt_page_tables) { |
| 200 | } | 200 | config.page_table = nullptr; |
| 201 | if (!Settings::values.cpuopt_block_linking) { | 201 | } |
| 202 | config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; | 202 | if (!Settings::values.cpuopt_block_linking) { |
| 203 | } | 203 | config.optimizations &= ~Dynarmic::OptimizationFlag::BlockLinking; |
| 204 | if (!Settings::values.cpuopt_return_stack_buffer) { | 204 | } |
| 205 | config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; | 205 | if (!Settings::values.cpuopt_return_stack_buffer) { |
| 206 | } | 206 | config.optimizations &= ~Dynarmic::OptimizationFlag::ReturnStackBuffer; |
| 207 | if (!Settings::values.cpuopt_fast_dispatcher) { | 207 | } |
| 208 | config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; | 208 | if (!Settings::values.cpuopt_fast_dispatcher) { |
| 209 | } | 209 | config.optimizations &= ~Dynarmic::OptimizationFlag::FastDispatch; |
| 210 | if (!Settings::values.cpuopt_context_elimination) { | 210 | } |
| 211 | config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; | 211 | if (!Settings::values.cpuopt_context_elimination) { |
| 212 | } | 212 | config.optimizations &= ~Dynarmic::OptimizationFlag::GetSetElimination; |
| 213 | if (!Settings::values.cpuopt_const_prop) { | 213 | } |
| 214 | config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; | 214 | if (!Settings::values.cpuopt_const_prop) { |
| 215 | } | 215 | config.optimizations &= ~Dynarmic::OptimizationFlag::ConstProp; |
| 216 | if (!Settings::values.cpuopt_misc_ir) { | 216 | } |
| 217 | config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; | 217 | if (!Settings::values.cpuopt_misc_ir) { |
| 218 | } | 218 | config.optimizations &= ~Dynarmic::OptimizationFlag::MiscIROpt; |
| 219 | if (!Settings::values.cpuopt_reduce_misalign_checks) { | 219 | } |
| 220 | config.only_detect_misalignment_via_page_table_on_page_boundary = false; | 220 | if (!Settings::values.cpuopt_reduce_misalign_checks) { |
| 221 | config.only_detect_misalignment_via_page_table_on_page_boundary = false; | ||
| 222 | } | ||
| 221 | } | 223 | } |
| 222 | 224 | ||
| 223 | return std::make_shared<Dynarmic::A64::Jit>(config); | 225 | return std::make_shared<Dynarmic::A64::Jit>(config); |
diff --git a/src/core/settings.h b/src/core/settings.h index c081c083f..b3451a704 100644 --- a/src/core/settings.h +++ b/src/core/settings.h | |||
| @@ -382,6 +382,11 @@ enum class GPUAccuracy : u32 { | |||
| 382 | Extreme = 2, | 382 | Extreme = 2, |
| 383 | }; | 383 | }; |
| 384 | 384 | ||
| 385 | enum class CPUAccuracy { | ||
| 386 | Accurate = 0, | ||
| 387 | DebugMode = 1, | ||
| 388 | }; | ||
| 389 | |||
| 385 | extern bool configuring_global; | 390 | extern bool configuring_global; |
| 386 | 391 | ||
| 387 | template <typename Type> | 392 | template <typename Type> |
| @@ -428,6 +433,8 @@ struct Values { | |||
| 428 | Setting<bool> use_multi_core; | 433 | Setting<bool> use_multi_core; |
| 429 | 434 | ||
| 430 | // Cpu | 435 | // Cpu |
| 436 | CPUAccuracy cpu_accuracy; | ||
| 437 | |||
| 431 | bool cpuopt_page_tables; | 438 | bool cpuopt_page_tables; |
| 432 | bool cpuopt_block_linking; | 439 | bool cpuopt_block_linking; |
| 433 | bool cpuopt_return_stack_buffer; | 440 | bool cpuopt_return_stack_buffer; |