Merge pull request #2018 from softrabbit/denormal_refactor

Denormal protection refactoring
This commit is contained in:
Tres Finocchiaro
2015-04-27 12:54:47 +00:00
5 changed files with 39 additions and 47 deletions

View File

@@ -25,13 +25,7 @@
#ifndef MIXER_H
#define MIXER_H
// denormals stripping
#ifdef __SSE__
#include <xmmintrin.h>
#endif
#ifdef __SSE3__
#include <pmmintrin.h>
#endif
#include "denormals.h"
#include "lmmsconfig.h"

32
include/denormals.h Normal file
View File

@@ -0,0 +1,32 @@
// Denormals stripping.
// These snippets should be common enough to be considered public domain.
#ifndef DENORMALS_H
#define DENORMALS_H
#ifdef __SSE__
#include <xmmintrin.h>
#endif
#ifdef __SSE3__
#include <pmmintrin.h>
#endif
// Set denormal protection for this thread.
// To be on the safe side, don't set the DAZ flag for SSE2 builds,
// even if most SSE2 CPUs can handle it.
void inline disable_denormals() {
#ifdef __SSE3__
/* DAZ flag */
_MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON );
#endif
#ifdef __SSE__
/* FTZ flag */
_MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON );
#endif
}
#endif

View File

@@ -930,15 +930,7 @@ void Mixer::fifoWriter::finish()
void Mixer::fifoWriter::run()
{
// set denormal protection for this thread
#ifdef __SSE3__
/* DAZ flag */
_MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON );
#endif
#ifdef __SSE__
/* FTZ flag */
_MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON );
#endif
disable_denormals();
#if 0
#ifdef LMMS_BUILD_LINUX

View File

@@ -29,12 +29,7 @@
#include "ThreadableJob.h"
#include "Mixer.h"
#ifdef __SSE__
#include <xmmintrin.h>
#endif
#ifdef __SSE3__
#include <pmmintrin.h>
#endif
#include "denormals.h"
MixerWorkerThread::JobQueue MixerWorkerThread::globalJobQueue;
QWaitCondition * MixerWorkerThread::queueReadyWaitCond = NULL;
@@ -159,15 +154,8 @@ void MixerWorkerThread::startAndWaitForJobs()
void MixerWorkerThread::run()
{
// set denormal protection for this thread
#ifdef __SSE3__
/* DAZ flag */
_MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON );
#endif
#ifdef __SSE__
/* FTZ flag */
_MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON );
#endif
disable_denormals();
QMutex m;
while( m_quit == false )
{

View File

@@ -27,13 +27,7 @@
#include "lmmsversion.h"
#include "versioninfo.h"
// denormals stripping
#ifdef __SSE__
#include <xmmintrin.h>
#endif
#ifdef __SSE3__
#include <pmmintrin.h>
#endif
#include "denormals.h"
#include <QFileInfo>
#include <QLocale>
@@ -103,15 +97,7 @@ int main( int argc, char * * argv )
// intialize RNG
srand( getpid() + time( 0 ) );
// set denormal protection for this thread
#ifdef __SSE3__
/* DAZ flag */
_MM_SET_DENORMALS_ZERO_MODE( _MM_DENORMALS_ZERO_ON );
#endif
#ifdef __SSE__
/* FTZ flag */
_MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON );
#endif
disable_denormals();
bool core_only = false;
bool fullscreen = true;