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