summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/settings.cpp1
-rw-r--r--src/common/settings.h1
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp3
-rw-r--r--src/yuzu/configuration/config.cpp4
-rw-r--r--src/yuzu/configuration/configure_cpu.cpp9
-rw-r--r--src/yuzu/configuration/configure_cpu.h1
-rw-r--r--src/yuzu/configuration/configure_cpu.ui12
7 files changed, 31 insertions, 0 deletions
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index 9ec71eced..6397308ec 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -122,6 +122,7 @@ void RestoreGlobalState(bool is_powered_on) {
122 values.cpu_accuracy.SetGlobal(true); 122 values.cpu_accuracy.SetGlobal(true);
123 values.cpuopt_unsafe_unfuse_fma.SetGlobal(true); 123 values.cpuopt_unsafe_unfuse_fma.SetGlobal(true);
124 values.cpuopt_unsafe_reduce_fp_error.SetGlobal(true); 124 values.cpuopt_unsafe_reduce_fp_error.SetGlobal(true);
125 values.cpuopt_unsafe_ignore_standard_fpcr.SetGlobal(true);
125 values.cpuopt_unsafe_inaccurate_nan.SetGlobal(true); 126 values.cpuopt_unsafe_inaccurate_nan.SetGlobal(true);
126 values.cpuopt_unsafe_fastmem_check.SetGlobal(true); 127 values.cpuopt_unsafe_fastmem_check.SetGlobal(true);
127 128
diff --git a/src/common/settings.h b/src/common/settings.h
index 6198f2d9f..c1a4ce4f6 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -129,6 +129,7 @@ struct Values {
129 129
130 Setting<bool> cpuopt_unsafe_unfuse_fma; 130 Setting<bool> cpuopt_unsafe_unfuse_fma;
131 Setting<bool> cpuopt_unsafe_reduce_fp_error; 131 Setting<bool> cpuopt_unsafe_reduce_fp_error;
132 Setting<bool> cpuopt_unsafe_ignore_standard_fpcr;
132 Setting<bool> cpuopt_unsafe_inaccurate_nan; 133 Setting<bool> cpuopt_unsafe_inaccurate_nan;
133 Setting<bool> cpuopt_unsafe_fastmem_check; 134 Setting<bool> cpuopt_unsafe_fastmem_check;
134 135
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index c8f6dc765..f871f7bf4 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -186,6 +186,9 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable*
186 if (Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()) { 186 if (Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()) {
187 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP; 187 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_ReducedErrorFP;
188 } 188 }
189 if (Settings::values.cpuopt_unsafe_ignore_standard_fpcr.GetValue()) {
190 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_IgnoreStandardFPCRValue;
191 }
189 if (Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()) { 192 if (Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()) {
190 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN; 193 config.optimizations |= Dynarmic::OptimizationFlag::Unsafe_InaccurateNaN;
191 } 194 }
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 916a22724..26fa8fc81 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -756,6 +756,8 @@ void Config::ReadCpuValues() {
756 QStringLiteral("cpuopt_unsafe_unfuse_fma"), true); 756 QStringLiteral("cpuopt_unsafe_unfuse_fma"), true);
757 ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error, 757 ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error,
758 QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true); 758 QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true);
759 ReadSettingGlobal(Settings::values.cpuopt_unsafe_ignore_standard_fpcr,
760 QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), true);
759 ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan, 761 ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan,
760 QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true); 762 QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true);
761 ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check, 763 ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check,
@@ -1339,6 +1341,8 @@ void Config::SaveCpuValues() {
1339 Settings::values.cpuopt_unsafe_unfuse_fma, true); 1341 Settings::values.cpuopt_unsafe_unfuse_fma, true);
1340 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), 1342 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"),
1341 Settings::values.cpuopt_unsafe_reduce_fp_error, true); 1343 Settings::values.cpuopt_unsafe_reduce_fp_error, true);
1344 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"),
1345 Settings::values.cpuopt_unsafe_ignore_standard_fpcr, true);
1342 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), 1346 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"),
1343 Settings::values.cpuopt_unsafe_inaccurate_nan, true); 1347 Settings::values.cpuopt_unsafe_inaccurate_nan, true);
1344 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"), 1348 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"),
diff --git a/src/yuzu/configuration/configure_cpu.cpp b/src/yuzu/configuration/configure_cpu.cpp
index 22219cbad..13db2ba98 100644
--- a/src/yuzu/configuration/configure_cpu.cpp
+++ b/src/yuzu/configuration/configure_cpu.cpp
@@ -34,12 +34,15 @@ void ConfigureCpu::SetConfiguration() {
34 ui->accuracy->setEnabled(runtime_lock); 34 ui->accuracy->setEnabled(runtime_lock);
35 ui->cpuopt_unsafe_unfuse_fma->setEnabled(runtime_lock); 35 ui->cpuopt_unsafe_unfuse_fma->setEnabled(runtime_lock);
36 ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock); 36 ui->cpuopt_unsafe_reduce_fp_error->setEnabled(runtime_lock);
37 ui->cpuopt_unsafe_ignore_standard_fpcr->setEnabled(runtime_lock);
37 ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock); 38 ui->cpuopt_unsafe_inaccurate_nan->setEnabled(runtime_lock);
38 ui->cpuopt_unsafe_fastmem_check->setEnabled(runtime_lock); 39 ui->cpuopt_unsafe_fastmem_check->setEnabled(runtime_lock);
39 40
40 ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma.GetValue()); 41 ui->cpuopt_unsafe_unfuse_fma->setChecked(Settings::values.cpuopt_unsafe_unfuse_fma.GetValue());
41 ui->cpuopt_unsafe_reduce_fp_error->setChecked( 42 ui->cpuopt_unsafe_reduce_fp_error->setChecked(
42 Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue()); 43 Settings::values.cpuopt_unsafe_reduce_fp_error.GetValue());
44 ui->cpuopt_unsafe_ignore_standard_fpcr->setChecked(
45 Settings::values.cpuopt_unsafe_ignore_standard_fpcr.GetValue());
43 ui->cpuopt_unsafe_inaccurate_nan->setChecked( 46 ui->cpuopt_unsafe_inaccurate_nan->setChecked(
44 Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue()); 47 Settings::values.cpuopt_unsafe_inaccurate_nan.GetValue());
45 ui->cpuopt_unsafe_fastmem_check->setChecked( 48 ui->cpuopt_unsafe_fastmem_check->setChecked(
@@ -84,6 +87,9 @@ void ConfigureCpu::ApplyConfiguration() {
84 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_reduce_fp_error, 87 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_reduce_fp_error,
85 ui->cpuopt_unsafe_reduce_fp_error, 88 ui->cpuopt_unsafe_reduce_fp_error,
86 cpuopt_unsafe_reduce_fp_error); 89 cpuopt_unsafe_reduce_fp_error);
90 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_ignore_standard_fpcr,
91 ui->cpuopt_unsafe_ignore_standard_fpcr,
92 cpuopt_unsafe_ignore_standard_fpcr);
87 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_inaccurate_nan, 93 ConfigurationShared::ApplyPerGameSetting(&Settings::values.cpuopt_unsafe_inaccurate_nan,
88 ui->cpuopt_unsafe_inaccurate_nan, 94 ui->cpuopt_unsafe_inaccurate_nan,
89 cpuopt_unsafe_inaccurate_nan); 95 cpuopt_unsafe_inaccurate_nan);
@@ -137,6 +143,9 @@ void ConfigureCpu::SetupPerGameUI() {
137 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_reduce_fp_error, 143 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_reduce_fp_error,
138 Settings::values.cpuopt_unsafe_reduce_fp_error, 144 Settings::values.cpuopt_unsafe_reduce_fp_error,
139 cpuopt_unsafe_reduce_fp_error); 145 cpuopt_unsafe_reduce_fp_error);
146 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_ignore_standard_fpcr,
147 Settings::values.cpuopt_unsafe_ignore_standard_fpcr,
148 cpuopt_unsafe_ignore_standard_fpcr);
140 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_inaccurate_nan, 149 ConfigurationShared::SetColoredTristate(ui->cpuopt_unsafe_inaccurate_nan,
141 Settings::values.cpuopt_unsafe_inaccurate_nan, 150 Settings::values.cpuopt_unsafe_inaccurate_nan,
142 cpuopt_unsafe_inaccurate_nan); 151 cpuopt_unsafe_inaccurate_nan);
diff --git a/src/yuzu/configuration/configure_cpu.h b/src/yuzu/configuration/configure_cpu.h
index 57ff2772a..b2b5f1671 100644
--- a/src/yuzu/configuration/configure_cpu.h
+++ b/src/yuzu/configuration/configure_cpu.h
@@ -40,6 +40,7 @@ private:
40 40
41 ConfigurationShared::CheckState cpuopt_unsafe_unfuse_fma; 41 ConfigurationShared::CheckState cpuopt_unsafe_unfuse_fma;
42 ConfigurationShared::CheckState cpuopt_unsafe_reduce_fp_error; 42 ConfigurationShared::CheckState cpuopt_unsafe_reduce_fp_error;
43 ConfigurationShared::CheckState cpuopt_unsafe_ignore_standard_fpcr;
43 ConfigurationShared::CheckState cpuopt_unsafe_inaccurate_nan; 44 ConfigurationShared::CheckState cpuopt_unsafe_inaccurate_nan;
44 ConfigurationShared::CheckState cpuopt_unsafe_fastmem_check; 45 ConfigurationShared::CheckState cpuopt_unsafe_fastmem_check;
45}; 46};
diff --git a/src/yuzu/configuration/configure_cpu.ui b/src/yuzu/configuration/configure_cpu.ui
index 31ef9e3f5..0e296d4e5 100644
--- a/src/yuzu/configuration/configure_cpu.ui
+++ b/src/yuzu/configuration/configure_cpu.ui
@@ -112,6 +112,18 @@
112 </widget> 112 </widget>
113 </item> 113 </item>
114 <item> 114 <item>
115 <widget class="QCheckBox" name="cpuopt_unsafe_ignore_standard_fpcr">
116 <property name="toolTip">
117 <string>
118 &lt;div&gt;This option improves the speed of 32 bits ASIMD floating-point functions by running with incorrect rounding modes.&lt;/div&gt;
119 </string>
120 </property>
121 <property name="text">
122 <string>Faster ASIMD instructions (32 bits only)</string>
123 </property>
124 </widget>
125 </item>
126 <item>
115 <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan"> 127 <widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan">
116 <property name="toolTip"> 128 <property name="toolTip">
117 <string> 129 <string>