29#if ! defined( _TMS320C6X )
53#if defined( _TMS320C6X )
56#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
57#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
59#elif ((defined _MSC_VER) || defined(WINDOWS_VERSION))
65#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
66#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
145#elif defined(__linux__)
149#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
150#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
152#elif (defined (__GNUC__) || defined(MAC_VERSION))
157#define AAX_SCOPE_COMPUTE_DENORMALS() AAX_StDenormalAsZeroFlagsOff computeDenormalFlagsScope ## __LINE__ ; do {} while (0)
158#define AAX_SCOPE_DENORMALS_AS_ZERO() AAX_StDenormalAsZeroFlagsOn denormalAsZeroFlagsScope ## __LINE__ ; do {} while (0)
161struct AAX_StDenormalAsZeroFlagsOn
164 AAX_StDenormalAsZeroFlagsOn() { set_flags(); }
165 ~AAX_StDenormalAsZeroFlagsOn() { reset_flags(); }
168#if !defined(__arm64__)
169 void set_flags() { fegetenv(&mPrevFlags); fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV); }
171 void set_flags() { fegetenv(&mPrevFlags); fesetenv(FE_DFL_DISABLE_DENORMS_ENV); }
173 void reset_flags() { fesetenv(&mPrevFlags); }
176struct AAX_StDenormalAsZeroFlagsOff
179 AAX_StDenormalAsZeroFlagsOff() { set_flags(); }
180 ~AAX_StDenormalAsZeroFlagsOff() { reset_flags(); }
183 void set_flags() { fegetenv(&mPrevFlags); fesetenv(FE_DFL_ENV); }
184 void reset_flags() { fesetenv(&mPrevFlags); }
192#error AAX_SCOPE_COMPUTE_DENORMALS is not defined for this compiler
193#error AAX_SCOPE_DENORMALS_AS_ZERO is not defined for this compiler
196#define AAX_SCOPE_COMPUTE_DENORMALS() do {} while(0)
197#define AAX_SCOPE_DENORMALS_AS_ZERO() do {} while(0)
209#if ! defined( _TMS320C6X )
210 static const float cMinimumNormalFloat = std::numeric_limits<float>::min();
224#if defined(WINDOWS_VERSION) || defined(MAC_VERSION) || defined(LINUX_VERSION)
233#if defined(WINDOWS_VERSION) || defined(MAC_VERSION) || defined(LINUX_VERSION)
243#if defined(WINDOWS_VERSION) || defined(MAC_VERSION) || defined(LINUX_VERSION)
255#if ! defined( _TMS320C6X )
256 if(iValue < cMinimumNormalFloat && iValue > -cMinimumNormalFloat) iValue=0.0f;
273#if ! defined( _TMS320C6X )
274 for( int32_t i = 0; i < inLength; ++i )
276 float curFloat = *inSamples;
277 if(
fabsf(curFloat) < cMinimumNormalFloat )
279 *(inSamples++) = curFloat;
Various utility definitions for AAX.
Definition: AAX_EnvironmentUtilities.h:59
const double cDenormalAvoidanceOffset
Definition: AAX_Denormal.h:206
void FilterDenormals(float *inSamples, int32_t inLength)
Round all denormal/subnormal samples in a buffer to zero.
Definition: AAX_Denormal.h:270
float fabsf(float iVal)
Definition: AAX_MiscUtils.h:182
void DeDenormal(double &iValue)
Clamps very small floating point values to zero.
Definition: AAX_Denormal.h:222
void DeDenormalFine(float &iValue)
Definition: AAX_Denormal.h:253
const float cFloatDenormalAvoidanceOffset
Definition: AAX_Denormal.h:207