diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 22 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_64.cpp | 22 |
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 | } |