float output;
float bufout;
- bufout = buffer[bufidx];
- undenormalise(bufout);
+ bufout = undenormalise( buffer[bufidx] );
output = -input + bufout;
buffer[bufidx] = input + (bufout*feedback);
{
float output;
- output = buffer[bufidx];
- undenormalise(output);
+ output = undenormalise( buffer[bufidx] );
- filterstore = (output*damp2) + (filterstore*damp1);
- undenormalise(filterstore);
+ filterstore = undenormalise( output*damp2 + filterstore*damp1 );
- buffer[bufidx] = input + (filterstore*feedback);
+ buffer[bufidx] = input + filterstore*feedback;
if(++bufidx>=bufsize) bufidx = 0;
#ifndef _denormals_
#define _denormals_
-#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f
+#include <stdint.h>
+
+static inline float undenormalise( float f )
+{
+ union { float f; uint32_t u; } data;
+ data.f = f;
+ if( (data.u & 0x7f800000) == 0 )
+ return 0.0;
+ return f;
+}
#endif//_denormals_
-//ends