Emu/Config: Add option for accurate PPU LLVM vector NaNs

Turned off by default.
This commit is contained in:
Nick Renieris 2020-05-13 16:47:36 +03:00 committed by Ani
parent 20d8d38e53
commit b1fb5b6239
3 changed files with 10 additions and 1 deletions

View file

@ -1590,6 +1590,7 @@ extern void ppu_initialize(const ppu_module& info)
{ {
non_win32, non_win32,
accurate_fma, accurate_fma,
accurate_ppu_vector_nan,
__bitset_enum_max __bitset_enum_max
}; };
@ -1603,6 +1604,10 @@ extern void ppu_initialize(const ppu_module& info)
{ {
settings += ppu_settings::accurate_fma; settings += ppu_settings::accurate_fma;
} }
if (g_cfg.core.llvm_ppu_accurate_vector_nan)
{
settings += ppu_settings::accurate_ppu_vector_nan;
}
// Write version, hash, CPU, settings // Write version, hash, CPU, settings
fmt::append(obj_name, "v3-tane-%s-%s-%s.obj", fmt::base57(output, 16), fmt::base57(settings), jit_compiler::cpu(g_cfg.core.llvm_cpu)); fmt::append(obj_name, "v3-tane-%s-%s-%s.obj", fmt::base57(output, 16), fmt::base57(settings), jit_compiler::cpu(g_cfg.core.llvm_cpu));

View file

@ -107,7 +107,10 @@ public:
auto vec_handle_nan(T&& expr) auto vec_handle_nan(T&& expr)
{ {
value_t<typename T::type> result; value_t<typename T::type> result;
result.value = VecHandleNan(expr.eval(m_ir)); if (g_cfg.core.llvm_ppu_accurate_vector_nan)
result.value = VecHandleNan(expr.eval(m_ir));
else
result.value = expr.eval(m_ir);
return result; return result;
} }

View file

@ -46,6 +46,7 @@ struct cfg_root : cfg::node
cfg::_bool spu_accurate_xfloat{ this, "Accurate xfloat", false }; cfg::_bool spu_accurate_xfloat{ this, "Accurate xfloat", false };
cfg::_bool spu_approx_xfloat{ this, "Approximate xfloat", true }; cfg::_bool spu_approx_xfloat{ this, "Approximate xfloat", true };
cfg::_bool llvm_accurate_dfma{ this, "LLVM Accurate DFMA", true }; // Enable accurate double-precision FMA for CPUs which do not support it natively cfg::_bool llvm_accurate_dfma{ this, "LLVM Accurate DFMA", true }; // Enable accurate double-precision FMA for CPUs which do not support it natively
cfg::_bool llvm_ppu_accurate_vector_nan{ this, "PPU LLVM Accurate Vector NaN values", false };
cfg::_bool debug_console_mode{ this, "Debug Console Mode", false }; // Debug console emulation, not recommended cfg::_bool debug_console_mode{ this, "Debug Console Mode", false }; // Debug console emulation, not recommended
cfg::_enum<lib_loading_type> lib_loading{ this, "Lib Loader", lib_loading_type::liblv2only }; cfg::_enum<lib_loading_type> lib_loading{ this, "Lib Loader", lib_loading_type::liblv2only };