fixed strict aliasing violation

git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1659 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2008-09-21 09:59:43 +00:00
parent 1f67d98a50
commit e4a4defaba
3 changed files with 9 additions and 4 deletions

View File

@@ -33,7 +33,7 @@ inline float allpass::process(float input)
float bufout;
bufout = buffer[bufidx];
undenormalise(bufout);
undenormalise(&bufout);
output = -input + bufout;
buffer[bufidx] = input + (bufout*feedback);

View File

@@ -38,10 +38,10 @@ inline float comb::process(float input)
float output;
output = buffer[bufidx];
undenormalise(output);
undenormalise(&output);
filterstore = (output*damp2) + (filterstore*damp1);
undenormalise(filterstore);
undenormalise(&filterstore);
buffer[bufidx] = input + (filterstore*feedback);

View File

@@ -8,7 +8,12 @@
#ifndef _denormals_
#define _denormals_
#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f
/*#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f*/
static void inline undenormalise(float *sample)
{
if (((*(unsigned int*)sample) & 0x7f800000) == 0)
*sample = 0.0f;
}
#endif//_denormals_