Browse Source
Merge pull request #5278 from MerryMage/cpuopt_unsafe_inaccurate_nan
dynarmic: Add Unsafe_InaccurateNaN optimization
pull/15/merge
bunnei
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with
27 additions and
1 deletions
externals/dynarmic
src/core/arm/dynarmic/arm_dynarmic_32.cpp
src/core/arm/dynarmic/arm_dynarmic_64.cpp
src/core/settings.h
src/yuzu/configuration/config.cpp
src/yuzu/configuration/configure_cpu.cpp
src/yuzu/configuration/configure_cpu.ui
@ -1 +1 @@
Subproject commit 4a9a0d07f7376b439430e686721e8176c7b56ce7
Subproject commit 3806284cbefc4115436dcdc687776a45ec313093
@ -181,6 +181,9 @@ std::shared_ptr<Dynarmic::A32::Jit> ARM_Dynarmic_32::MakeJit(Common::PageTable&
if ( Settings : : values . cpuopt_unsafe_reduce_fp_error ) {
config . optimizations | = Dynarmic : : OptimizationFlag : : Unsafe_ReducedErrorFP ;
}
if ( Settings : : values . cpuopt_unsafe_inaccurate_nan ) {
config . optimizations | = Dynarmic : : OptimizationFlag : : Unsafe_InaccurateNaN ;
}
}
return std : : make_unique < Dynarmic : : A32 : : Jit > ( config ) ;
@ -212,6 +212,9 @@ std::shared_ptr<Dynarmic::A64::Jit> ARM_Dynarmic_64::MakeJit(Common::PageTable&
if ( Settings : : values . cpuopt_unsafe_reduce_fp_error ) {
config . optimizations | = Dynarmic : : OptimizationFlag : : Unsafe_ReducedErrorFP ;
}
if ( Settings : : values . cpuopt_unsafe_inaccurate_nan ) {
config . optimizations | = Dynarmic : : OptimizationFlag : : Unsafe_InaccurateNaN ;
}
}
return std : : make_shared < Dynarmic : : A64 : : Jit > ( config ) ;
@ -131,6 +131,7 @@ struct Values {
bool cpuopt_unsafe_unfuse_fma ;
bool cpuopt_unsafe_reduce_fp_error ;
bool cpuopt_unsafe_inaccurate_nan ;
/ / Renderer
Setting < RendererBackend > renderer_backend ;
@ -764,6 +764,8 @@ void Config::ReadCpuValues() {
ReadSetting ( QStringLiteral ( " cpuopt_unsafe_unfuse_fma " ) , true ) . toBool ( ) ;
Settings : : values . cpuopt_unsafe_reduce_fp_error =
ReadSetting ( QStringLiteral ( " cpuopt_unsafe_reduce_fp_error " ) , true ) . toBool ( ) ;
Settings : : values . cpuopt_unsafe_inaccurate_nan =
ReadSetting ( QStringLiteral ( " cpuopt_unsafe_inaccurate_nan " ) , true ) . toBool ( ) ;
}
qt_config - > endGroup ( ) ;
@ -1327,6 +1329,8 @@ void Config::SaveCpuValues() {
Settings : : values . cpuopt_unsafe_unfuse_fma , true ) ;
WriteSetting ( QStringLiteral ( " cpuopt_unsafe_reduce_fp_error " ) ,
Settings : : values . cpuopt_unsafe_reduce_fp_error , true ) ;
WriteSetting ( QStringLiteral ( " cpuopt_unsafe_inaccurate_nan " ) ,
Settings : : values . cpuopt_unsafe_inaccurate_nan , true ) ;
}
qt_config - > endGroup ( ) ;
@ -36,6 +36,8 @@ void ConfigureCpu::SetConfiguration() {
ui - > cpuopt_unsafe_unfuse_fma - > setChecked ( Settings : : values . cpuopt_unsafe_unfuse_fma ) ;
ui - > cpuopt_unsafe_reduce_fp_error - > setEnabled ( runtime_lock ) ;
ui - > cpuopt_unsafe_reduce_fp_error - > setChecked ( Settings : : values . cpuopt_unsafe_reduce_fp_error ) ;
ui - > cpuopt_unsafe_inaccurate_nan - > setEnabled ( runtime_lock ) ;
ui - > cpuopt_unsafe_inaccurate_nan - > setChecked ( Settings : : values . cpuopt_unsafe_inaccurate_nan ) ;
}
void ConfigureCpu : : AccuracyUpdated ( int index ) {
@ -61,6 +63,7 @@ void ConfigureCpu::ApplyConfiguration() {
static_cast < Settings : : CPUAccuracy > ( ui - > accuracy - > currentIndex ( ) ) ;
Settings : : values . cpuopt_unsafe_unfuse_fma = ui - > cpuopt_unsafe_unfuse_fma - > isChecked ( ) ;
Settings : : values . cpuopt_unsafe_reduce_fp_error = ui - > cpuopt_unsafe_reduce_fp_error - > isChecked ( ) ;
Settings : : values . cpuopt_unsafe_inaccurate_nan = ui - > cpuopt_unsafe_inaccurate_nan - > isChecked ( ) ;
}
void ConfigureCpu : : changeEvent ( QEvent * event ) {
@ -109,6 +109,18 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cpuopt_unsafe_inaccurate_nan">
<property name="text">
<string>Inaccurate NaN handling</string>
</property>
<property name="toolTip">
<string>
<div>This option improves speed by removing NaN checking. Please note this also reduces accuracy of certain floating-point instructions.</div>
</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>