From 9911a09fc51bedc00cdad2ce8651fc0802c10b1e Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 9 Jan 2018 15:06:21 +0100 Subject: gui/main: disable denormals on win32 --- gui/main.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/gui/main.cpp b/gui/main.cpp index 5d43cc14..d07e0d27 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -7,8 +7,6 @@ # include # include # include -#else -# include #endif #include "migration/migration.hpp" @@ -26,6 +24,32 @@ using namespace options; #include #include +#if /* denormal control */ \ + /* GNU */ defined __x86_64__ || defined __SSE2__ || \ + /* MSVC */ defined _M_AMD64 || (defined _M_IX86_FP && _M_IX86_FP >= 2) +# include +# include +# include + +#define OTR_HAS_DENORM_CONTROL +void set_fp_mask() +{ + unsigned old_mask = _mm_getcsr(); + (void) old_mask; + + _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); + _MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST); + _MM_SET_EXCEPTION_MASK(_MM_MASK_MASK); + +#if 0 + unsigned new_mask = _mm_getcsr(); + + qDebug() << "old" << (void*) old_mask << "new" << (void*) new_mask; +#endif +} +#endif + void set_qt_style() { #if defined _WIN32 @@ -144,6 +168,10 @@ main(int argc, char** argv) attach_parent_console(); #endif +#if defined OTR_HAS_DENORM_CONTROL + set_fp_mask(); +#endif + #if QT_VERSION >= 0x050600 // flag introduced in QT 5.6. It is non-essential so might as well allow compilation on older systems. QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif -- cgit v1.2.3