42#if ! defined( _TMS320C6X )
66#if defined( _TMS320C6X )
69#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
70#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
72#elif ((defined _MSC_VER) || defined(WINDOWS_VERSION))
78#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
79#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
158#elif defined(__linux__)
162#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
163#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
165#elif (defined (__GNUC__) || defined(MAC_VERSION))
170#define AAX_SCOPE_COMPUTE_DENORMALS() AAX_StDenormalAsZeroFlagsOff computeDenormalFlagsScope ## __LINE__ ; do {} while (0)
171#define AAX_SCOPE_DENORMALS_AS_ZERO() AAX_StDenormalAsZeroFlagsOn denormalAsZeroFlagsScope ## __LINE__ ; do {} while (0)
174struct AAX_StDenormalAsZeroFlagsOn
177 AAX_StDenormalAsZeroFlagsOn() { set_flags(); }
178 ~AAX_StDenormalAsZeroFlagsOn() { reset_flags(); }
181#if !defined(__arm64__)
182 void set_flags() { fegetenv(&mPrevFlags); fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV); }
184 void set_flags() { fegetenv(&mPrevFlags); fesetenv(FE_DFL_DISABLE_DENORMS_ENV); }
186 void reset_flags() { fesetenv(&mPrevFlags); }
189struct AAX_StDenormalAsZeroFlagsOff
192 AAX_StDenormalAsZeroFlagsOff() { set_flags(); }
193 ~AAX_StDenormalAsZeroFlagsOff() { reset_flags(); }
196 void set_flags() { fegetenv(&mPrevFlags); fesetenv(FE_DFL_ENV); }
197 void reset_flags() { fesetenv(&mPrevFlags); }
205#error AAX_SCOPE_COMPUTE_DENORMALS is not defined for this compiler
206#error AAX_SCOPE_DENORMALS_AS_ZERO is not defined for this compiler
209#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
210#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
222#if ! defined( _TMS320C6X )
223 static const float cMinimumNormalFloat = std::numeric_limits<float>::min();
237#if defined(WINDOWS_VERSION) || defined(MAC_VERSION) || defined(LINUX_VERSION)
246#if defined(WINDOWS_VERSION) || defined(MAC_VERSION) || defined(LINUX_VERSION)
256#if defined(WINDOWS_VERSION) || defined(MAC_VERSION) || defined(LINUX_VERSION)
268#if ! defined( _TMS320C6X )
269 if(iValue < cMinimumNormalFloat && iValue > -cMinimumNormalFloat) iValue=0.0f;
286#if ! defined( _TMS320C6X )
287 for( int32_t i = 0; i < inLength; ++i )
289 float curFloat = *inSamples;
290 if(
fabsf(curFloat) < cMinimumNormalFloat )
292 *(inSamples++) = curFloat;
Various utility definitions for AAX.
Definition: AAX_EnvironmentUtilities.h:72
const double cDenormalAvoidanceOffset
Definition: AAX_Denormal.h:219
void FilterDenormals(float *inSamples, int32_t inLength)
Round all denormal/subnormal samples in a buffer to zero.
Definition: AAX_Denormal.h:283
float fabsf(float iVal)
Definition: AAX_MiscUtils.h:195
void DeDenormal(double &iValue)
Clamps very small floating point values to zero.
Definition: AAX_Denormal.h:235
void DeDenormalFine(float &iValue)
Definition: AAX_Denormal.h:266
const float cFloatDenormalAvoidanceOffset
Definition: AAX_Denormal.h:220