summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp22
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_64.cpp22
2 files changed, 36 insertions, 8 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index 77a44f862..23be0447a 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -183,16 +183,30 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable*
183 // Unsafe optimizations 183 // Unsafe optimizations
184 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { 184 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) {
185 config.unsafe_optimizations = true; 185 config.unsafe_optimizations = true;
186 if (Settings::values.cpuopt_unsafe_unfuse_fma.GetValue()) { 186 if (Settings::values.cpuopt_unsafe_unfuse_fma) {
187 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; 187 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
188 } 188 }
189 if (Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()) { 189 if (Settings::values.cpuopt_unsafe_reduce_fp_error) {
190 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP; 190 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;
191 } 191 }
192 if (Settings::values.cpuopt_unsafe_ignore_standard_fpcr.GetValue()) { 192 if (Settings::values.cpuopt_unsafe_ignore_standard_fpcr) {
193 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue; 193 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
194 } 194 }
195 if (Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()) { 195 if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
196 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
197 }
198 }
199
200 // Curated optimizations
201 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Auto) {
202 config.unsafe_optimizations = true;
203 if (Settings::values.cpuopt_unsafe_unfuse_fma) {
204 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
205 }
206 if (Settings::values.cpuopt_unsafe_ignore_standard_fpcr) {
207 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
208 }
209 if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
196 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; 210 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
197 } 211 }
198 } 212 }
diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
index 75332e348..6ff69db2f 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp
@@ -223,16 +223,30 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable*
223 // Unsafe optimizations 223 // Unsafe optimizations
224 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) { 224 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Unsafe) {
225 config.unsafe_optimizations = true; 225 config.unsafe_optimizations = true;
226 if (Settings::values.cpuopt_unsafe_unfuse_fma.GetValue()) { 226 if (Settings::values.cpuopt_unsafe_unfuse_fma) {
227 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA; 227 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
228 } 228 }
229 if (Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()) { 229 if (Settings::values.cpuopt_unsafe_reduce_fp_error) {
230 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP; 230 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;
231 } 231 }
232 if (Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()) { 232 if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
233 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; 233 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
234 } 234 }
235 if (Settings::values.cpuopt_unsafe_fastmem_check.GetValue()) { 235 if (Settings::values.cpuopt_unsafe_fastmem_check) {
236 config.fastmem_address_space_bits = 64;
237 }
238 }
239
240 // Curated optimizations
241 if (Settings::values.cpu_accuracy.GetValue() == Settings::CPUAccuracy::Auto) {
242 config.unsafe_optimizations = true;
243 if (Settings::values.cpuopt_unsafe_unfuse_fma) {
244 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_UnfuseFMA;
245 }
246 if (Settings::values.cpuopt_unsafe_inaccurate_nan) {
247 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
248 }
249 if (Settings::values.cpuopt_unsafe_fastmem_check) {
236 config.fastmem_address_space_bits = 64; 250 config.fastmem_address_space_bits = 64;
237 } 251 }
238 } 252 }