[PD-dev] freeverb's type-punned pointers

Hans-Christoph Steiner hans at eds.org
Sat Dec 8 01:15:54 CET 2007


On Dec 7, 2007, at 7:05 PM, Martin Peach wrote:

> Hans-Christoph Steiner wrote:
>> Hey,
>>
>> I want to fix the type-punned pointer problem in freeverb~ so it  
>> can  be compiled with full optimization.  Here's the code snippets  
>> in  question, with the warnings being issued for the  
>> FIX_DENORM_NAN_FLOAT () lines:
>>
>> #define IS_DENORM_FLOAT(v)  ((((*(unsigned long*)&(v))&0x7f800000) 
>> ==0) &&((v)!=0.f))
>> #define FIX_DENORM_NAN_FLOAT(v)    ((v)=IS_DENORM_NAN_FLOAT(v)?0.f: 
>> (v))
>>
>>
>> static inline t_float comb_processR(t_freeverb *x, int filteridx,   
>> t_float input)
>> {
>> 	t_float output;
>> 	int bufidx = x->x_combidxR[filteridx];
>>
>> 	output = x->x_bufcombR[filteridx][bufidx];
>> 	FIX_DENORM_NAN_FLOAT(output);
>>
>> 	x->x_filterstoreR[filteridx] = (output*x->x_combdamp2) + (x-   
>> >x_filterstoreR[filteridx]*x->x_combdamp1);
>> 	FIX_DENORM_NAN_FLOAT(x->x_filterstoreR[filteridx]);
>>
>> [snip]
>>
>>
>> Could I just cast things to (unsigned long)?  Or is there a better  
>> way?
>>
>>
> I think the proper way is to use a union, so you can refer to the  
> same thing as two different types.

Ok, so that's out of my C knowledge.  I've only barely touched unions  
in my life...  anyone feel like taking a stab at this?  It would be  
lovely to fix the last of these "dereferencing type-punned pointer  
will break strict-aliasing rules" errors so that we can build all of  
Pd-extended to use better optimization and auto-vectorization.  (FYI,  
fixing this error is required for C99 compliance).

Here's the current list:
../../shared/common/binport.c
/home/pd/auto-build/pd-extended/externals/bsaylor/svf~.c
/home/pd/auto-build/pd-extended/externals/footils/knob/knob.c
/home/pd/auto-build/pd-extended/externals/creb/modules++/DSPIfilters.h
/home/pd/auto-build/pd-extended/externals/freeverb~/freeverb~.c
/home/pd/auto-build/pd-extended/externals/iem/iem_spec2/src/ 
spec2_sqrt~.c
/home/pd/auto-build/pd-extended/externals/iem/iem_tab/src/tab_sqrt.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/filter~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/ 
hml_shelf~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/ 
iem_sqrt4~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/lp1_t~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/para_bp2~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/peakenv~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/prvu~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/pvu~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/rvu~.c
/home/pd/auto-build/pd-extended/externals/iemlib/iemlib1/src/ 
vcf_filter~.c
/home/pd/auto-build/pd-extended/externals/moonlib/mknob.c
/home/pd/auto-build/pd-extended/externals/moonlib/readsfv~.c
/home/pd/auto-build/pd-extended/externals/sigpack/source/freqshift~.c
OSC-client.c
dumpOSC.c
hammer/Append.c
pdp2gem.cpp
sickle/Line.c
sickle/bitand.c
sickle/bitnot.c
sickle/bitor.c
sickle/bitshift.c
sickle/bitxor.c
sickle/curve.c
sickle/lores.c
sickle/onepole.c
sickle/rampsmooth.c
sickle/reson.c
sickle/slide.c
sickle/svf.c
vexp.c
vexp_if.c


.hc



------------------------------------------------------------------------ 
----

Access to computers should be unlimited and total.  - the hacker ethic






More information about the Pd-dev mailing list