summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar MerryMage2020-07-11 16:25:49 +0100
committerGravatar MerryMage2020-07-11 16:38:38 +0100
commit505aa3a4c1eb2384ab5a46aecf6431db239b74e3 (patch)
tree8576d3b825f7cd85122b857f5b10c6f9eae1b87e /src/core
parentconfiguration: Add settings to enable/disable specific CPU optimizations (diff)
downloadyuzu-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.cpp48
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp48
-rw-r--r--src/core/settings.h7
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
385enum class CPUAccuracy {
386 Accurate = 0,
387 DebugMode = 1,
388};
389
385extern bool configuring_global; 390extern bool configuring_global;
386 391
387template <typename Type> 392template <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;