diff --git a/src/engine/enginemaster.cpp b/src/engine/enginemaster.cpp index 4d94842..e984a4f 100644 --- a/src/engine/enginemaster.cpp +++ b/src/engine/enginemaster.cpp @@ -19,6 +19,8 @@ #include #include +#include + #include "controlpushbutton.h" #include "configobject.h" #include "controlaudiotaperpot.h" @@ -44,6 +46,7 @@ #include "util/defs.h" #include "playermanager.h" #include "engine/channelmixer.h" +#include "util/experiment.h" EngineMaster::EngineMaster(ConfigObject* _config, const char* group, @@ -308,6 +311,28 @@ void EngineMaster::process(const int iBufferSize) { } Trace t("EngineMaster::process"); +#define _MM_DENORMALS_ZERO_MASK 0x0040 +#define _MM_DENORMALS_ZERO_ON 0x0040 +#define _MM_DENORMALS_ZERO_OFF 0x0000 + +#define _MM_SET_DENORMALS_ZERO_MODE(mode) \ + _mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (mode)) +#define _MM_GET_DENORMALS_ZERO_MODE() \ + (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK) + + static bool ftz_on = false; + if (Experiment::isBase()) { + if (ftz_on) { + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF); + ftz_on = false; + } + } else if (Experiment::isExperiment()) { + if (!ftz_on) { + _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); + ftz_on = true; + } + } + bool masterEnabled = m_pMasterEnabled->get(); bool headphoneEnabled = m_pHeadphoneEnabled->get();